From 4a7b0b2daf091274b645086cc721a3a101985907 Mon Sep 17 00:00:00 2001 From: Florian THIERRY Date: Fri, 1 Dec 2023 10:00:07 +0100 Subject: [PATCH] Add method to retrieve authenticated user. --- .../security/AuthenticationFacade.java | 13 +++++++++++++ .../sportshub/application/user/UserUseCases.java | 16 +++++++++++++++- 2 files changed, 28 insertions(+), 1 deletion(-) create mode 100644 sportshub-application/src/main/java/org/sportshub/application/security/AuthenticationFacade.java diff --git a/sportshub-application/src/main/java/org/sportshub/application/security/AuthenticationFacade.java b/sportshub-application/src/main/java/org/sportshub/application/security/AuthenticationFacade.java new file mode 100644 index 0000000..b6a8833 --- /dev/null +++ b/sportshub-application/src/main/java/org/sportshub/application/security/AuthenticationFacade.java @@ -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(); + } +} diff --git a/sportshub-application/src/main/java/org/sportshub/application/user/UserUseCases.java b/sportshub-application/src/main/java/org/sportshub/application/user/UserUseCases.java index f981850..1cc41ac 100644 --- a/sportshub-application/src/main/java/org/sportshub/application/user/UserUseCases.java +++ b/sportshub-application/src/main/java/org/sportshub/application/user/UserUseCases.java @@ -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 findById(UUID userId) { @@ -43,4 +48,13 @@ public class UserUseCases { .map(jwtService::createJwt) .orElseThrow(LoginFailureException::new); } + + public Optional getAuthenticatedUser() { + return Optional.of(authenticationFacade.getAuthentication()) + .map(Authentication::getPrincipal) + .filter(String.class::isInstance) + .map(String.class::cast) + .map(UUID::fromString) + .flatMap(userPort::findById); + } }