User is updated from AccessToken if Givenname, Familyname or Email are changed.

master
Markus Kreth 4 years ago
parent f3dfdfb084
commit 69313ef9c9
  1. 26
      src/main/java/de/kreth/invoice/security/UserManager.java

@ -26,20 +26,44 @@ public class UserManager {
private AccessToken getAccessToken() { private AccessToken getAccessToken() {
Authentication authentication = getAuthentication(); Authentication authentication = getAuthentication();
KeycloakPrincipal<?> principal = (KeycloakPrincipal<?>) authentication.getPrincipal(); KeycloakPrincipal<?> principal = (KeycloakPrincipal<?>) authentication.getPrincipal();
KeycloakSecurityContext context = principal.getKeycloakSecurityContext(); KeycloakSecurityContext context = principal.getKeycloakSecurityContext();
return context.getToken(); return context.getToken();
} }
public User getLoggedInUser() { public User getLoggedInUser() {
AccessToken accessToken = getAccessToken(); AccessToken accessToken = getAccessToken();
if (accessToken != null) { if (accessToken != null) {
User user = userRepository.findByPrincipalId(accessToken.getSubject()); User user = userRepository.findByPrincipalId(accessToken.getSubject());
if (hasChanges(user, accessToken)) {
save(user);
}
return user; return user;
} }
return null; return null;
} }
/**
* Updated user with values from accessToken and returns true if something
* changed.
*
* @param user
* @param accessToken
* @return
*/
private boolean hasChanges(User user, AccessToken accessToken) {
boolean result = false;
if (!accessToken.getGivenName().contentEquals(user.getGivenName())
|| !accessToken.getFamilyName().contentEquals(user.getFamilyName())
|| !accessToken.getEmail().contentEquals(user.getEmail())) {
result = true;
user.setPrincipal(accessToken);
}
return result;
}
public User save(User entity) { public User save(User entity) {
return userRepository.save(entity); return userRepository.save(entity);
} }

Loading…
Cancel
Save