From 68721381a6793be23f1c6735aa6cf01e0997d8f9 Mon Sep 17 00:00:00 2001 From: Vitor Hideyoshi Date: Mon, 21 Aug 2023 02:45:33 -0300 Subject: [PATCH] Returns ProfilePicture Image Url in UserResponse --- .../security/oauth/mapper/GithubOAuthMap.java | 5 ++ .../security/oauth/mapper/GoogleOAuthMap.java | 10 ++-- .../base/security/oauth/mapper/OAuthMap.java | 2 + .../{OAuthMapEnum.java => OAuthMapper.java} | 14 +++--- .../security/service/AuthServiceImpl.java | 50 ++++++++++++------- .../service/SessionManagerServiceImpl.java | 12 +++-- .../base/user/api/UserController.java | 10 ---- .../base/user/model/UserDTO.java | 4 ++ .../model/StorageServiceDownloadResponse.java | 7 +-- .../model/StorageServiceUploadResponse.java | 2 + 10 files changed, 68 insertions(+), 48 deletions(-) rename src/main/java/com/hideyoshi/backendportfolio/base/security/oauth/mapper/{OAuthMapEnum.java => OAuthMapper.java} (71%) diff --git a/src/main/java/com/hideyoshi/backendportfolio/base/security/oauth/mapper/GithubOAuthMap.java b/src/main/java/com/hideyoshi/backendportfolio/base/security/oauth/mapper/GithubOAuthMap.java index 7f27aa4..e83095a 100644 --- a/src/main/java/com/hideyoshi/backendportfolio/base/security/oauth/mapper/GithubOAuthMap.java +++ b/src/main/java/com/hideyoshi/backendportfolio/base/security/oauth/mapper/GithubOAuthMap.java @@ -15,6 +15,11 @@ public class GithubOAuthMap implements OAuthMap { return oAuth2User.getAttribute("login"); } + @Override + public String getProfilePicture() { + return this.oAuth2User.getAttribute("avatar_url"); + } + @Override public Provider getProvider() { return Provider.GITHUB; diff --git a/src/main/java/com/hideyoshi/backendportfolio/base/security/oauth/mapper/GoogleOAuthMap.java b/src/main/java/com/hideyoshi/backendportfolio/base/security/oauth/mapper/GoogleOAuthMap.java index 9aa4ffe..5f90fdb 100644 --- a/src/main/java/com/hideyoshi/backendportfolio/base/security/oauth/mapper/GoogleOAuthMap.java +++ b/src/main/java/com/hideyoshi/backendportfolio/base/security/oauth/mapper/GoogleOAuthMap.java @@ -8,11 +8,16 @@ import org.springframework.security.oauth2.core.user.OAuth2User; @AllArgsConstructor public class GoogleOAuthMap implements OAuthMap { - private OAuth2User oauthUser; + private OAuth2User oAuth2User; @Override public String getPrincipal() { - return this.oauthUser.getAttribute("given_name"); + return this.oAuth2User.getAttribute("given_name"); + } + + @Override + public String getProfilePicture() { + return this.oAuth2User.getAttribute("picture"); } @Override @@ -20,5 +25,4 @@ public class GoogleOAuthMap implements OAuthMap { return Provider.GOOGLE; } - } diff --git a/src/main/java/com/hideyoshi/backendportfolio/base/security/oauth/mapper/OAuthMap.java b/src/main/java/com/hideyoshi/backendportfolio/base/security/oauth/mapper/OAuthMap.java index ff607c3..9a770b6 100644 --- a/src/main/java/com/hideyoshi/backendportfolio/base/security/oauth/mapper/OAuthMap.java +++ b/src/main/java/com/hideyoshi/backendportfolio/base/security/oauth/mapper/OAuthMap.java @@ -7,6 +7,8 @@ public interface OAuthMap { String getPrincipal(); + String getProfilePicture(); + Provider getProvider(); } diff --git a/src/main/java/com/hideyoshi/backendportfolio/base/security/oauth/mapper/OAuthMapEnum.java b/src/main/java/com/hideyoshi/backendportfolio/base/security/oauth/mapper/OAuthMapper.java similarity index 71% rename from src/main/java/com/hideyoshi/backendportfolio/base/security/oauth/mapper/OAuthMapEnum.java rename to src/main/java/com/hideyoshi/backendportfolio/base/security/oauth/mapper/OAuthMapper.java index 6e63b00..7a0db8d 100644 --- a/src/main/java/com/hideyoshi/backendportfolio/base/security/oauth/mapper/OAuthMapEnum.java +++ b/src/main/java/com/hideyoshi/backendportfolio/base/security/oauth/mapper/OAuthMapper.java @@ -1,8 +1,9 @@ package com.hideyoshi.backendportfolio.base.security.oauth.mapper; import com.hideyoshi.backendportfolio.base.user.entity.Provider; +import lombok.Getter; -public enum OAuthMapEnum { +public enum OAuthMapper { GOOGLE(GoogleOAuthMap.class, Provider.GOOGLE), @@ -10,9 +11,10 @@ public enum OAuthMapEnum { private final Class oAuthMap; + @Getter private final Provider provider; - private OAuthMapEnum(Class oAuthMap, Provider provider) { + private OAuthMapper(Class oAuthMap, Provider provider) { this.oAuthMap = oAuthMap; this.provider = provider; } @@ -21,12 +23,8 @@ public enum OAuthMapEnum { return oAuthMap; } - public Provider getProvider() { - return provider; - } - - public static OAuthMapEnum byValue(String name) { - for (OAuthMapEnum e : values()) { + public static OAuthMapper byValue(String name) { + for (OAuthMapper e : values()) { if (e.getProvider().getName().equals(name)) { return e; } diff --git a/src/main/java/com/hideyoshi/backendportfolio/base/security/service/AuthServiceImpl.java b/src/main/java/com/hideyoshi/backendportfolio/base/security/service/AuthServiceImpl.java index 0219981..8c3a00b 100644 --- a/src/main/java/com/hideyoshi/backendportfolio/base/security/service/AuthServiceImpl.java +++ b/src/main/java/com/hideyoshi/backendportfolio/base/security/service/AuthServiceImpl.java @@ -6,12 +6,13 @@ import com.auth0.jwt.algorithms.Algorithm; import com.auth0.jwt.interfaces.DecodedJWT; import com.fasterxml.jackson.databind.ObjectMapper; import com.hideyoshi.backendportfolio.base.security.oauth.mapper.OAuthMap; -import com.hideyoshi.backendportfolio.base.security.oauth.mapper.OAuthMapEnum; +import com.hideyoshi.backendportfolio.base.security.oauth.mapper.OAuthMapper; import com.hideyoshi.backendportfolio.base.user.entity.Provider; import com.hideyoshi.backendportfolio.base.user.entity.Role; import com.hideyoshi.backendportfolio.base.user.model.TokenDTO; import com.hideyoshi.backendportfolio.base.user.model.UserDTO; import com.hideyoshi.backendportfolio.base.user.service.UserService; +import com.hideyoshi.backendportfolio.microservice.storageService.service.StorageService; import com.hideyoshi.backendportfolio.util.exception.BadRequestException; import lombok.RequiredArgsConstructor; import lombok.extern.log4j.Log4j2; @@ -56,6 +57,8 @@ public class AuthServiceImpl implements AuthService { private final UserService userService; + private final StorageService storageService; + @Autowired @Qualifier("handlerExceptionResolver") private HandlerExceptionResolver resolver; @@ -172,11 +175,36 @@ public class AuthServiceImpl implements AuthService { user.setProvider(Provider.LOCAL); - return this.generateUserWithTokens( + UserDTO authenticatedUser = this.generateUserWithTokens( this.userService.saveUser(user), request ); + authenticatedUser.setProfilePictureUrl( + this.storageService.getFileUrl(authenticatedUser.getUsername(), "profile") + .getPresignedUrl() + ); + + return authenticatedUser; + + } + + @Override + public void loginUser(HttpServletRequest request, HttpServletResponse response, @Valid UserDTO user) throws IOException { + + UserDTO authenticatedUser = this.generateUserWithTokens( + user, + request + ); + + authenticatedUser.setProfilePictureUrl( + this.storageService.getFileUrl(authenticatedUser.getUsername(), "profile") + .getPresignedUrl() + ); + + response.setContentType(APPLICATION_JSON_VALUE); + new ObjectMapper() + .writeValue(response.getOutputStream(), authenticatedUser); } @Override @@ -204,20 +232,6 @@ public class AuthServiceImpl implements AuthService { } return this.generateUserWithTokens(user, request); - - } - - @Override - public void loginUser(HttpServletRequest request, HttpServletResponse response, @Valid UserDTO user) throws IOException { - - UserDTO authenticatedUser = this.generateUserWithTokens( - user, - request - ); - - response.setContentType(APPLICATION_JSON_VALUE); - new ObjectMapper() - .writeValue(response.getOutputStream(), authenticatedUser); } public void loginOAuthUser(HttpServletRequest request, @@ -229,7 +243,7 @@ public class AuthServiceImpl implements AuthService { OAuthMap oauthMap = null; try { - oauthMap = (OAuthMap) OAuthMapEnum.byValue(clientId).getMap() + oauthMap = (OAuthMap) OAuthMapper.byValue(clientId).getMap() .getDeclaredConstructor(OAuth2User.class).newInstance(oauthUser); } catch (Exception e) { throw new BadRequestException("No Such Provider"); @@ -238,6 +252,7 @@ public class AuthServiceImpl implements AuthService { UserDTO user = null; try { user = this.userService.getUser(oauthMap.getPrincipal()); + user.setProfilePictureUrl(oauthMap.getProfilePicture()); } catch (BadRequestException e) { user = UserDTO.builder() .name(oauthUser.getAttribute("name")) @@ -245,6 +260,7 @@ public class AuthServiceImpl implements AuthService { .email(oauthUser.getAttribute("email")) .roles(Arrays.asList(Role.USER)) .provider(oauthMap.getProvider()) + .profilePictureUrl(oauthMap.getProfilePicture()) .build(); } diff --git a/src/main/java/com/hideyoshi/backendportfolio/base/session/service/SessionManagerServiceImpl.java b/src/main/java/com/hideyoshi/backendportfolio/base/session/service/SessionManagerServiceImpl.java index 36d8542..d66f29d 100644 --- a/src/main/java/com/hideyoshi/backendportfolio/base/session/service/SessionManagerServiceImpl.java +++ b/src/main/java/com/hideyoshi/backendportfolio/base/session/service/SessionManagerServiceImpl.java @@ -17,14 +17,16 @@ public class SessionManagerServiceImpl implements SessionManagerService { @Override public UserDTO validateSession(HttpSession session) { - UserDTO sessionObjects = (UserDTO) session.getAttribute("user"); + UserDTO sessionObject = (UserDTO) session.getAttribute("user"); - if (Objects.nonNull(sessionObjects)) { - return this.userService.getUser(sessionObjects.getUsername()) - .toResponse(sessionObjects.getAccessToken(), sessionObjects.getRefreshToken()); + if (Objects.nonNull(sessionObject)) { + sessionObject = sessionObject.toResponse( + sessionObject.getAccessToken(), + sessionObject.getRefreshToken() + ); } - return null; + return sessionObject; } @Override diff --git a/src/main/java/com/hideyoshi/backendportfolio/base/user/api/UserController.java b/src/main/java/com/hideyoshi/backendportfolio/base/user/api/UserController.java index 4ad7a75..99e85da 100644 --- a/src/main/java/com/hideyoshi/backendportfolio/base/user/api/UserController.java +++ b/src/main/java/com/hideyoshi/backendportfolio/base/user/api/UserController.java @@ -83,16 +83,6 @@ public class UserController { ); } - @GetMapping("/profile-picture") - @UserResourceGuard(accessType = UserResourceGuardEnum.USER) - public StorageServiceDownloadResponse getProfilePicture() { - UserDTO user = this.authService.getLoggedUser(); - return this.storageService.getFileUrl( - user.getUsername(), - "profile" - ); - } - @PostMapping("/profile-picture/proccess") @UserResourceGuard(accessType = UserResourceGuardEnum.USER) public void processProfilePicture() { diff --git a/src/main/java/com/hideyoshi/backendportfolio/base/user/model/UserDTO.java b/src/main/java/com/hideyoshi/backendportfolio/base/user/model/UserDTO.java index 53d7ffc..5bfdfa4 100644 --- a/src/main/java/com/hideyoshi/backendportfolio/base/user/model/UserDTO.java +++ b/src/main/java/com/hideyoshi/backendportfolio/base/user/model/UserDTO.java @@ -53,6 +53,8 @@ public class UserDTO implements UserDetails { @Size(min=1) private List roles; + private String profilePictureUrl; + private TokenDTO accessToken; private TokenDTO refreshToken; @@ -121,6 +123,7 @@ public class UserDTO implements UserDetails { .email(this.email) .username(this.username) .provider(this.provider) + .profilePictureUrl(this.profilePictureUrl) .build(); } @@ -132,6 +135,7 @@ public class UserDTO implements UserDetails { .username(this.username) .provider(this.provider) .roles(this.roles) + .profilePictureUrl(this.profilePictureUrl) .accessToken(accessToken) .refreshToken(refreshToken) .build(); diff --git a/src/main/java/com/hideyoshi/backendportfolio/microservice/storageService/model/StorageServiceDownloadResponse.java b/src/main/java/com/hideyoshi/backendportfolio/microservice/storageService/model/StorageServiceDownloadResponse.java index a5a4f86..1ff869b 100644 --- a/src/main/java/com/hideyoshi/backendportfolio/microservice/storageService/model/StorageServiceDownloadResponse.java +++ b/src/main/java/com/hideyoshi/backendportfolio/microservice/storageService/model/StorageServiceDownloadResponse.java @@ -2,12 +2,9 @@ package com.hideyoshi.backendportfolio.microservice.storageService.model; import com.fasterxml.jackson.annotation.JsonProperty; -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; -import lombok.NonNull; - +import lombok.*; +@Getter @NoArgsConstructor @AllArgsConstructor public class StorageServiceDownloadResponse { diff --git a/src/main/java/com/hideyoshi/backendportfolio/microservice/storageService/model/StorageServiceUploadResponse.java b/src/main/java/com/hideyoshi/backendportfolio/microservice/storageService/model/StorageServiceUploadResponse.java index 7a099cf..6044aa6 100644 --- a/src/main/java/com/hideyoshi/backendportfolio/microservice/storageService/model/StorageServiceUploadResponse.java +++ b/src/main/java/com/hideyoshi/backendportfolio/microservice/storageService/model/StorageServiceUploadResponse.java @@ -4,8 +4,10 @@ package com.hideyoshi.backendportfolio.microservice.storageService.model; import com.fasterxml.jackson.annotation.JsonProperty; import lombok.AllArgsConstructor; import lombok.Data; +import lombok.Getter; import lombok.NonNull; +@Getter @AllArgsConstructor public class StorageServiceUploadResponse {