Add method to retrieve authenticated user.
This commit is contained in:
@@ -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();
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user