
com.tngtech.keycloakmock.impl.session.UserData Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of mock Show documentation
Show all versions of mock Show documentation
Base module of keycloak-mock
The newest version!
package com.tngtech.keycloakmock.impl.session;
import java.util.Arrays;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
public class UserData {
@Nonnull private final String subject;
@Nullable private final String givenName;
@Nonnull private final String familyName;
@Nonnull private final String email;
@Nonnull private final String preferredUsername;
private UserData(
@Nonnull String subject,
@Nullable String givenName,
@Nonnull String familyName,
@Nonnull String email,
@Nonnull String preferredUsername) {
this.subject = subject;
this.givenName = givenName;
this.familyName = familyName;
this.email = email;
this.preferredUsername = preferredUsername;
}
public static UserData fromUsernameAndHostname(
@Nonnull String username, @Nonnull String hostname) {
String email;
String preferredUsername;
int atIndex = username.indexOf("@");
if (atIndex > 0) {
preferredUsername = username.substring(0, atIndex);
email = username.replace(' ', '+');
} else {
preferredUsername = username;
email = username.replace(' ', '+') + "@" + hostname;
}
Name name = extractName(preferredUsername);
return new UserData(username, name.givenName, name.familyName, email, preferredUsername);
}
@Nonnull
private static Name extractName(@Nonnull String input) {
List names =
Arrays.stream(input.split("[._ ]"))
.filter(s -> !s.isEmpty())
.map(
s -> {
String firstChar = s.substring(0, 1);
return firstChar.toUpperCase() + s.substring(1);
})
.collect(Collectors.toList());
if (names.isEmpty()) {
return new Name(null, input);
} else if (names.size() == 1) {
return new Name(null, names.get(0));
} else {
int index = names.size() - 1;
String familyName = names.get(index);
names.remove(index);
return new Name(String.join(" ", names), familyName);
}
}
@Nonnull
public String getSubject() {
return subject;
}
@Nullable
public String getGivenName() {
return givenName;
}
@Nonnull
public String getFamilyName() {
return familyName;
}
@Nonnull
public String getEmail() {
return email;
}
@Nonnull
public String getPreferredUsername() {
return preferredUsername;
}
@Nonnull
public String getName() {
return givenName != null ? givenName + " " + familyName : familyName;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
UserData userData = (UserData) o;
return Objects.equals(subject, userData.subject)
&& Objects.equals(givenName, userData.givenName)
&& Objects.equals(familyName, userData.familyName)
&& Objects.equals(email, userData.email)
&& Objects.equals(preferredUsername, userData.preferredUsername);
}
@Override
public int hashCode() {
return Objects.hash(subject, givenName, familyName, email, preferredUsername);
}
@Override
public String toString() {
return "UserData{"
+ "subject='"
+ subject
+ '\''
+ ", givenName='"
+ givenName
+ '\''
+ ", familyName='"
+ familyName
+ '\''
+ ", email='"
+ email
+ '\''
+ ", preferredUsername='"
+ preferredUsername
+ '\''
+ '}';
}
private static class Name {
@Nullable private final String givenName;
@Nonnull private final String familyName;
private Name(@Nullable String givenName, @Nonnull String familyName) {
this.givenName = givenName;
this.familyName = familyName;
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy