Add method to retrieve authenticated user.

This commit is contained in:
Florian THIERRY
2023-12-01 10:00:07 +01:00
parent 89d78e6814
commit 4a7b0b2daf
2 changed files with 28 additions and 1 deletions

View File

@@ -0,0 +1,13 @@
package org.sportshub.application.security;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.stereotype.Component;
// This class allow to retrieve connected user information through "Authentication" object.
@Component
public class AuthenticationFacade {
public Authentication getAuthentication() {
return SecurityContextHolder.getContext().getAuthentication();
}
}

View File

@@ -4,11 +4,13 @@ import java.util.List;
import java.util.Optional;
import java.util.UUID;
import org.sportshub.application.security.AuthenticationFacade;
import org.sportshub.application.security.JwtService;
import org.sportshub.application.security.annotation.AllowedToAdmins;
import org.sportshub.domain.exception.LoginFailureException;
import org.sportshub.domain.user.model.User;
import org.sportshub.domain.user.port.UserPort;
import org.springframework.security.core.Authentication;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.stereotype.Service;
@@ -17,15 +19,18 @@ public class UserUseCases {
private final PasswordEncoder passwordEncoder;
private final JwtService jwtService;
private final UserPort userPort;
private final AuthenticationFacade authenticationFacade;
public UserUseCases(
PasswordEncoder passwordEncoder,
AuthenticationFacade authenticationFacade,
JwtService jwtService,
PasswordEncoder passwordEncoder,
UserPort userPort
) {
this.passwordEncoder = passwordEncoder;
this.jwtService = jwtService;
this.userPort = userPort;
this.authenticationFacade = authenticationFacade;
}
public Optional<User> findById(UUID userId) {
@@ -43,4 +48,13 @@ public class UserUseCases {
.map(jwtService::createJwt)
.orElseThrow(LoginFailureException::new);
}
public Optional<User> getAuthenticatedUser() {
return Optional.of(authenticationFacade.getAuthentication())
.map(Authentication::getPrincipal)
.filter(String.class::isInstance)
.map(String.class::cast)
.map(UUID::fromString)
.flatMap(userPort::findById);
}
}