Refactoring

master
Markus Kreth 2 years ago
parent 0c015a07cd
commit ed81076d64
  1. 124
      src/main/java/de/kreth/invoice/security/UserManager.java

@ -3,7 +3,6 @@ package de.kreth.invoice.security;
import org.keycloak.KeycloakPrincipal; import org.keycloak.KeycloakPrincipal;
import org.keycloak.KeycloakSecurityContext; import org.keycloak.KeycloakSecurityContext;
import org.keycloak.representations.AccessToken; import org.keycloak.representations.AccessToken;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.core.Authentication; import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
@ -16,80 +15,79 @@ import de.kreth.invoice.persistence.UserRepository;
@Component @Component
public class UserManager { public class UserManager {
private UserRepository userRepository; private UserRepository userRepository;
@Autowired public UserManager(UserRepository userRepository) {
public void setUserRepository(UserRepository userRepository) { this.userRepository = userRepository;
this.userRepository = userRepository; }
}
private AccessToken getAccessToken() {
Authentication authentication = getAuthentication();
KeycloakPrincipal<?> principal = (KeycloakPrincipal<?>) authentication.getPrincipal();
KeycloakSecurityContext context = principal.getKeycloakSecurityContext();
return context.getToken();
}
public User getLoggedInUser() { private AccessToken getAccessToken() {
Authentication authentication = getAuthentication();
KeycloakPrincipal<?> principal = (KeycloakPrincipal<?>) authentication.getPrincipal();
AccessToken accessToken = getAccessToken(); KeycloakSecurityContext context = principal.getKeycloakSecurityContext();
if (accessToken != null) { return context.getToken();
User user = userRepository.findByPrincipalId(accessToken.getSubject());
if (user != null && hasChanges(user, accessToken)) {
save(user);
}
return user;
}
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) {
if (user == null) {
return true;
} }
boolean result = false; public User getLoggedInUser() {
AccessToken accessToken = getAccessToken();
if (accessToken != null) {
User user = userRepository.findByPrincipalId(accessToken.getSubject());
if (user != null && hasChanges(user, accessToken)) {
save(user);
}
return user;
}
return null;
}
if (!accessToken.getGivenName().equals(user.getGivenName()) /**
|| !accessToken.getFamilyName().equals(user.getFamilyName()) * Updated user with values from accessToken and returns true if something
|| !accessToken.getEmail().equals(user.getEmail())) { * changed.
result = true; *
user.setPrincipal(accessToken); * @param user
* @param accessToken
* @return
*/
private boolean hasChanges(User user, AccessToken accessToken) {
if (user == null) {
return true;
}
boolean result = false;
if (!accessToken.getGivenName().equals(user.getGivenName())
|| !accessToken.getFamilyName().equals(user.getFamilyName())
|| !accessToken.getEmail().equals(user.getEmail())) {
result = true;
user.setPrincipal(accessToken);
}
return result;
} }
return result;
}
public User save(User entity) { public User save(User entity) {
return userRepository.save(entity); return userRepository.save(entity);
} }
private Authentication getAuthentication() { private Authentication getAuthentication() {
return SecurityContextHolder.getContext().getAuthentication(); return SecurityContextHolder.getContext().getAuthentication();
} }
public User create() { public User create() {
AccessToken accessToken = getAccessToken(); AccessToken accessToken = getAccessToken();
User user = new User(); User user = new User();
user.setPrincipal(accessToken); user.setPrincipal(accessToken);
UserBank bank = new UserBank(); UserBank bank = new UserBank();
bank.setUser(user); bank.setUser(user);
user.setBank(bank); user.setBank(bank);
UserAdress adress = new UserAdress(); UserAdress adress = new UserAdress();
adress.setUser(user); adress.setUser(user);
user.setAdress(adress); user.setAdress(adress);
return user; return user;
} }
} }

Loading…
Cancel
Save