Returns ProfilePicture Image Url in UserResponse

This commit is contained in:
2023-08-21 02:45:33 -03:00
parent 2b5a97ee91
commit 68721381a6
10 changed files with 68 additions and 48 deletions

View File

@@ -15,6 +15,11 @@ public class GithubOAuthMap implements OAuthMap {
return oAuth2User.getAttribute("login"); return oAuth2User.getAttribute("login");
} }
@Override
public String getProfilePicture() {
return this.oAuth2User.getAttribute("avatar_url");
}
@Override @Override
public Provider getProvider() { public Provider getProvider() {
return Provider.GITHUB; return Provider.GITHUB;

View File

@@ -8,11 +8,16 @@ import org.springframework.security.oauth2.core.user.OAuth2User;
@AllArgsConstructor @AllArgsConstructor
public class GoogleOAuthMap implements OAuthMap { public class GoogleOAuthMap implements OAuthMap {
private OAuth2User oauthUser; private OAuth2User oAuth2User;
@Override @Override
public String getPrincipal() { 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 @Override
@@ -20,5 +25,4 @@ public class GoogleOAuthMap implements OAuthMap {
return Provider.GOOGLE; return Provider.GOOGLE;
} }
} }

View File

@@ -7,6 +7,8 @@ public interface OAuthMap {
String getPrincipal(); String getPrincipal();
String getProfilePicture();
Provider getProvider(); Provider getProvider();
} }

View File

@@ -1,8 +1,9 @@
package com.hideyoshi.backendportfolio.base.security.oauth.mapper; package com.hideyoshi.backendportfolio.base.security.oauth.mapper;
import com.hideyoshi.backendportfolio.base.user.entity.Provider; import com.hideyoshi.backendportfolio.base.user.entity.Provider;
import lombok.Getter;
public enum OAuthMapEnum { public enum OAuthMapper {
GOOGLE(GoogleOAuthMap.class, Provider.GOOGLE), GOOGLE(GoogleOAuthMap.class, Provider.GOOGLE),
@@ -10,9 +11,10 @@ public enum OAuthMapEnum {
private final Class oAuthMap; private final Class oAuthMap;
@Getter
private final Provider provider; private final Provider provider;
private OAuthMapEnum(Class oAuthMap, Provider provider) { private OAuthMapper(Class oAuthMap, Provider provider) {
this.oAuthMap = oAuthMap; this.oAuthMap = oAuthMap;
this.provider = provider; this.provider = provider;
} }
@@ -21,12 +23,8 @@ public enum OAuthMapEnum {
return oAuthMap; return oAuthMap;
} }
public Provider getProvider() { public static OAuthMapper byValue(String name) {
return provider; for (OAuthMapper e : values()) {
}
public static OAuthMapEnum byValue(String name) {
for (OAuthMapEnum e : values()) {
if (e.getProvider().getName().equals(name)) { if (e.getProvider().getName().equals(name)) {
return e; return e;
} }

View File

@@ -6,12 +6,13 @@ import com.auth0.jwt.algorithms.Algorithm;
import com.auth0.jwt.interfaces.DecodedJWT; import com.auth0.jwt.interfaces.DecodedJWT;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;
import com.hideyoshi.backendportfolio.base.security.oauth.mapper.OAuthMap; 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.Provider;
import com.hideyoshi.backendportfolio.base.user.entity.Role; import com.hideyoshi.backendportfolio.base.user.entity.Role;
import com.hideyoshi.backendportfolio.base.user.model.TokenDTO; import com.hideyoshi.backendportfolio.base.user.model.TokenDTO;
import com.hideyoshi.backendportfolio.base.user.model.UserDTO; import com.hideyoshi.backendportfolio.base.user.model.UserDTO;
import com.hideyoshi.backendportfolio.base.user.service.UserService; import com.hideyoshi.backendportfolio.base.user.service.UserService;
import com.hideyoshi.backendportfolio.microservice.storageService.service.StorageService;
import com.hideyoshi.backendportfolio.util.exception.BadRequestException; import com.hideyoshi.backendportfolio.util.exception.BadRequestException;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.log4j.Log4j2; import lombok.extern.log4j.Log4j2;
@@ -56,6 +57,8 @@ public class AuthServiceImpl implements AuthService {
private final UserService userService; private final UserService userService;
private final StorageService storageService;
@Autowired @Autowired
@Qualifier("handlerExceptionResolver") @Qualifier("handlerExceptionResolver")
private HandlerExceptionResolver resolver; private HandlerExceptionResolver resolver;
@@ -172,11 +175,36 @@ public class AuthServiceImpl implements AuthService {
user.setProvider(Provider.LOCAL); user.setProvider(Provider.LOCAL);
return this.generateUserWithTokens( UserDTO authenticatedUser = this.generateUserWithTokens(
this.userService.saveUser(user), this.userService.saveUser(user),
request 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 @Override
@@ -204,20 +232,6 @@ public class AuthServiceImpl implements AuthService {
} }
return this.generateUserWithTokens(user, request); 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, public void loginOAuthUser(HttpServletRequest request,
@@ -229,7 +243,7 @@ public class AuthServiceImpl implements AuthService {
OAuthMap oauthMap = null; OAuthMap oauthMap = null;
try { try {
oauthMap = (OAuthMap) OAuthMapEnum.byValue(clientId).getMap() oauthMap = (OAuthMap) OAuthMapper.byValue(clientId).getMap()
.getDeclaredConstructor(OAuth2User.class).newInstance(oauthUser); .getDeclaredConstructor(OAuth2User.class).newInstance(oauthUser);
} catch (Exception e) { } catch (Exception e) {
throw new BadRequestException("No Such Provider"); throw new BadRequestException("No Such Provider");
@@ -238,6 +252,7 @@ public class AuthServiceImpl implements AuthService {
UserDTO user = null; UserDTO user = null;
try { try {
user = this.userService.getUser(oauthMap.getPrincipal()); user = this.userService.getUser(oauthMap.getPrincipal());
user.setProfilePictureUrl(oauthMap.getProfilePicture());
} catch (BadRequestException e) { } catch (BadRequestException e) {
user = UserDTO.builder() user = UserDTO.builder()
.name(oauthUser.getAttribute("name")) .name(oauthUser.getAttribute("name"))
@@ -245,6 +260,7 @@ public class AuthServiceImpl implements AuthService {
.email(oauthUser.getAttribute("email")) .email(oauthUser.getAttribute("email"))
.roles(Arrays.asList(Role.USER)) .roles(Arrays.asList(Role.USER))
.provider(oauthMap.getProvider()) .provider(oauthMap.getProvider())
.profilePictureUrl(oauthMap.getProfilePicture())
.build(); .build();
} }

View File

@@ -17,14 +17,16 @@ public class SessionManagerServiceImpl implements SessionManagerService {
@Override @Override
public UserDTO validateSession(HttpSession session) { public UserDTO validateSession(HttpSession session) {
UserDTO sessionObjects = (UserDTO) session.getAttribute("user"); UserDTO sessionObject = (UserDTO) session.getAttribute("user");
if (Objects.nonNull(sessionObjects)) { if (Objects.nonNull(sessionObject)) {
return this.userService.getUser(sessionObjects.getUsername()) sessionObject = sessionObject.toResponse(
.toResponse(sessionObjects.getAccessToken(), sessionObjects.getRefreshToken()); sessionObject.getAccessToken(),
sessionObject.getRefreshToken()
);
} }
return null; return sessionObject;
} }
@Override @Override

View File

@@ -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") @PostMapping("/profile-picture/proccess")
@UserResourceGuard(accessType = UserResourceGuardEnum.USER) @UserResourceGuard(accessType = UserResourceGuardEnum.USER)
public void processProfilePicture() { public void processProfilePicture() {

View File

@@ -53,6 +53,8 @@ public class UserDTO implements UserDetails {
@Size(min=1) @Size(min=1)
private List<Role> roles; private List<Role> roles;
private String profilePictureUrl;
private TokenDTO accessToken; private TokenDTO accessToken;
private TokenDTO refreshToken; private TokenDTO refreshToken;
@@ -121,6 +123,7 @@ public class UserDTO implements UserDetails {
.email(this.email) .email(this.email)
.username(this.username) .username(this.username)
.provider(this.provider) .provider(this.provider)
.profilePictureUrl(this.profilePictureUrl)
.build(); .build();
} }
@@ -132,6 +135,7 @@ public class UserDTO implements UserDetails {
.username(this.username) .username(this.username)
.provider(this.provider) .provider(this.provider)
.roles(this.roles) .roles(this.roles)
.profilePictureUrl(this.profilePictureUrl)
.accessToken(accessToken) .accessToken(accessToken)
.refreshToken(refreshToken) .refreshToken(refreshToken)
.build(); .build();

View File

@@ -2,12 +2,9 @@ package com.hideyoshi.backendportfolio.microservice.storageService.model;
import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.AllArgsConstructor; import lombok.*;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.NonNull;
@Getter
@NoArgsConstructor @NoArgsConstructor
@AllArgsConstructor @AllArgsConstructor
public class StorageServiceDownloadResponse { public class StorageServiceDownloadResponse {

View File

@@ -4,8 +4,10 @@ package com.hideyoshi.backendportfolio.microservice.storageService.model;
import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Data; import lombok.Data;
import lombok.Getter;
import lombok.NonNull; import lombok.NonNull;
@Getter
@AllArgsConstructor @AllArgsConstructor
public class StorageServiceUploadResponse { public class StorageServiceUploadResponse {