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