diff --git a/pom.xml b/pom.xml
index 4aa16dc..f00a780 100644
--- a/pom.xml
+++ b/pom.xml
@@ -9,10 +9,10 @@
com.hideyoshi
- backend-api
+ auth-api
0.0.1-SNAPSHOT
- backend-api
- Backend API
+ auth-api
+ Auth API for the Hideyoshi.com Project
17
@@ -107,7 +107,11 @@
httpclient
4.5.14
-
+
+ org.springframework.boot
+ spring-boot-starter-actuator
+
+
diff --git a/src/main/java/com/hideyoshi/backendportfolio/BackendPortfolioApplication.java b/src/main/java/com/hideyoshi/auth/BackendPortfolioApplication.java
similarity index 93%
rename from src/main/java/com/hideyoshi/backendportfolio/BackendPortfolioApplication.java
rename to src/main/java/com/hideyoshi/auth/BackendPortfolioApplication.java
index e0737e6..939a42d 100644
--- a/src/main/java/com/hideyoshi/backendportfolio/BackendPortfolioApplication.java
+++ b/src/main/java/com/hideyoshi/auth/BackendPortfolioApplication.java
@@ -1,4 +1,4 @@
-package com.hideyoshi.backendportfolio;
+package com.hideyoshi.auth;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
diff --git a/src/main/java/com/hideyoshi/backendportfolio/base/user/api/UserController.java b/src/main/java/com/hideyoshi/auth/base/auth/api/UserController.java
similarity index 77%
rename from src/main/java/com/hideyoshi/backendportfolio/base/user/api/UserController.java
rename to src/main/java/com/hideyoshi/auth/base/auth/api/UserController.java
index 1c88292..d0e1d08 100644
--- a/src/main/java/com/hideyoshi/backendportfolio/base/user/api/UserController.java
+++ b/src/main/java/com/hideyoshi/auth/base/auth/api/UserController.java
@@ -1,16 +1,16 @@
-package com.hideyoshi.backendportfolio.base.user.api;
+package com.hideyoshi.auth.base.auth.api;
-import com.hideyoshi.backendportfolio.base.security.model.AuthDTO;
-import com.hideyoshi.backendportfolio.base.security.service.AuthService;
-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.enums.FileTypeEnum;
-import com.hideyoshi.backendportfolio.microservice.storageService.model.StorageServiceUploadResponse;
-import com.hideyoshi.backendportfolio.microservice.storageService.service.StorageService;
-import com.hideyoshi.backendportfolio.util.exception.BadRequestException;
-import com.hideyoshi.backendportfolio.util.guard.UserResourceGuard;
-import com.hideyoshi.backendportfolio.util.guard.UserResourceGuardEnum;
+import com.hideyoshi.auth.base.auth.model.AuthDTO;
+import com.hideyoshi.auth.base.auth.service.AuthService;
+import com.hideyoshi.auth.base.auth.model.TokenDTO;
+import com.hideyoshi.auth.base.auth.model.UserDTO;
+import com.hideyoshi.auth.base.auth.service.UserService;
+import com.hideyoshi.auth.microservice.storageService.enums.FileTypeEnum;
+import com.hideyoshi.auth.microservice.storageService.model.StorageServiceUploadResponse;
+import com.hideyoshi.auth.microservice.storageService.service.StorageService;
+import com.hideyoshi.auth.util.exception.BadRequestException;
+import com.hideyoshi.auth.util.guard.UserResourceGuard;
+import com.hideyoshi.auth.util.guard.UserResourceGuardEnum;
import lombok.RequiredArgsConstructor;
import lombok.extern.log4j.Log4j2;
import org.springframework.http.HttpStatus;
@@ -20,7 +20,6 @@ import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.support.ServletUriComponentsBuilder;
import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
import javax.validation.Valid;
import java.net.URI;
import java.util.List;
@@ -59,9 +58,14 @@ public class UserController {
@UserResourceGuard(accessType = UserResourceGuardEnum.OPEN)
public ResponseEntity refreshAccessToken(
@RequestBody @Valid TokenDTO refreshToken,
- HttpServletRequest request,
- HttpServletResponse response) {
- return ResponseEntity.ok(this.authService.refreshAccessToken(refreshToken.getToken(), request, response));
+ HttpServletRequest request) {
+ return ResponseEntity.ok(this.authService.refreshAccessToken(refreshToken.getToken(), request));
+ }
+
+ @PostMapping("/login/validate")
+ @UserResourceGuard(accessType = UserResourceGuardEnum.USER)
+ public ResponseEntity validateAccessToken(HttpServletRequest request) {
+ return ResponseEntity.ok(this.authService.validateAccessToken(request));
}
@DeleteMapping("/delete")
diff --git a/src/main/java/com/hideyoshi/backendportfolio/base/security/config/SecurityConfig.java b/src/main/java/com/hideyoshi/auth/base/auth/config/SecurityConfig.java
similarity index 83%
rename from src/main/java/com/hideyoshi/backendportfolio/base/security/config/SecurityConfig.java
rename to src/main/java/com/hideyoshi/auth/base/auth/config/SecurityConfig.java
index 2e8cfbd..8a56360 100644
--- a/src/main/java/com/hideyoshi/backendportfolio/base/security/config/SecurityConfig.java
+++ b/src/main/java/com/hideyoshi/auth/base/auth/config/SecurityConfig.java
@@ -1,11 +1,13 @@
-package com.hideyoshi.backendportfolio.base.security.config;
+package com.hideyoshi.auth.base.auth.config;
-import com.hideyoshi.backendportfolio.base.config.RestAuthenticationEntryPointConfig;
-import com.hideyoshi.backendportfolio.base.security.filter.CustomAuthenticationFilter;
-import com.hideyoshi.backendportfolio.base.security.filter.CustomAuthorizationFilter;
-import com.hideyoshi.backendportfolio.base.security.oauth.repo.OAuthRequestRepository;
-import com.hideyoshi.backendportfolio.base.security.service.AuthService;
-import com.hideyoshi.backendportfolio.util.exception.AuthenticationInvalidException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.hideyoshi.auth.base.config.RestAuthenticationEntryPointConfig;
+import com.hideyoshi.auth.base.auth.filter.CustomAuthenticationFilter;
+import com.hideyoshi.auth.base.auth.filter.CustomAuthorizationFilter;
+import com.hideyoshi.auth.base.auth.model.AuthDTO;
+import com.hideyoshi.auth.base.auth.oauth.repo.OAuthRequestRepository;
+import com.hideyoshi.auth.base.auth.service.AuthService;
+import com.hideyoshi.auth.util.exception.AuthenticationInvalidException;
import lombok.RequiredArgsConstructor;
import lombok.extern.log4j.Log4j2;
import org.springframework.context.annotation.Bean;
@@ -27,6 +29,8 @@ import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
+import static org.springframework.http.MediaType.APPLICATION_JSON_VALUE;
+
@Log4j2
@Configuration
@EnableWebSecurity
@@ -95,11 +99,11 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter {
OAuth2User oauthUser = (OAuth2User) authentication.getPrincipal();
- this.authService.loginOAuthUser(
- request,
- response,
- oauthUser
- );
+ AuthDTO authUser = this.authService.loginOAuthUser(oauthUser, request);
+
+ response.setContentType(APPLICATION_JSON_VALUE);
+ new ObjectMapper()
+ .writeValue(response.getOutputStream(), authUser);
}
diff --git a/src/main/java/com/hideyoshi/backendportfolio/base/user/entity/Provider.java b/src/main/java/com/hideyoshi/auth/base/auth/entity/Provider.java
similarity index 74%
rename from src/main/java/com/hideyoshi/backendportfolio/base/user/entity/Provider.java
rename to src/main/java/com/hideyoshi/auth/base/auth/entity/Provider.java
index 6819ce7..66bd7bb 100644
--- a/src/main/java/com/hideyoshi/backendportfolio/base/user/entity/Provider.java
+++ b/src/main/java/com/hideyoshi/auth/base/auth/entity/Provider.java
@@ -1,5 +1,8 @@
-package com.hideyoshi.backendportfolio.base.user.entity;
+package com.hideyoshi.auth.base.auth.entity;
+import lombok.Getter;
+
+@Getter
public enum Provider {
GOOGLE("google"),
@@ -8,7 +11,7 @@ public enum Provider {
LOCAL("local");
- private String name;
+ private final String name;
Provider(String name) {
this.name = name;
@@ -23,8 +26,4 @@ public enum Provider {
throw new IllegalArgumentException("Argument not valid.");
}
- public String getName() {
- return name;
- }
-
}
diff --git a/src/main/java/com/hideyoshi/backendportfolio/base/user/entity/Role.java b/src/main/java/com/hideyoshi/auth/base/auth/entity/Role.java
similarity index 91%
rename from src/main/java/com/hideyoshi/backendportfolio/base/user/entity/Role.java
rename to src/main/java/com/hideyoshi/auth/base/auth/entity/Role.java
index 23e970d..301f949 100644
--- a/src/main/java/com/hideyoshi/backendportfolio/base/user/entity/Role.java
+++ b/src/main/java/com/hideyoshi/auth/base/auth/entity/Role.java
@@ -1,4 +1,4 @@
-package com.hideyoshi.backendportfolio.base.user.entity;
+package com.hideyoshi.auth.base.auth.entity;
import com.fasterxml.jackson.annotation.JsonValue;
diff --git a/src/main/java/com/hideyoshi/backendportfolio/base/user/entity/User.java b/src/main/java/com/hideyoshi/auth/base/auth/entity/User.java
similarity index 96%
rename from src/main/java/com/hideyoshi/backendportfolio/base/user/entity/User.java
rename to src/main/java/com/hideyoshi/auth/base/auth/entity/User.java
index 3aae63c..9a05b9a 100644
--- a/src/main/java/com/hideyoshi/backendportfolio/base/user/entity/User.java
+++ b/src/main/java/com/hideyoshi/auth/base/auth/entity/User.java
@@ -1,4 +1,4 @@
-package com.hideyoshi.backendportfolio.base.user.entity;
+package com.hideyoshi.auth.base.auth.entity;
import lombok.AllArgsConstructor;
import lombok.Data;
diff --git a/src/main/java/com/hideyoshi/backendportfolio/base/security/filter/CustomAuthenticationFilter.java b/src/main/java/com/hideyoshi/auth/base/auth/filter/CustomAuthenticationFilter.java
similarity index 78%
rename from src/main/java/com/hideyoshi/backendportfolio/base/security/filter/CustomAuthenticationFilter.java
rename to src/main/java/com/hideyoshi/auth/base/auth/filter/CustomAuthenticationFilter.java
index 878ad83..d948f92 100644
--- a/src/main/java/com/hideyoshi/backendportfolio/base/security/filter/CustomAuthenticationFilter.java
+++ b/src/main/java/com/hideyoshi/auth/base/auth/filter/CustomAuthenticationFilter.java
@@ -1,8 +1,10 @@
-package com.hideyoshi.backendportfolio.base.security.filter;
+package com.hideyoshi.auth.base.auth.filter;
-import com.hideyoshi.backendportfolio.base.config.RestAuthenticationEntryPointConfig;
-import com.hideyoshi.backendportfolio.base.security.service.AuthService;
-import com.hideyoshi.backendportfolio.base.user.model.UserDTO;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.hideyoshi.auth.base.config.RestAuthenticationEntryPointConfig;
+import com.hideyoshi.auth.base.auth.model.AuthDTO;
+import com.hideyoshi.auth.base.auth.service.AuthService;
+import com.hideyoshi.auth.base.auth.model.UserDTO;
import lombok.extern.log4j.Log4j2;
import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
@@ -15,6 +17,8 @@ import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
+import static org.springframework.http.MediaType.APPLICATION_JSON_VALUE;
+
@Log4j2
public class CustomAuthenticationFilter extends UsernamePasswordAuthenticationFilter {
@@ -50,12 +54,16 @@ public class CustomAuthenticationFilter extends UsernamePasswordAuthenticationFi
@Override
protected void successfulAuthentication(HttpServletRequest request, HttpServletResponse response, FilterChain chain, Authentication authentication) throws IOException {
- this.authService.loginUser(
+ AuthDTO authUser = this.authService.loginUser(
request,
response,
(UserDTO) authentication.getPrincipal()
);
+ response.setContentType(APPLICATION_JSON_VALUE);
+ new ObjectMapper()
+ .writeValue(response.getOutputStream(), authUser);
+
}
}
diff --git a/src/main/java/com/hideyoshi/backendportfolio/base/security/filter/CustomAuthorizationFilter.java b/src/main/java/com/hideyoshi/auth/base/auth/filter/CustomAuthorizationFilter.java
similarity index 86%
rename from src/main/java/com/hideyoshi/backendportfolio/base/security/filter/CustomAuthorizationFilter.java
rename to src/main/java/com/hideyoshi/auth/base/auth/filter/CustomAuthorizationFilter.java
index 87607eb..6418445 100644
--- a/src/main/java/com/hideyoshi/backendportfolio/base/security/filter/CustomAuthorizationFilter.java
+++ b/src/main/java/com/hideyoshi/auth/base/auth/filter/CustomAuthorizationFilter.java
@@ -1,10 +1,9 @@
-package com.hideyoshi.backendportfolio.base.security.filter;
+package com.hideyoshi.auth.base.auth.filter;
import com.fasterxml.jackson.databind.ObjectMapper;
-import com.hideyoshi.backendportfolio.base.security.service.AuthService;
-import com.hideyoshi.backendportfolio.util.exception.AuthenticationInvalidException;
-import com.hideyoshi.backendportfolio.util.exception.AuthenticationInvalidExceptionDetails;
-import com.hideyoshi.backendportfolio.util.exception.BadRequestException;
+import com.hideyoshi.auth.base.auth.service.AuthService;
+import com.hideyoshi.auth.util.exception.AuthenticationInvalidException;
+import com.hideyoshi.auth.util.exception.AuthenticationInvalidExceptionDetails;
import org.springframework.http.HttpStatus;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.core.context.SecurityContextHolder;
@@ -78,7 +77,8 @@ public class CustomAuthorizationFilter extends OncePerRequestFilter {
private UsernamePasswordAuthenticationToken validateUserAccess(String authorizationHeader) {
if (Objects.nonNull(authorizationHeader) && authorizationHeader.startsWith(AUTHORIZATION_TYPE_STRING)) {
- return this.authService.verifyAccessToken(authorizationHeader);
+ String accessToken = authorizationHeader.substring(AUTHORIZATION_TYPE_STRING.length());
+ return this.authService.extractAccessTokenInfo(accessToken);
} else {
throw new AuthenticationInvalidException("Access denied");
}
diff --git a/src/main/java/com/hideyoshi/backendportfolio/base/security/interceptor/ConfigInterceptor.java b/src/main/java/com/hideyoshi/auth/base/auth/interceptor/ConfigInterceptor.java
similarity index 89%
rename from src/main/java/com/hideyoshi/backendportfolio/base/security/interceptor/ConfigInterceptor.java
rename to src/main/java/com/hideyoshi/auth/base/auth/interceptor/ConfigInterceptor.java
index 7188701..ec02fe4 100644
--- a/src/main/java/com/hideyoshi/backendportfolio/base/security/interceptor/ConfigInterceptor.java
+++ b/src/main/java/com/hideyoshi/auth/base/auth/interceptor/ConfigInterceptor.java
@@ -1,4 +1,4 @@
-package com.hideyoshi.backendportfolio.base.security.interceptor;
+package com.hideyoshi.auth.base.auth.interceptor;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Component;
diff --git a/src/main/java/com/hideyoshi/backendportfolio/base/security/interceptor/UserResourceAccessInterceptor.java b/src/main/java/com/hideyoshi/auth/base/auth/interceptor/UserResourceAccessInterceptor.java
similarity index 78%
rename from src/main/java/com/hideyoshi/backendportfolio/base/security/interceptor/UserResourceAccessInterceptor.java
rename to src/main/java/com/hideyoshi/auth/base/auth/interceptor/UserResourceAccessInterceptor.java
index c02f5dc..f44c442 100644
--- a/src/main/java/com/hideyoshi/backendportfolio/base/security/interceptor/UserResourceAccessInterceptor.java
+++ b/src/main/java/com/hideyoshi/auth/base/auth/interceptor/UserResourceAccessInterceptor.java
@@ -1,10 +1,9 @@
-package com.hideyoshi.backendportfolio.base.security.interceptor;
+package com.hideyoshi.auth.base.auth.interceptor;
import com.fasterxml.jackson.databind.ObjectMapper;
-import com.hideyoshi.backendportfolio.base.user.service.UserService;
-import com.hideyoshi.backendportfolio.util.exception.AuthenticationInvalidException;
-import com.hideyoshi.backendportfolio.util.exception.BadRequestException;
-import com.hideyoshi.backendportfolio.util.guard.UserResourceGuard;
+import com.hideyoshi.auth.base.auth.service.UserService;
+import com.hideyoshi.auth.util.exception.AuthenticationInvalidException;
+import com.hideyoshi.auth.util.guard.UserResourceGuard;
import lombok.RequiredArgsConstructor;
import lombok.extern.log4j.Log4j2;
import org.springframework.stereotype.Component;
diff --git a/src/main/java/com/hideyoshi/backendportfolio/base/security/model/AuthDTO.java b/src/main/java/com/hideyoshi/auth/base/auth/model/AuthDTO.java
similarity index 78%
rename from src/main/java/com/hideyoshi/backendportfolio/base/security/model/AuthDTO.java
rename to src/main/java/com/hideyoshi/auth/base/auth/model/AuthDTO.java
index be9baed..7519504 100644
--- a/src/main/java/com/hideyoshi/backendportfolio/base/security/model/AuthDTO.java
+++ b/src/main/java/com/hideyoshi/auth/base/auth/model/AuthDTO.java
@@ -1,11 +1,9 @@
-package com.hideyoshi.backendportfolio.base.security.model;
+package com.hideyoshi.auth.base.auth.model;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonInclude;
-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.auth.base.auth.entity.Provider;
+import com.hideyoshi.auth.base.auth.entity.Role;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
diff --git a/src/main/java/com/hideyoshi/backendportfolio/base/user/model/RoleToUserDTO.java b/src/main/java/com/hideyoshi/auth/base/auth/model/RoleToUserDTO.java
similarity index 67%
rename from src/main/java/com/hideyoshi/backendportfolio/base/user/model/RoleToUserDTO.java
rename to src/main/java/com/hideyoshi/auth/base/auth/model/RoleToUserDTO.java
index 260d06f..2c81b70 100644
--- a/src/main/java/com/hideyoshi/backendportfolio/base/user/model/RoleToUserDTO.java
+++ b/src/main/java/com/hideyoshi/auth/base/auth/model/RoleToUserDTO.java
@@ -1,4 +1,4 @@
-package com.hideyoshi.backendportfolio.base.user.model;
+package com.hideyoshi.auth.base.auth.model;
import lombok.Data;
diff --git a/src/main/java/com/hideyoshi/backendportfolio/base/user/model/TokenDTO.java b/src/main/java/com/hideyoshi/auth/base/auth/model/TokenDTO.java
similarity index 92%
rename from src/main/java/com/hideyoshi/backendportfolio/base/user/model/TokenDTO.java
rename to src/main/java/com/hideyoshi/auth/base/auth/model/TokenDTO.java
index 0a033eb..106dfc9 100644
--- a/src/main/java/com/hideyoshi/backendportfolio/base/user/model/TokenDTO.java
+++ b/src/main/java/com/hideyoshi/auth/base/auth/model/TokenDTO.java
@@ -1,4 +1,4 @@
-package com.hideyoshi.backendportfolio.base.user.model;
+package com.hideyoshi.auth.base.auth.model;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
diff --git a/src/main/java/com/hideyoshi/backendportfolio/base/user/model/UserDTO.java b/src/main/java/com/hideyoshi/auth/base/auth/model/UserDTO.java
similarity index 86%
rename from src/main/java/com/hideyoshi/backendportfolio/base/user/model/UserDTO.java
rename to src/main/java/com/hideyoshi/auth/base/auth/model/UserDTO.java
index a1126fa..b1d4a8b 100644
--- a/src/main/java/com/hideyoshi/backendportfolio/base/user/model/UserDTO.java
+++ b/src/main/java/com/hideyoshi/auth/base/auth/model/UserDTO.java
@@ -1,14 +1,14 @@
-package com.hideyoshi.backendportfolio.base.user.model;
+package com.hideyoshi.auth.base.auth.model;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonInclude;
-import com.hideyoshi.backendportfolio.base.user.entity.Provider;
-import com.hideyoshi.backendportfolio.base.user.entity.Role;
-import com.hideyoshi.backendportfolio.base.user.entity.User;
-import com.hideyoshi.backendportfolio.util.validator.email.unique.UniqueEmail;
-import com.hideyoshi.backendportfolio.util.validator.email.valid.ValidEmail;
-import com.hideyoshi.backendportfolio.util.validator.password.ValidPassword;
+import com.hideyoshi.auth.base.auth.entity.Provider;
+import com.hideyoshi.auth.base.auth.entity.Role;
+import com.hideyoshi.auth.base.auth.entity.User;
+import com.hideyoshi.auth.util.validator.email.unique.UniqueEmail;
+import com.hideyoshi.auth.util.validator.email.valid.ValidEmail;
+import com.hideyoshi.auth.util.validator.password.ValidPassword;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
diff --git a/src/main/java/com/hideyoshi/backendportfolio/base/security/oauth/mapper/GithubOAuthMap.java b/src/main/java/com/hideyoshi/auth/base/auth/oauth/mapper/GithubOAuthMap.java
similarity index 79%
rename from src/main/java/com/hideyoshi/backendportfolio/base/security/oauth/mapper/GithubOAuthMap.java
rename to src/main/java/com/hideyoshi/auth/base/auth/oauth/mapper/GithubOAuthMap.java
index 8e53d2c..cab42bf 100644
--- a/src/main/java/com/hideyoshi/backendportfolio/base/security/oauth/mapper/GithubOAuthMap.java
+++ b/src/main/java/com/hideyoshi/auth/base/auth/oauth/mapper/GithubOAuthMap.java
@@ -1,6 +1,6 @@
-package com.hideyoshi.backendportfolio.base.security.oauth.mapper;
+package com.hideyoshi.auth.base.auth.oauth.mapper;
-import com.hideyoshi.backendportfolio.base.user.entity.Provider;
+import com.hideyoshi.auth.base.auth.entity.Provider;
import lombok.AllArgsConstructor;
import org.springframework.security.oauth2.core.user.OAuth2User;
diff --git a/src/main/java/com/hideyoshi/backendportfolio/base/security/oauth/mapper/GoogleOAuthMap.java b/src/main/java/com/hideyoshi/auth/base/auth/oauth/mapper/GoogleOAuthMap.java
similarity index 80%
rename from src/main/java/com/hideyoshi/backendportfolio/base/security/oauth/mapper/GoogleOAuthMap.java
rename to src/main/java/com/hideyoshi/auth/base/auth/oauth/mapper/GoogleOAuthMap.java
index a12904c..d0b6272 100644
--- a/src/main/java/com/hideyoshi/backendportfolio/base/security/oauth/mapper/GoogleOAuthMap.java
+++ b/src/main/java/com/hideyoshi/auth/base/auth/oauth/mapper/GoogleOAuthMap.java
@@ -1,6 +1,6 @@
-package com.hideyoshi.backendportfolio.base.security.oauth.mapper;
+package com.hideyoshi.auth.base.auth.oauth.mapper;
-import com.hideyoshi.backendportfolio.base.user.entity.Provider;
+import com.hideyoshi.auth.base.auth.entity.Provider;
import lombok.AllArgsConstructor;
import org.springframework.security.oauth2.core.user.OAuth2User;
diff --git a/src/main/java/com/hideyoshi/auth/base/auth/oauth/mapper/OAuthMap.java b/src/main/java/com/hideyoshi/auth/base/auth/oauth/mapper/OAuthMap.java
new file mode 100644
index 0000000..6b96271
--- /dev/null
+++ b/src/main/java/com/hideyoshi/auth/base/auth/oauth/mapper/OAuthMap.java
@@ -0,0 +1,13 @@
+package com.hideyoshi.auth.base.auth.oauth.mapper;
+
+import com.hideyoshi.auth.base.auth.entity.Provider;
+
+public interface OAuthMap {
+
+ String getPrincipal();
+
+ String getProfilePicture();
+
+ Provider getProvider();
+
+}
diff --git a/src/main/java/com/hideyoshi/backendportfolio/base/security/oauth/mapper/OAuthMapper.java b/src/main/java/com/hideyoshi/auth/base/auth/oauth/mapper/OAuthMapper.java
similarity index 54%
rename from src/main/java/com/hideyoshi/backendportfolio/base/security/oauth/mapper/OAuthMapper.java
rename to src/main/java/com/hideyoshi/auth/base/auth/oauth/mapper/OAuthMapper.java
index b4b73b8..f35c191 100644
--- a/src/main/java/com/hideyoshi/backendportfolio/base/security/oauth/mapper/OAuthMapper.java
+++ b/src/main/java/com/hideyoshi/auth/base/auth/oauth/mapper/OAuthMapper.java
@@ -1,6 +1,6 @@
-package com.hideyoshi.backendportfolio.base.security.oauth.mapper;
+package com.hideyoshi.auth.base.auth.oauth.mapper;
-import com.hideyoshi.backendportfolio.base.user.entity.Provider;
+import com.hideyoshi.auth.base.auth.entity.Provider;
import lombok.Getter;
public enum OAuthMapper {
@@ -9,26 +9,26 @@ public enum OAuthMapper {
GITHUB(GithubOAuthMap.class, Provider.GITHUB);
- private final Class oAuthMap;
+ private final Class extends OAuthMap> oAuthMap;
@Getter
private final Provider provider;
- private OAuthMapper(Class oAuthMap, Provider provider) {
+ private OAuthMapper(Class extends OAuthMap> oAuthMap, Provider provider) {
this.oAuthMap = oAuthMap;
this.provider = provider;
}
- public static OAuthMapper byValue(String name) {
+ public static OAuthMapper byValue(Provider provider) {
for (OAuthMapper e : values()) {
- if (e.getProvider().getName().equals(name)) {
+ if (e.getProvider().equals(provider)) {
return e;
}
}
throw new IllegalArgumentException("Argument not valid.");
}
- public Class getMap() {
+ public Class extends OAuthMap> getMap() {
return oAuthMap;
}
diff --git a/src/main/java/com/hideyoshi/backendportfolio/base/security/oauth/repo/OAuthRequestRepository.java b/src/main/java/com/hideyoshi/auth/base/auth/oauth/repo/OAuthRequestRepository.java
similarity index 97%
rename from src/main/java/com/hideyoshi/backendportfolio/base/security/oauth/repo/OAuthRequestRepository.java
rename to src/main/java/com/hideyoshi/auth/base/auth/oauth/repo/OAuthRequestRepository.java
index b49a359..d2ebed9 100644
--- a/src/main/java/com/hideyoshi/backendportfolio/base/security/oauth/repo/OAuthRequestRepository.java
+++ b/src/main/java/com/hideyoshi/auth/base/auth/oauth/repo/OAuthRequestRepository.java
@@ -1,4 +1,4 @@
-package com.hideyoshi.backendportfolio.base.security.oauth.repo;
+package com.hideyoshi.auth.base.auth.oauth.repo;
import lombok.extern.log4j.Log4j2;
import org.springframework.security.oauth2.client.web.AuthorizationRequestRepository;
diff --git a/src/main/java/com/hideyoshi/backendportfolio/base/user/repo/UserRepository.java b/src/main/java/com/hideyoshi/auth/base/auth/repo/UserRepository.java
similarity index 73%
rename from src/main/java/com/hideyoshi/backendportfolio/base/user/repo/UserRepository.java
rename to src/main/java/com/hideyoshi/auth/base/auth/repo/UserRepository.java
index e771b17..f62bba9 100644
--- a/src/main/java/com/hideyoshi/backendportfolio/base/user/repo/UserRepository.java
+++ b/src/main/java/com/hideyoshi/auth/base/auth/repo/UserRepository.java
@@ -1,6 +1,6 @@
-package com.hideyoshi.backendportfolio.base.user.repo;
+package com.hideyoshi.auth.base.auth.repo;
-import com.hideyoshi.backendportfolio.base.user.entity.User;
+import com.hideyoshi.auth.base.auth.entity.User;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
diff --git a/src/main/java/com/hideyoshi/auth/base/auth/service/AuthService.java b/src/main/java/com/hideyoshi/auth/base/auth/service/AuthService.java
new file mode 100644
index 0000000..dd47aae
--- /dev/null
+++ b/src/main/java/com/hideyoshi/auth/base/auth/service/AuthService.java
@@ -0,0 +1,235 @@
+package com.hideyoshi.auth.base.auth.service;
+
+import com.auth0.jwt.JWT;
+import com.auth0.jwt.JWTVerifier;
+import com.auth0.jwt.algorithms.Algorithm;
+import com.auth0.jwt.interfaces.DecodedJWT;
+import com.hideyoshi.auth.base.auth.model.AuthDTO;
+import com.hideyoshi.auth.base.auth.oauth.mapper.OAuthMap;
+import com.hideyoshi.auth.base.auth.oauth.mapper.OAuthMapper;
+import com.hideyoshi.auth.base.auth.entity.Provider;
+import com.hideyoshi.auth.base.auth.entity.Role;
+import com.hideyoshi.auth.base.auth.model.TokenDTO;
+import com.hideyoshi.auth.base.auth.model.UserDTO;
+import com.hideyoshi.auth.microservice.storageService.model.StorageServiceDownloadResponse;
+import com.hideyoshi.auth.microservice.storageService.service.StorageService;
+import com.hideyoshi.auth.util.exception.BadRequestException;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.log4j.Log4j2;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
+import org.springframework.security.core.GrantedAuthority;
+import org.springframework.security.core.authority.SimpleGrantedAuthority;
+import org.springframework.security.core.context.SecurityContextHolder;
+import org.springframework.security.oauth2.core.user.OAuth2User;
+import org.springframework.stereotype.Service;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.HttpSession;
+import javax.validation.Valid;
+import java.io.IOException;
+import java.util.*;
+import java.util.stream.Collectors;
+
+import static java.util.Arrays.stream;
+
+@Log4j2
+@Service
+@RequiredArgsConstructor
+public class AuthService {
+ private static final String AUTHORIZATION_TYPE_STRING = "Bearer ";
+
+ private final UserService userService;
+
+ private final StorageService storageService;
+
+ @Value("${com.hideyoshi.tokenSecret}")
+ private String TOKEN_SECRET;
+
+ @Value("${com.hideyoshi.accessTokenDuration}")
+ private Integer ACCESS_TOKEN_DURATION;
+
+ @Value("${com.hideyoshi.refreshTokenDuration}")
+ private Integer REFRESH_TOKEN_DURATION;
+
+ public AuthDTO signupUser(@Valid UserDTO user, HttpServletRequest request) {
+ user.setProvider(Provider.LOCAL);
+
+ UserDTO authenticatedUser = this.userService.saveUser(user);
+ authenticatedUser.setProfilePictureUrl(this.extractProfilePictureUrl(authenticatedUser));
+
+ return this.generateNewAuthenticatedUser(
+ authenticatedUser,
+ request
+ );
+
+ }
+
+ public AuthDTO loginUser(HttpServletRequest request, HttpServletResponse response, @Valid UserDTO user) throws IOException {
+ user.setProfilePictureUrl(this.extractProfilePictureUrl(user));
+
+ return this.generateNewAuthenticatedUser(
+ user,
+ request
+ );
+ }
+
+ public AuthDTO loginOAuthUser(OAuth2User oauthUser, HttpServletRequest request) {
+ Provider clientProvider = Provider.byValue(
+ this.getClientFromUrl(request.getRequestURL().toString())
+ );
+
+ OAuthMap oauthMap = this.generateOAuthMap(clientProvider, oauthUser);
+
+ return this.processOAuthPostLogin(
+ this.generateAuthenticatedUserFromOAuth(oauthMap, oauthUser),
+ request
+ );
+ }
+
+ public AuthDTO refreshAccessToken(String requestToken, HttpServletRequest request) {
+ DecodedJWT decodedJWT = this.decodeToken(requestToken)
+ .orElseThrow(() -> new BadRequestException("Invalid Token"));
+
+ String username = decodedJWT.getSubject();
+
+ UserDTO user = this.userService.getUser(username);
+ user.setProfilePictureUrl(this.extractProfilePictureUrl(user));
+
+ return this.refreshAuthenticatedUser(user, request, new TokenDTO(requestToken, decodedJWT.getExpiresAt()));
+ }
+
+ public AuthDTO validateAccessToken(HttpServletRequest request) {
+ UserDTO user = this.getLoggedUser();
+ user.setProfilePictureUrl(this.extractProfilePictureUrl(user));
+
+ return this.generateNewAuthenticatedUser(user, request);
+
+ }
+
+ public UserDTO getLoggedUser() {
+ String username = (String) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
+ return userService.getUser(username);
+ }
+
+ public UsernamePasswordAuthenticationToken extractAccessTokenInfo(String accessToken) {
+ DecodedJWT decodedJWT = this.decodeToken(accessToken)
+ .orElseThrow(() -> new BadRequestException("Invalid Token"));
+
+ String username = decodedJWT.getSubject();
+ String[] roles = decodedJWT.getClaim("roles").asArray(String.class);
+
+ Collection authorities = new ArrayList<>();
+ stream(roles).forEach(role -> {
+ authorities.add(new SimpleGrantedAuthority(role));
+ });
+
+ return new UsernamePasswordAuthenticationToken(username, null, authorities);
+ }
+
+ private Optional decodeToken(String token) {
+ Algorithm algorithm = Algorithm.HMAC256(TOKEN_SECRET.getBytes());
+ JWTVerifier verifier = JWT.require(algorithm).build();
+ try {
+ return Optional.of(verifier.verify(token));
+ } catch (Exception e) {
+ log.warn("Token verification failed: {}", e.getMessage());
+ }
+ return Optional.empty();
+ }
+
+ private AuthDTO processOAuthPostLogin(@Valid UserDTO user, HttpServletRequest request) {
+
+ if (Objects.nonNull(user.getId())) {
+ this.userService.alterUser(user.getId(), user);
+ } else {
+ this.userService.saveUser(user);
+ }
+
+ return this.generateNewAuthenticatedUser(user, request);
+ }
+
+ private String getClientFromUrl(String url) {
+ String[] urlPartition = url.split("/");
+ return urlPartition[urlPartition.length - 1];
+ }
+
+ private OAuthMap generateOAuthMap(Provider clientProvider, OAuth2User oauthUser) {
+ try {
+ return OAuthMapper.byValue(clientProvider).getMap()
+ .getDeclaredConstructor(OAuth2User.class).newInstance(oauthUser);
+ } catch (Exception e) {
+ throw new BadRequestException("Unsupported OAuth Client.");
+ }
+ }
+
+ private String extractProfilePictureUrl(UserDTO user) {
+ return this.storageService.getFileUrl(user.getUsername(), "profile")
+ .map(StorageServiceDownloadResponse::getPresignedUrl)
+ .orElse(null);
+ }
+
+ private UserDTO generateAuthenticatedUserFromOAuth(OAuthMap oauthMap, OAuth2User oauthUser) {
+ UserDTO user;
+ try {
+ user = this.userService.getUser(oauthMap.getPrincipal());
+ } catch (BadRequestException e) {
+ user = UserDTO.builder()
+ .name(oauthUser.getAttribute("name"))
+ .username(oauthMap.getPrincipal())
+ .email(oauthUser.getAttribute("email"))
+ .roles(List.of(Role.USER))
+ .provider(oauthMap.getProvider())
+ .build();
+ }
+ user.setProfilePictureUrl(oauthMap.getProfilePicture());
+
+ return user;
+ }
+
+ private AuthDTO generateNewAuthenticatedUser(UserDTO user, HttpServletRequest request) {
+ HttpSession httpSession = request.getSession();
+ AuthDTO authObject = new AuthDTO(
+ user,
+ this.generateToken(user, request, ACCESS_TOKEN_DURATION),
+ this.generateToken(user, request, REFRESH_TOKEN_DURATION)
+ );
+
+ httpSession.setAttribute("user", authObject);
+
+ return authObject;
+ }
+
+ private AuthDTO refreshAuthenticatedUser(UserDTO user, HttpServletRequest request, TokenDTO refreshToken) {
+ HttpSession httpSession = request.getSession();
+ AuthDTO authObject = new AuthDTO(
+ user,
+ this.generateToken(user, request, ACCESS_TOKEN_DURATION),
+ refreshToken
+ );
+
+ httpSession.setAttribute("user", authObject);
+
+ return authObject;
+ }
+
+ private TokenDTO generateToken(@Valid UserDTO user, HttpServletRequest request, Integer duration) {
+
+ Date expirationDate = new Date(System.currentTimeMillis() + duration);
+ Algorithm algorithm = Algorithm.HMAC256(TOKEN_SECRET.getBytes());
+
+ String token = JWT.create()
+ .withSubject(user.getUsername())
+ .withExpiresAt(expirationDate)
+ .withIssuer(request.getRequestURL().toString())
+ .withClaim("roles", user.getAuthorities()
+ .stream().map(GrantedAuthority::getAuthority)
+ .collect(Collectors.toList()))
+ .sign(algorithm);
+
+ return new TokenDTO(token, expirationDate);
+
+ }
+
+}
diff --git a/src/main/java/com/hideyoshi/backendportfolio/base/user/service/UserServiceImpl.java b/src/main/java/com/hideyoshi/auth/base/auth/service/UserService.java
similarity index 88%
rename from src/main/java/com/hideyoshi/backendportfolio/base/user/service/UserServiceImpl.java
rename to src/main/java/com/hideyoshi/auth/base/auth/service/UserService.java
index 16a7746..1f74c54 100644
--- a/src/main/java/com/hideyoshi/backendportfolio/base/user/service/UserServiceImpl.java
+++ b/src/main/java/com/hideyoshi/auth/base/auth/service/UserService.java
@@ -1,14 +1,15 @@
-package com.hideyoshi.backendportfolio.base.user.service;
+package com.hideyoshi.auth.base.auth.service;
-import com.hideyoshi.backendportfolio.base.user.entity.Provider;
-import com.hideyoshi.backendportfolio.base.user.entity.Role;
-import com.hideyoshi.backendportfolio.base.user.entity.User;
-import com.hideyoshi.backendportfolio.base.user.model.UserDTO;
-import com.hideyoshi.backendportfolio.base.user.repo.UserRepository;
-import com.hideyoshi.backendportfolio.util.exception.BadRequestException;
+import com.hideyoshi.auth.base.auth.entity.Provider;
+import com.hideyoshi.auth.base.auth.entity.Role;
+import com.hideyoshi.auth.base.auth.entity.User;
+import com.hideyoshi.auth.base.auth.model.UserDTO;
+import com.hideyoshi.auth.base.auth.repo.UserRepository;
+import com.hideyoshi.auth.util.exception.BadRequestException;
import lombok.RequiredArgsConstructor;
import lombok.extern.log4j.Log4j2;
import org.springframework.security.core.userdetails.UserDetails;
+import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.stereotype.Service;
@@ -22,13 +23,12 @@ import java.util.stream.Collectors;
@Service
@Transactional
@RequiredArgsConstructor
-public class UserServiceImpl implements UserService {
+public class UserService implements UserDetailsService {
private final UserRepository userRepo;
private final PasswordEncoder passwordEncoder;
- @Override
public UserDTO saveUser(@Valid UserDTO user) {
this.userRepo.findByUsername(user.getUsername()).ifPresent(userOnDB -> {
@@ -45,7 +45,6 @@ public class UserServiceImpl implements UserService {
return userSaved;
}
- @Override
public void alterUser(Long id, @Valid UserDTO user) {
this.userRepo.findById(id).ifPresentOrElse(userOnDB -> {
@@ -57,7 +56,6 @@ public class UserServiceImpl implements UserService {
});
}
- @Override
public void deleteUser(Long id) {
this.userRepo.findById(id).ifPresentOrElse(userOnDB -> {
@@ -68,7 +66,6 @@ public class UserServiceImpl implements UserService {
}
- @Override
public void addRoleToUser(Long id, String roleName) {
UserDTO userOnDB = this.getUser(id);
@@ -89,7 +86,6 @@ public class UserServiceImpl implements UserService {
}
- @Override
public void removeRoleFromUser(Long id, String roleName) {
UserDTO userOnDB = this.getUser(id);
@@ -109,7 +105,6 @@ public class UserServiceImpl implements UserService {
}
}
- @Override
public UserDTO getUser(Long id) {
log.info(String.format("Fetching user with id: %o", id));
@@ -119,7 +114,6 @@ public class UserServiceImpl implements UserService {
);
}
- @Override
public UserDTO getUser(String username) {
log.info(String.format("Fetching user: %s", username));
@@ -129,7 +123,6 @@ public class UserServiceImpl implements UserService {
);
}
- @Override
public List getUsers() {
log.info("Fetching all users.");
@@ -138,7 +131,6 @@ public class UserServiceImpl implements UserService {
.collect(Collectors.toList());
}
- @Override
public UserDetails loadUserByUsername(String username) {
return this.getUser(username);
}
diff --git a/src/main/java/com/hideyoshi/backendportfolio/base/config/CorsConfig.java b/src/main/java/com/hideyoshi/auth/base/config/CorsConfig.java
similarity index 96%
rename from src/main/java/com/hideyoshi/backendportfolio/base/config/CorsConfig.java
rename to src/main/java/com/hideyoshi/auth/base/config/CorsConfig.java
index 3a3e2a5..81ceb00 100644
--- a/src/main/java/com/hideyoshi/backendportfolio/base/config/CorsConfig.java
+++ b/src/main/java/com/hideyoshi/auth/base/config/CorsConfig.java
@@ -1,4 +1,4 @@
-package com.hideyoshi.backendportfolio.base.config;
+package com.hideyoshi.auth.base.config;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
diff --git a/src/main/java/com/hideyoshi/backendportfolio/base/config/DefaultUserConfig.java b/src/main/java/com/hideyoshi/auth/base/config/DefaultUserConfig.java
similarity index 80%
rename from src/main/java/com/hideyoshi/backendportfolio/base/config/DefaultUserConfig.java
rename to src/main/java/com/hideyoshi/auth/base/config/DefaultUserConfig.java
index 8ed808f..f75b839 100644
--- a/src/main/java/com/hideyoshi/backendportfolio/base/config/DefaultUserConfig.java
+++ b/src/main/java/com/hideyoshi/auth/base/config/DefaultUserConfig.java
@@ -1,10 +1,10 @@
-package com.hideyoshi.backendportfolio.base.config;
+package com.hideyoshi.auth.base.config;
-import com.hideyoshi.backendportfolio.base.user.entity.Provider;
-import com.hideyoshi.backendportfolio.base.user.entity.Role;
-import com.hideyoshi.backendportfolio.base.user.model.UserDTO;
-import com.hideyoshi.backendportfolio.base.user.repo.UserRepository;
-import com.hideyoshi.backendportfolio.base.user.service.UserService;
+import com.hideyoshi.auth.base.auth.entity.Provider;
+import com.hideyoshi.auth.base.auth.entity.Role;
+import com.hideyoshi.auth.base.auth.model.UserDTO;
+import com.hideyoshi.auth.base.auth.repo.UserRepository;
+import com.hideyoshi.auth.base.auth.service.UserService;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.CommandLineRunner;
import org.springframework.context.annotation.Bean;
diff --git a/src/main/java/com/hideyoshi/backendportfolio/base/config/RestAuthenticationEntryPointConfig.java b/src/main/java/com/hideyoshi/auth/base/config/RestAuthenticationEntryPointConfig.java
similarity index 89%
rename from src/main/java/com/hideyoshi/backendportfolio/base/config/RestAuthenticationEntryPointConfig.java
rename to src/main/java/com/hideyoshi/auth/base/config/RestAuthenticationEntryPointConfig.java
index 81ac67e..c8c046d 100644
--- a/src/main/java/com/hideyoshi/backendportfolio/base/config/RestAuthenticationEntryPointConfig.java
+++ b/src/main/java/com/hideyoshi/auth/base/config/RestAuthenticationEntryPointConfig.java
@@ -1,6 +1,6 @@
-package com.hideyoshi.backendportfolio.base.config;
+package com.hideyoshi.auth.base.config;
-import com.hideyoshi.backendportfolio.util.exception.AuthenticationInvalidException;
+import com.hideyoshi.auth.util.exception.AuthenticationInvalidException;
import lombok.extern.log4j.Log4j2;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
diff --git a/src/main/java/com/hideyoshi/backendportfolio/base/config/SessionConfig.java b/src/main/java/com/hideyoshi/auth/base/config/SessionConfig.java
similarity index 93%
rename from src/main/java/com/hideyoshi/backendportfolio/base/config/SessionConfig.java
rename to src/main/java/com/hideyoshi/auth/base/config/SessionConfig.java
index 1185c88..9373f75 100644
--- a/src/main/java/com/hideyoshi/backendportfolio/base/config/SessionConfig.java
+++ b/src/main/java/com/hideyoshi/auth/base/config/SessionConfig.java
@@ -1,4 +1,4 @@
-package com.hideyoshi.backendportfolio.base.config;
+package com.hideyoshi.auth.base.config;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
diff --git a/src/main/java/com/hideyoshi/backendportfolio/base/session/api/SessionController.java b/src/main/java/com/hideyoshi/auth/base/session/api/SessionController.java
similarity index 84%
rename from src/main/java/com/hideyoshi/backendportfolio/base/session/api/SessionController.java
rename to src/main/java/com/hideyoshi/auth/base/session/api/SessionController.java
index 2c2f0b1..81fe4a8 100644
--- a/src/main/java/com/hideyoshi/backendportfolio/base/session/api/SessionController.java
+++ b/src/main/java/com/hideyoshi/auth/base/session/api/SessionController.java
@@ -1,7 +1,7 @@
-package com.hideyoshi.backendportfolio.base.session.api;
+package com.hideyoshi.auth.base.session.api;
-import com.hideyoshi.backendportfolio.base.security.model.AuthDTO;
-import com.hideyoshi.backendportfolio.base.session.service.SessionManagerService;
+import com.hideyoshi.auth.base.auth.model.AuthDTO;
+import com.hideyoshi.auth.base.session.service.SessionManagerService;
import lombok.RequiredArgsConstructor;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
diff --git a/src/main/java/com/hideyoshi/backendportfolio/base/session/service/SessionManagerService.java b/src/main/java/com/hideyoshi/auth/base/session/service/SessionManagerService.java
similarity index 58%
rename from src/main/java/com/hideyoshi/backendportfolio/base/session/service/SessionManagerService.java
rename to src/main/java/com/hideyoshi/auth/base/session/service/SessionManagerService.java
index add7bac..689d3f4 100644
--- a/src/main/java/com/hideyoshi/backendportfolio/base/session/service/SessionManagerService.java
+++ b/src/main/java/com/hideyoshi/auth/base/session/service/SessionManagerService.java
@@ -1,6 +1,6 @@
-package com.hideyoshi.backendportfolio.base.session.service;
+package com.hideyoshi.auth.base.session.service;
-import com.hideyoshi.backendportfolio.base.security.model.AuthDTO;
+import com.hideyoshi.auth.base.auth.model.AuthDTO;
import javax.servlet.http.HttpSession;
diff --git a/src/main/java/com/hideyoshi/backendportfolio/base/session/service/SessionManagerServiceImpl.java b/src/main/java/com/hideyoshi/auth/base/session/service/SessionManagerServiceImpl.java
similarity index 78%
rename from src/main/java/com/hideyoshi/backendportfolio/base/session/service/SessionManagerServiceImpl.java
rename to src/main/java/com/hideyoshi/auth/base/session/service/SessionManagerServiceImpl.java
index f2e25ab..fc907e5 100644
--- a/src/main/java/com/hideyoshi/backendportfolio/base/session/service/SessionManagerServiceImpl.java
+++ b/src/main/java/com/hideyoshi/auth/base/session/service/SessionManagerServiceImpl.java
@@ -1,6 +1,6 @@
-package com.hideyoshi.backendportfolio.base.session.service;
+package com.hideyoshi.auth.base.session.service;
-import com.hideyoshi.backendportfolio.base.security.model.AuthDTO;
+import com.hideyoshi.auth.base.auth.model.AuthDTO;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
diff --git a/src/main/java/com/hideyoshi/backendportfolio/healthChecker/api/HealthCheckerController.java b/src/main/java/com/hideyoshi/auth/healthChecker/api/HealthCheckerController.java
similarity index 77%
rename from src/main/java/com/hideyoshi/backendportfolio/healthChecker/api/HealthCheckerController.java
rename to src/main/java/com/hideyoshi/auth/healthChecker/api/HealthCheckerController.java
index b24ed1e..0dd6ed0 100644
--- a/src/main/java/com/hideyoshi/backendportfolio/healthChecker/api/HealthCheckerController.java
+++ b/src/main/java/com/hideyoshi/auth/healthChecker/api/HealthCheckerController.java
@@ -1,8 +1,8 @@
-package com.hideyoshi.backendportfolio.healthChecker.api;
+package com.hideyoshi.auth.healthChecker.api;
-import com.hideyoshi.backendportfolio.util.guard.UserResourceGuard;
-import com.hideyoshi.backendportfolio.util.guard.UserResourceGuardEnum;
+import com.hideyoshi.auth.util.guard.UserResourceGuard;
+import com.hideyoshi.auth.util.guard.UserResourceGuardEnum;
import lombok.RequiredArgsConstructor;
import lombok.extern.log4j.Log4j2;
import org.springframework.http.ResponseEntity;
diff --git a/src/main/java/com/hideyoshi/backendportfolio/microservice/storageService/config/StorageServiceConfig.java b/src/main/java/com/hideyoshi/auth/microservice/storageService/config/StorageServiceConfig.java
similarity index 80%
rename from src/main/java/com/hideyoshi/backendportfolio/microservice/storageService/config/StorageServiceConfig.java
rename to src/main/java/com/hideyoshi/auth/microservice/storageService/config/StorageServiceConfig.java
index 4e5a9ca..4212588 100644
--- a/src/main/java/com/hideyoshi/backendportfolio/microservice/storageService/config/StorageServiceConfig.java
+++ b/src/main/java/com/hideyoshi/auth/microservice/storageService/config/StorageServiceConfig.java
@@ -1,4 +1,4 @@
-package com.hideyoshi.backendportfolio.microservice.storageService.config;
+package com.hideyoshi.auth.microservice.storageService.config;
import lombok.Getter;
import org.springframework.beans.factory.annotation.Value;
diff --git a/src/main/java/com/hideyoshi/backendportfolio/microservice/storageService/enums/FileTypeEnum.java b/src/main/java/com/hideyoshi/auth/microservice/storageService/enums/FileTypeEnum.java
similarity index 80%
rename from src/main/java/com/hideyoshi/backendportfolio/microservice/storageService/enums/FileTypeEnum.java
rename to src/main/java/com/hideyoshi/auth/microservice/storageService/enums/FileTypeEnum.java
index 0695d5a..29378a3 100644
--- a/src/main/java/com/hideyoshi/backendportfolio/microservice/storageService/enums/FileTypeEnum.java
+++ b/src/main/java/com/hideyoshi/auth/microservice/storageService/enums/FileTypeEnum.java
@@ -1,7 +1,7 @@
-package com.hideyoshi.backendportfolio.microservice.storageService.enums;
+package com.hideyoshi.auth.microservice.storageService.enums;
import com.fasterxml.jackson.annotation.JsonFormat;
-import com.hideyoshi.backendportfolio.util.exception.BadRequestException;
+import com.hideyoshi.auth.util.exception.BadRequestException;
import lombok.Getter;
@Getter
diff --git a/src/main/java/com/hideyoshi/backendportfolio/microservice/storageService/enums/FileTypeEnumConverter.java b/src/main/java/com/hideyoshi/auth/microservice/storageService/enums/FileTypeEnumConverter.java
similarity index 81%
rename from src/main/java/com/hideyoshi/backendportfolio/microservice/storageService/enums/FileTypeEnumConverter.java
rename to src/main/java/com/hideyoshi/auth/microservice/storageService/enums/FileTypeEnumConverter.java
index 49f2365..696de59 100644
--- a/src/main/java/com/hideyoshi/backendportfolio/microservice/storageService/enums/FileTypeEnumConverter.java
+++ b/src/main/java/com/hideyoshi/auth/microservice/storageService/enums/FileTypeEnumConverter.java
@@ -1,4 +1,4 @@
-package com.hideyoshi.backendportfolio.microservice.storageService.enums;
+package com.hideyoshi.auth.microservice.storageService.enums;
import org.springframework.core.convert.converter.Converter;
import org.springframework.stereotype.Component;
diff --git a/src/main/java/com/hideyoshi/backendportfolio/microservice/storageService/model/StorageServiceDownloadResponse.java b/src/main/java/com/hideyoshi/auth/microservice/storageService/model/StorageServiceDownloadResponse.java
similarity index 80%
rename from src/main/java/com/hideyoshi/backendportfolio/microservice/storageService/model/StorageServiceDownloadResponse.java
rename to src/main/java/com/hideyoshi/auth/microservice/storageService/model/StorageServiceDownloadResponse.java
index 73dd073..f6fe914 100644
--- a/src/main/java/com/hideyoshi/backendportfolio/microservice/storageService/model/StorageServiceDownloadResponse.java
+++ b/src/main/java/com/hideyoshi/auth/microservice/storageService/model/StorageServiceDownloadResponse.java
@@ -1,4 +1,4 @@
-package com.hideyoshi.backendportfolio.microservice.storageService.model;
+package com.hideyoshi.auth.microservice.storageService.model;
import com.fasterxml.jackson.annotation.JsonProperty;
diff --git a/src/main/java/com/hideyoshi/backendportfolio/microservice/storageService/model/StorageServiceUploadResponse.java b/src/main/java/com/hideyoshi/auth/microservice/storageService/model/StorageServiceUploadResponse.java
similarity index 83%
rename from src/main/java/com/hideyoshi/backendportfolio/microservice/storageService/model/StorageServiceUploadResponse.java
rename to src/main/java/com/hideyoshi/auth/microservice/storageService/model/StorageServiceUploadResponse.java
index be9009b..5a220f2 100644
--- a/src/main/java/com/hideyoshi/backendportfolio/microservice/storageService/model/StorageServiceUploadResponse.java
+++ b/src/main/java/com/hideyoshi/auth/microservice/storageService/model/StorageServiceUploadResponse.java
@@ -1,4 +1,4 @@
-package com.hideyoshi.backendportfolio.microservice.storageService.model;
+package com.hideyoshi.auth.microservice.storageService.model;
import com.fasterxml.jackson.annotation.JsonProperty;
diff --git a/src/main/java/com/hideyoshi/backendportfolio/microservice/storageService/service/StorageService.java b/src/main/java/com/hideyoshi/auth/microservice/storageService/service/StorageService.java
similarity index 92%
rename from src/main/java/com/hideyoshi/backendportfolio/microservice/storageService/service/StorageService.java
rename to src/main/java/com/hideyoshi/auth/microservice/storageService/service/StorageService.java
index 7c16c41..4560382 100644
--- a/src/main/java/com/hideyoshi/backendportfolio/microservice/storageService/service/StorageService.java
+++ b/src/main/java/com/hideyoshi/auth/microservice/storageService/service/StorageService.java
@@ -1,11 +1,11 @@
-package com.hideyoshi.backendportfolio.microservice.storageService.service;
+package com.hideyoshi.auth.microservice.storageService.service;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
-import com.hideyoshi.backendportfolio.microservice.storageService.config.StorageServiceConfig;
-import com.hideyoshi.backendportfolio.microservice.storageService.enums.FileTypeEnum;
-import com.hideyoshi.backendportfolio.microservice.storageService.model.StorageServiceDownloadResponse;
-import com.hideyoshi.backendportfolio.microservice.storageService.model.StorageServiceUploadResponse;
+import com.hideyoshi.auth.microservice.storageService.config.StorageServiceConfig;
+import com.hideyoshi.auth.microservice.storageService.enums.FileTypeEnum;
+import com.hideyoshi.auth.microservice.storageService.model.StorageServiceDownloadResponse;
+import com.hideyoshi.auth.microservice.storageService.model.StorageServiceUploadResponse;
import lombok.RequiredArgsConstructor;
import lombok.extern.log4j.Log4j2;
import org.apache.http.client.methods.HttpDelete;
@@ -63,7 +63,7 @@ public class StorageService {
}
public Optional getFileUrl(String username, String filePostfix) {
- URI uri = null;
+ URI uri;
try {
uri = new URIBuilder(storageServiceConfig.getFileServicePath() + "/file")
.addParameter(PARAMETER_USERNAME, username)
diff --git a/src/main/java/com/hideyoshi/backendportfolio/util/exception/AuthenticationInvalidException.java b/src/main/java/com/hideyoshi/auth/util/exception/AuthenticationInvalidException.java
similarity index 85%
rename from src/main/java/com/hideyoshi/backendportfolio/util/exception/AuthenticationInvalidException.java
rename to src/main/java/com/hideyoshi/auth/util/exception/AuthenticationInvalidException.java
index 02eab84..a3cc8cb 100644
--- a/src/main/java/com/hideyoshi/backendportfolio/util/exception/AuthenticationInvalidException.java
+++ b/src/main/java/com/hideyoshi/auth/util/exception/AuthenticationInvalidException.java
@@ -1,4 +1,4 @@
-package com.hideyoshi.backendportfolio.util.exception;
+package com.hideyoshi.auth.util.exception;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.ResponseStatus;
diff --git a/src/main/java/com/hideyoshi/backendportfolio/util/exception/AuthenticationInvalidExceptionDetails.java b/src/main/java/com/hideyoshi/auth/util/exception/AuthenticationInvalidExceptionDetails.java
similarity index 87%
rename from src/main/java/com/hideyoshi/backendportfolio/util/exception/AuthenticationInvalidExceptionDetails.java
rename to src/main/java/com/hideyoshi/auth/util/exception/AuthenticationInvalidExceptionDetails.java
index 9e55de3..f18305f 100644
--- a/src/main/java/com/hideyoshi/backendportfolio/util/exception/AuthenticationInvalidExceptionDetails.java
+++ b/src/main/java/com/hideyoshi/auth/util/exception/AuthenticationInvalidExceptionDetails.java
@@ -1,4 +1,4 @@
-package com.hideyoshi.backendportfolio.util.exception;
+package com.hideyoshi.auth.util.exception;
import java.time.LocalDateTime;
diff --git a/src/main/java/com/hideyoshi/backendportfolio/util/exception/BadRequestException.java b/src/main/java/com/hideyoshi/auth/util/exception/BadRequestException.java
similarity index 84%
rename from src/main/java/com/hideyoshi/backendportfolio/util/exception/BadRequestException.java
rename to src/main/java/com/hideyoshi/auth/util/exception/BadRequestException.java
index 170a472..235b77f 100644
--- a/src/main/java/com/hideyoshi/backendportfolio/util/exception/BadRequestException.java
+++ b/src/main/java/com/hideyoshi/auth/util/exception/BadRequestException.java
@@ -1,4 +1,4 @@
-package com.hideyoshi.backendportfolio.util.exception;
+package com.hideyoshi.auth.util.exception;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.ResponseStatus;
diff --git a/src/main/java/com/hideyoshi/backendportfolio/util/exception/BadRequestExceptionDetails.java b/src/main/java/com/hideyoshi/auth/util/exception/BadRequestExceptionDetails.java
similarity index 88%
rename from src/main/java/com/hideyoshi/backendportfolio/util/exception/BadRequestExceptionDetails.java
rename to src/main/java/com/hideyoshi/auth/util/exception/BadRequestExceptionDetails.java
index 5e5d89e..c7a2649 100644
--- a/src/main/java/com/hideyoshi/backendportfolio/util/exception/BadRequestExceptionDetails.java
+++ b/src/main/java/com/hideyoshi/auth/util/exception/BadRequestExceptionDetails.java
@@ -1,4 +1,4 @@
-package com.hideyoshi.backendportfolio.util.exception;
+package com.hideyoshi.auth.util.exception;
import java.time.LocalDateTime;
diff --git a/src/main/java/com/hideyoshi/backendportfolio/util/exception/ExceptionDetails.java b/src/main/java/com/hideyoshi/auth/util/exception/ExceptionDetails.java
similarity index 92%
rename from src/main/java/com/hideyoshi/backendportfolio/util/exception/ExceptionDetails.java
rename to src/main/java/com/hideyoshi/auth/util/exception/ExceptionDetails.java
index d902440..10b2951 100644
--- a/src/main/java/com/hideyoshi/backendportfolio/util/exception/ExceptionDetails.java
+++ b/src/main/java/com/hideyoshi/auth/util/exception/ExceptionDetails.java
@@ -1,4 +1,4 @@
-package com.hideyoshi.backendportfolio.util.exception;
+package com.hideyoshi.auth.util.exception;
import lombok.Getter;
import lombok.Setter;
diff --git a/src/main/java/com/hideyoshi/backendportfolio/util/exception/ValidationExceptionDetails.java b/src/main/java/com/hideyoshi/auth/util/exception/ValidationExceptionDetails.java
similarity index 92%
rename from src/main/java/com/hideyoshi/backendportfolio/util/exception/ValidationExceptionDetails.java
rename to src/main/java/com/hideyoshi/auth/util/exception/ValidationExceptionDetails.java
index e858fc9..4150fc0 100644
--- a/src/main/java/com/hideyoshi/backendportfolio/util/exception/ValidationExceptionDetails.java
+++ b/src/main/java/com/hideyoshi/auth/util/exception/ValidationExceptionDetails.java
@@ -1,4 +1,4 @@
-package com.hideyoshi.backendportfolio.util.exception;
+package com.hideyoshi.auth.util.exception;
import lombok.Getter;
import lombok.Setter;
diff --git a/src/main/java/com/hideyoshi/backendportfolio/util/guard/UserResourceGuard.java b/src/main/java/com/hideyoshi/auth/util/guard/UserResourceGuard.java
similarity index 85%
rename from src/main/java/com/hideyoshi/backendportfolio/util/guard/UserResourceGuard.java
rename to src/main/java/com/hideyoshi/auth/util/guard/UserResourceGuard.java
index 337778b..f599c2b 100644
--- a/src/main/java/com/hideyoshi/backendportfolio/util/guard/UserResourceGuard.java
+++ b/src/main/java/com/hideyoshi/auth/util/guard/UserResourceGuard.java
@@ -1,4 +1,4 @@
-package com.hideyoshi.backendportfolio.util.guard;
+package com.hideyoshi.auth.util.guard;
import java.lang.annotation.*;
diff --git a/src/main/java/com/hideyoshi/backendportfolio/util/guard/UserResourceGuardEnum.java b/src/main/java/com/hideyoshi/auth/util/guard/UserResourceGuardEnum.java
similarity index 93%
rename from src/main/java/com/hideyoshi/backendportfolio/util/guard/UserResourceGuardEnum.java
rename to src/main/java/com/hideyoshi/auth/util/guard/UserResourceGuardEnum.java
index 68d1974..174827b 100644
--- a/src/main/java/com/hideyoshi/backendportfolio/util/guard/UserResourceGuardEnum.java
+++ b/src/main/java/com/hideyoshi/auth/util/guard/UserResourceGuardEnum.java
@@ -1,9 +1,9 @@
-package com.hideyoshi.backendportfolio.util.guard;
+package com.hideyoshi.auth.util.guard;
import com.fasterxml.jackson.databind.ObjectMapper;
-import com.hideyoshi.backendportfolio.base.user.entity.Role;
-import com.hideyoshi.backendportfolio.base.user.model.UserDTO;
-import com.hideyoshi.backendportfolio.base.user.service.UserService;
+import com.hideyoshi.auth.base.auth.entity.Role;
+import com.hideyoshi.auth.base.auth.model.UserDTO;
+import com.hideyoshi.auth.base.auth.service.UserService;
import lombok.Getter;
import org.springframework.security.core.authority.SimpleGrantedAuthority;
import org.springframework.security.core.context.SecurityContextHolder;
diff --git a/src/main/java/com/hideyoshi/backendportfolio/util/guard/UserResourceValidator.java b/src/main/java/com/hideyoshi/auth/util/guard/UserResourceValidator.java
similarity index 85%
rename from src/main/java/com/hideyoshi/backendportfolio/util/guard/UserResourceValidator.java
rename to src/main/java/com/hideyoshi/auth/util/guard/UserResourceValidator.java
index f76c33d..ca58496 100644
--- a/src/main/java/com/hideyoshi/backendportfolio/util/guard/UserResourceValidator.java
+++ b/src/main/java/com/hideyoshi/auth/util/guard/UserResourceValidator.java
@@ -1,6 +1,6 @@
-package com.hideyoshi.backendportfolio.util.guard;
+package com.hideyoshi.auth.util.guard;
-import com.hideyoshi.backendportfolio.base.user.model.UserDTO;
+import com.hideyoshi.auth.base.auth.model.UserDTO;
import org.springframework.security.core.context.SecurityContextHolder;
import javax.validation.ConstraintValidator;
diff --git a/src/main/java/com/hideyoshi/backendportfolio/util/handler/RestExceptionHandler.java b/src/main/java/com/hideyoshi/auth/util/handler/RestExceptionHandler.java
similarity index 97%
rename from src/main/java/com/hideyoshi/backendportfolio/util/handler/RestExceptionHandler.java
rename to src/main/java/com/hideyoshi/auth/util/handler/RestExceptionHandler.java
index 2b54adc..014932d 100644
--- a/src/main/java/com/hideyoshi/backendportfolio/util/handler/RestExceptionHandler.java
+++ b/src/main/java/com/hideyoshi/auth/util/handler/RestExceptionHandler.java
@@ -1,6 +1,6 @@
-package com.hideyoshi.backendportfolio.util.handler;
+package com.hideyoshi.auth.util.handler;
-import com.hideyoshi.backendportfolio.util.exception.*;
+import com.hideyoshi.auth.util.exception.*;
import lombok.extern.log4j.Log4j2;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
diff --git a/src/main/java/com/hideyoshi/backendportfolio/util/validator/email/unique/EmailUnique.java b/src/main/java/com/hideyoshi/auth/util/validator/email/unique/EmailUnique.java
similarity index 86%
rename from src/main/java/com/hideyoshi/backendportfolio/util/validator/email/unique/EmailUnique.java
rename to src/main/java/com/hideyoshi/auth/util/validator/email/unique/EmailUnique.java
index 869368f..3042e10 100644
--- a/src/main/java/com/hideyoshi/backendportfolio/util/validator/email/unique/EmailUnique.java
+++ b/src/main/java/com/hideyoshi/auth/util/validator/email/unique/EmailUnique.java
@@ -1,6 +1,6 @@
-package com.hideyoshi.backendportfolio.util.validator.email.unique;
+package com.hideyoshi.auth.util.validator.email.unique;
-import com.hideyoshi.backendportfolio.base.user.repo.UserRepository;
+import com.hideyoshi.auth.base.auth.repo.UserRepository;
import lombok.RequiredArgsConstructor;
import javax.validation.ConstraintValidator;
diff --git a/src/main/java/com/hideyoshi/backendportfolio/util/validator/email/unique/UniqueEmail.java b/src/main/java/com/hideyoshi/auth/util/validator/email/unique/UniqueEmail.java
similarity index 89%
rename from src/main/java/com/hideyoshi/backendportfolio/util/validator/email/unique/UniqueEmail.java
rename to src/main/java/com/hideyoshi/auth/util/validator/email/unique/UniqueEmail.java
index 9be9559..4517ccf 100644
--- a/src/main/java/com/hideyoshi/backendportfolio/util/validator/email/unique/UniqueEmail.java
+++ b/src/main/java/com/hideyoshi/auth/util/validator/email/unique/UniqueEmail.java
@@ -1,4 +1,4 @@
-package com.hideyoshi.backendportfolio.util.validator.email.unique;
+package com.hideyoshi.auth.util.validator.email.unique;
import javax.validation.Constraint;
import javax.validation.Payload;
diff --git a/src/main/java/com/hideyoshi/backendportfolio/util/validator/email/valid/EmailValidator.java b/src/main/java/com/hideyoshi/auth/util/validator/email/valid/EmailValidator.java
similarity index 93%
rename from src/main/java/com/hideyoshi/backendportfolio/util/validator/email/valid/EmailValidator.java
rename to src/main/java/com/hideyoshi/auth/util/validator/email/valid/EmailValidator.java
index 9907a84..c3fd26e 100644
--- a/src/main/java/com/hideyoshi/backendportfolio/util/validator/email/valid/EmailValidator.java
+++ b/src/main/java/com/hideyoshi/auth/util/validator/email/valid/EmailValidator.java
@@ -1,4 +1,4 @@
-package com.hideyoshi.backendportfolio.util.validator.email.valid;
+package com.hideyoshi.auth.util.validator.email.valid;
import lombok.RequiredArgsConstructor;
diff --git a/src/main/java/com/hideyoshi/backendportfolio/util/validator/email/valid/ValidEmail.java b/src/main/java/com/hideyoshi/auth/util/validator/email/valid/ValidEmail.java
similarity index 89%
rename from src/main/java/com/hideyoshi/backendportfolio/util/validator/email/valid/ValidEmail.java
rename to src/main/java/com/hideyoshi/auth/util/validator/email/valid/ValidEmail.java
index a68dbb3..639c2d2 100644
--- a/src/main/java/com/hideyoshi/backendportfolio/util/validator/email/valid/ValidEmail.java
+++ b/src/main/java/com/hideyoshi/auth/util/validator/email/valid/ValidEmail.java
@@ -1,4 +1,4 @@
-package com.hideyoshi.backendportfolio.util.validator.email.valid;
+package com.hideyoshi.auth.util.validator.email.valid;
import javax.validation.Constraint;
import javax.validation.Payload;
diff --git a/src/main/java/com/hideyoshi/backendportfolio/util/validator/password/PasswordValidator.java b/src/main/java/com/hideyoshi/auth/util/validator/password/PasswordValidator.java
similarity index 87%
rename from src/main/java/com/hideyoshi/backendportfolio/util/validator/password/PasswordValidator.java
rename to src/main/java/com/hideyoshi/auth/util/validator/password/PasswordValidator.java
index 4806060..e47beeb 100644
--- a/src/main/java/com/hideyoshi/backendportfolio/util/validator/password/PasswordValidator.java
+++ b/src/main/java/com/hideyoshi/auth/util/validator/password/PasswordValidator.java
@@ -1,6 +1,6 @@
-package com.hideyoshi.backendportfolio.util.validator.password;
+package com.hideyoshi.auth.util.validator.password;
-import com.hideyoshi.backendportfolio.base.user.entity.Provider;
+import com.hideyoshi.auth.base.auth.entity.Provider;
import lombok.RequiredArgsConstructor;
import javax.validation.ConstraintValidator;
diff --git a/src/main/java/com/hideyoshi/backendportfolio/util/validator/password/ValidPassword.java b/src/main/java/com/hideyoshi/auth/util/validator/password/ValidPassword.java
similarity index 85%
rename from src/main/java/com/hideyoshi/backendportfolio/util/validator/password/ValidPassword.java
rename to src/main/java/com/hideyoshi/auth/util/validator/password/ValidPassword.java
index 32e773c..87035f3 100644
--- a/src/main/java/com/hideyoshi/backendportfolio/util/validator/password/ValidPassword.java
+++ b/src/main/java/com/hideyoshi/auth/util/validator/password/ValidPassword.java
@@ -1,6 +1,6 @@
-package com.hideyoshi.backendportfolio.util.validator.password;
+package com.hideyoshi.auth.util.validator.password;
-import com.hideyoshi.backendportfolio.base.user.entity.Provider;
+import com.hideyoshi.auth.base.auth.entity.Provider;
import javax.validation.Constraint;
import javax.validation.Payload;
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
deleted file mode 100644
index 4155572..0000000
--- a/src/main/java/com/hideyoshi/backendportfolio/base/security/oauth/mapper/OAuthMap.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package com.hideyoshi.backendportfolio.base.security.oauth.mapper;
-
-import com.hideyoshi.backendportfolio.base.user.entity.Provider;
-
-public interface OAuthMap {
-
- String getPrincipal();
-
- String getProfilePicture();
-
- Provider getProvider();
-
-}
diff --git a/src/main/java/com/hideyoshi/backendportfolio/base/security/service/AuthService.java b/src/main/java/com/hideyoshi/backendportfolio/base/security/service/AuthService.java
deleted file mode 100644
index 81fc064..0000000
--- a/src/main/java/com/hideyoshi/backendportfolio/base/security/service/AuthService.java
+++ /dev/null
@@ -1,40 +0,0 @@
-package com.hideyoshi.backendportfolio.base.security.service;
-
-import com.auth0.jwt.algorithms.Algorithm;
-import com.hideyoshi.backendportfolio.base.security.model.AuthDTO;
-import com.hideyoshi.backendportfolio.base.user.model.TokenDTO;
-import com.hideyoshi.backendportfolio.base.user.model.UserDTO;
-import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
-import org.springframework.security.oauth2.core.user.OAuth2User;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import javax.validation.Valid;
-import java.io.IOException;
-import java.util.HashMap;
-
-public interface AuthService {
-
- TokenDTO generateAccessToken(@Valid UserDTO user, Algorithm algorithm, HttpServletRequest request);
-
- TokenDTO generateRefreshToken(@Valid UserDTO user, Algorithm algorithm, HttpServletRequest request);
-
- HashMap generateTokens(@Valid UserDTO user, Algorithm algorithm, HttpServletRequest request);
-
- UsernamePasswordAuthenticationToken verifyAccessToken(String authorizationHeader);
-
- AuthDTO refreshAccessToken(String refreshToken, HttpServletRequest request, HttpServletResponse response);
-
- AuthDTO signupUser(@Valid UserDTO user, HttpServletRequest request);
-
- AuthDTO generateUserWithTokens(UserDTO user, HttpServletRequest request);
-
- AuthDTO processOAuthPostLogin(@Valid UserDTO user, HttpServletRequest request);
-
- void loginUser(HttpServletRequest request, HttpServletResponse response, @Valid UserDTO user) throws IOException;
-
- void loginOAuthUser(HttpServletRequest request, HttpServletResponse response, OAuth2User user) throws IOException;
-
- UserDTO getLoggedUser();
-
-}
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
deleted file mode 100644
index ed7e81b..0000000
--- a/src/main/java/com/hideyoshi/backendportfolio/base/security/service/AuthServiceImpl.java
+++ /dev/null
@@ -1,290 +0,0 @@
-package com.hideyoshi.backendportfolio.base.security.service;
-
-import com.auth0.jwt.JWT;
-import com.auth0.jwt.JWTVerifier;
-import com.auth0.jwt.algorithms.Algorithm;
-import com.auth0.jwt.interfaces.DecodedJWT;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.hideyoshi.backendportfolio.base.security.model.AuthDTO;
-import com.hideyoshi.backendportfolio.base.security.oauth.mapper.OAuthMap;
-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;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Qualifier;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
-import org.springframework.security.core.GrantedAuthority;
-import org.springframework.security.core.authority.SimpleGrantedAuthority;
-import org.springframework.security.core.context.SecurityContextHolder;
-import org.springframework.security.oauth2.core.user.OAuth2User;
-import org.springframework.stereotype.Service;
-import org.springframework.web.servlet.HandlerExceptionResolver;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import javax.servlet.http.HttpSession;
-import javax.validation.Valid;
-import java.io.IOException;
-import java.util.*;
-import java.util.stream.Collectors;
-
-import static java.util.Arrays.stream;
-import static org.springframework.http.MediaType.APPLICATION_JSON_VALUE;
-
-@Log4j2
-@Service
-@RequiredArgsConstructor
-public class AuthServiceImpl implements AuthService {
-
-
- private static final String AUTHORIZATION_TYPE_STRING = "Bearer ";
- private final UserService userService;
- private final StorageService storageService;
- @Value("${com.hideyoshi.tokenSecret}")
- private String TOKEN_SECRET;
- @Value("${com.hideyoshi.accessTokenDuration}")
- private Integer ACCESS_TOKEN_DURATION;
- @Value("${com.hideyoshi.refreshTokenDuration}")
- private Integer REFRESH_TOKEN_DURATION;
- @Autowired
- @Qualifier("handlerExceptionResolver")
- private HandlerExceptionResolver resolver;
-
- @Override
- public TokenDTO generateAccessToken(@Valid UserDTO user, Algorithm algorithm, HttpServletRequest request) {
-
- Date expirationDate = new Date(System.currentTimeMillis() + ACCESS_TOKEN_DURATION);
-
- String accessToken = JWT.create()
- .withSubject(user.getUsername())
- .withExpiresAt(expirationDate)
- .withIssuer(request.getRequestURL().toString())
- .withClaim("roles", user.getAuthorities()
- .stream().map(GrantedAuthority::getAuthority)
- .collect(Collectors.toList()))
- .sign(algorithm);
-
- return new TokenDTO(accessToken, expirationDate);
-
- }
-
- @Override
- public TokenDTO generateRefreshToken(@Valid UserDTO user, Algorithm algorithm, HttpServletRequest request) {
-
- Date expirationDate = new Date(System.currentTimeMillis() + REFRESH_TOKEN_DURATION);
-
- String refreshToken = JWT.create()
- .withSubject(user.getUsername())
- .withExpiresAt(expirationDate)
- .withIssuer(request.getRequestURL().toString())
- .sign(algorithm);
-
- return new TokenDTO(refreshToken, expirationDate);
-
- }
-
- @Override
- public HashMap generateTokens(@Valid UserDTO user, Algorithm algorithm, HttpServletRequest request) {
-
- TokenDTO accessToken = generateAccessToken(user, algorithm, request);
- TokenDTO refreshToken = generateRefreshToken(user, algorithm, request);
-
- HashMap tokens = new HashMap<>();
- tokens.put("accessToken", accessToken);
- tokens.put("refreshToken", refreshToken);
-
- return tokens;
- }
-
- @Override
- public UsernamePasswordAuthenticationToken verifyAccessToken(String authorizationHeader) {
-
- if (!authorizationHeader.startsWith(AUTHORIZATION_TYPE_STRING)) {
- return null;
- }
-
- String authorizationToken = authorizationHeader.substring(AUTHORIZATION_TYPE_STRING.length());
- Algorithm algorithm = Algorithm.HMAC256(TOKEN_SECRET.getBytes());
-
- JWTVerifier verifier = JWT.require(algorithm).build();
- DecodedJWT decodedJWT = verifier.verify(authorizationToken);
-
- String username = decodedJWT.getSubject();
- String[] roles = decodedJWT.getClaim("roles").asArray(String.class);
-
- Collection authorities = new ArrayList<>();
- stream(roles).forEach(role -> {
- authorities.add(new SimpleGrantedAuthority(role));
- });
-
- return new UsernamePasswordAuthenticationToken(username, null, authorities);
- }
-
- @Override
- public AuthDTO generateUserWithTokens(UserDTO user, HttpServletRequest request) {
-
- Algorithm algorithm = Algorithm.HMAC256(TOKEN_SECRET.getBytes());
-
- HashMap tokens = this.generateTokens(user, algorithm, request);
-
- HttpSession httpSession = request.getSession();
- AuthDTO authObject = new AuthDTO(user, tokens.get("accessToken"), tokens.get("refreshToken"));
-
- httpSession.setAttribute("user", authObject);
-
- return authObject;
- }
-
- @Override
- public AuthDTO signupUser(@Valid UserDTO user, HttpServletRequest request) {
-
- user.setProvider(Provider.LOCAL);
-
- UserDTO authenticatedUser = this.userService.saveUser(user);
-
- var profilePicture = this.storageService.getFileUrl(authenticatedUser.getUsername(), "profile");
- profilePicture.ifPresent(
- storageServiceDownloadResponse -> authenticatedUser.setProfilePictureUrl(storageServiceDownloadResponse.getPresignedUrl())
- );
-
- return this.generateUserWithTokens(
- authenticatedUser,
- request
- );
-
- }
-
- @Override
- public void loginUser(HttpServletRequest request, HttpServletResponse response, @Valid UserDTO user) throws IOException {
- var profilePicture = this.storageService.getFileUrl(user.getUsername(), "profile");
- profilePicture.ifPresent(
- storageServiceDownloadResponse -> user.setProfilePictureUrl(storageServiceDownloadResponse.getPresignedUrl())
- );
-
- AuthDTO authObject = this.generateUserWithTokens(
- user,
- request
- );
-
- response.setContentType(APPLICATION_JSON_VALUE);
- new ObjectMapper()
- .writeValue(response.getOutputStream(), authObject);
- }
-
- @Override
- public AuthDTO refreshAccessToken(String refreshToken, HttpServletRequest request, HttpServletResponse response) {
-
- if (!Objects.nonNull(refreshToken)) {
- resolver.resolveException(
- request,
- response,
- null,
- new BadRequestException("Invalid Refresh Token. Please authenticate first.")
- );
- }
-
- Algorithm algorithm = Algorithm.HMAC256(TOKEN_SECRET.getBytes());
-
- JWTVerifier verifier = JWT.require(algorithm).build();
- DecodedJWT decodedJWT = verifier.verify(refreshToken);
-
- UserDTO user = this.userService.getUser(decodedJWT.getSubject());
-
- var profilePicture = this.storageService.getFileUrl(user.getUsername(), "profile");
- profilePicture.ifPresent(
- storageServiceDownloadResponse -> user.setProfilePictureUrl(storageServiceDownloadResponse.getPresignedUrl())
- );
-
- HttpSession httpSession = request.getSession();
- AuthDTO authenticatedUser = new AuthDTO(
- user,
- this.generateAccessToken(user, algorithm, request),
- new TokenDTO(
- refreshToken,
- decodedJWT.getExpiresAt()
- )
- );
- httpSession.setAttribute("user", authenticatedUser);
-
- return authenticatedUser;
-
- }
-
- @Override
- public AuthDTO processOAuthPostLogin(@Valid UserDTO user, HttpServletRequest request) {
-
- if (Objects.nonNull(user.getId())) {
- this.userService.alterUser(user.getId(), user);
- } else {
- this.userService.saveUser(user);
- }
-
- return this.generateUserWithTokens(user, request);
- }
-
- @Override
- public void loginOAuthUser(HttpServletRequest request,
- HttpServletResponse response,
- OAuth2User oauthUser) throws IOException {
-
- String clientId = this.getClientFromUrl(request.getRequestURL().toString());
-
- OAuthMap oauthMap = this.generateOAuthMap(clientId, oauthUser);
-
- AuthDTO authObject = this.processOAuthPostLogin(
- this.generateUserFromAuthUser(oauthMap, oauthUser),
- request
- );
-
- response.setContentType(APPLICATION_JSON_VALUE);
- new ObjectMapper()
- .writeValue(response.getOutputStream(), authObject);
- }
-
- @Override
- public UserDTO getLoggedUser() {
- String username = (String) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
- return userService.getUser(username);
- }
-
- private String getClientFromUrl(String url) {
- String[] urlPartition = url.split("/");
- return urlPartition[urlPartition.length - 1];
- }
-
- private OAuthMap generateOAuthMap(String clientId, OAuth2User oauthUser) {
- try {
- return (OAuthMap) OAuthMapper.byValue(clientId).getMap()
- .getDeclaredConstructor(OAuth2User.class).newInstance(oauthUser);
- } catch (Exception e) {
- throw new BadRequestException("Unsupported OAuth Client.");
- }
- }
-
- private UserDTO generateUserFromAuthUser(OAuthMap oauthMap, OAuth2User oauthUser) {
- UserDTO user = null;
- try {
- user = this.userService.getUser(oauthMap.getPrincipal());
- } catch (BadRequestException e) {
- user = UserDTO.builder()
- .name(oauthUser.getAttribute("name"))
- .username(oauthMap.getPrincipal())
- .email(oauthUser.getAttribute("email"))
- .roles(Arrays.asList(Role.USER))
- .provider(oauthMap.getProvider())
- .build();
- }
- user.setProfilePictureUrl(oauthMap.getProfilePicture());
-
- return user;
- }
-
-}
diff --git a/src/main/java/com/hideyoshi/backendportfolio/base/user/service/UserService.java b/src/main/java/com/hideyoshi/backendportfolio/base/user/service/UserService.java
deleted file mode 100644
index 5405ed5..0000000
--- a/src/main/java/com/hideyoshi/backendportfolio/base/user/service/UserService.java
+++ /dev/null
@@ -1,26 +0,0 @@
-package com.hideyoshi.backendportfolio.base.user.service;
-
-import com.hideyoshi.backendportfolio.base.user.model.UserDTO;
-import org.springframework.security.core.userdetails.UserDetailsService;
-
-import javax.validation.Valid;
-import java.util.List;
-
-public interface UserService extends UserDetailsService {
-
- UserDTO saveUser(@Valid UserDTO user);
-
- void alterUser(Long id, @Valid UserDTO user);
-
- void deleteUser(Long id);
-
- void addRoleToUser(Long id, String roleName);
-
- void removeRoleFromUser(Long id, String roleName);
-
- UserDTO getUser(Long id);
-
- UserDTO getUser(String username);
-
- List getUsers();
-}
diff --git a/src/test/java/com/hideyoshi/backendportfolio/BackendPortfolioApplicationTests.java b/src/test/java/com/hideyoshi/auth/BackendPortfolioApplicationTests.java
similarity index 83%
rename from src/test/java/com/hideyoshi/backendportfolio/BackendPortfolioApplicationTests.java
rename to src/test/java/com/hideyoshi/auth/BackendPortfolioApplicationTests.java
index dc359e6..f064a6f 100644
--- a/src/test/java/com/hideyoshi/backendportfolio/BackendPortfolioApplicationTests.java
+++ b/src/test/java/com/hideyoshi/auth/BackendPortfolioApplicationTests.java
@@ -1,4 +1,4 @@
-package com.hideyoshi.backendportfolio;
+package com.hideyoshi.auth;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest;
diff --git a/src/test/java/com/hideyoshi/backendportfolio/base/user/repo/UserRepositoryTest.java b/src/test/java/com/hideyoshi/auth/base/user/repo/UserRepositoryTest.java
similarity index 85%
rename from src/test/java/com/hideyoshi/backendportfolio/base/user/repo/UserRepositoryTest.java
rename to src/test/java/com/hideyoshi/auth/base/user/repo/UserRepositoryTest.java
index d567c6b..f2ec24d 100644
--- a/src/test/java/com/hideyoshi/backendportfolio/base/user/repo/UserRepositoryTest.java
+++ b/src/test/java/com/hideyoshi/auth/base/user/repo/UserRepositoryTest.java
@@ -1,9 +1,10 @@
-package com.hideyoshi.backendportfolio.base.user.repo;
+package com.hideyoshi.auth.base.user.repo;
-import com.hideyoshi.backendportfolio.base.user.entity.Provider;
-import com.hideyoshi.backendportfolio.base.user.entity.Role;
-import com.hideyoshi.backendportfolio.base.user.entity.User;
-import com.hideyoshi.backendportfolio.base.user.model.UserDTO;
+import com.hideyoshi.auth.base.auth.repo.UserRepository;
+import com.hideyoshi.auth.base.auth.entity.Provider;
+import com.hideyoshi.auth.base.auth.entity.Role;
+import com.hideyoshi.auth.base.auth.entity.User;
+import com.hideyoshi.auth.base.auth.model.UserDTO;
import lombok.extern.log4j.Log4j2;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
diff --git a/src/test/java/com/hideyoshi/backendportfolio/base/user/service/UserServiceImplTest.java b/src/test/java/com/hideyoshi/auth/base/user/service/UserServiceTest.java
similarity index 96%
rename from src/test/java/com/hideyoshi/backendportfolio/base/user/service/UserServiceImplTest.java
rename to src/test/java/com/hideyoshi/auth/base/user/service/UserServiceTest.java
index 0813842..56bb27b 100644
--- a/src/test/java/com/hideyoshi/backendportfolio/base/user/service/UserServiceImplTest.java
+++ b/src/test/java/com/hideyoshi/auth/base/user/service/UserServiceTest.java
@@ -1,11 +1,12 @@
-package com.hideyoshi.backendportfolio.base.user.service;
+package com.hideyoshi.auth.base.user.service;
-import com.hideyoshi.backendportfolio.base.user.entity.Provider;
-import com.hideyoshi.backendportfolio.base.user.entity.Role;
-import com.hideyoshi.backendportfolio.base.user.entity.User;
-import com.hideyoshi.backendportfolio.base.user.model.UserDTO;
-import com.hideyoshi.backendportfolio.base.user.repo.UserRepository;
-import com.hideyoshi.backendportfolio.util.exception.BadRequestException;
+import com.hideyoshi.auth.base.auth.service.UserService;
+import com.hideyoshi.auth.base.auth.entity.Provider;
+import com.hideyoshi.auth.base.auth.entity.Role;
+import com.hideyoshi.auth.base.auth.entity.User;
+import com.hideyoshi.auth.base.auth.model.UserDTO;
+import com.hideyoshi.auth.base.auth.repo.UserRepository;
+import com.hideyoshi.auth.util.exception.BadRequestException;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
@@ -31,9 +32,9 @@ import static org.mockito.Mockito.verify;
@DataJpaTest
@ExtendWith(MockitoExtension.class)
@DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_EACH_TEST_METHOD)
-class UserServiceImplTest {
+class UserServiceTest {
- private UserServiceImpl underTest;
+ private UserService underTest;
@Mock
private UserRepository userRepository;
@@ -42,7 +43,7 @@ class UserServiceImplTest {
@BeforeEach
void setUp() {
PasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
- this.underTest = new UserServiceImpl(userRepository, passwordEncoder);
+ this.underTest = new UserService(userRepository, passwordEncoder);
}
@Test
diff --git a/src/test/java/com/hideyoshi/backendportfolio/microservice/storageService/service/StorageServiceTest.java b/src/test/java/com/hideyoshi/auth/microservice/storageService/service/StorageServiceTest.java
similarity index 92%
rename from src/test/java/com/hideyoshi/backendportfolio/microservice/storageService/service/StorageServiceTest.java
rename to src/test/java/com/hideyoshi/auth/microservice/storageService/service/StorageServiceTest.java
index 9044920..ba63f60 100644
--- a/src/test/java/com/hideyoshi/backendportfolio/microservice/storageService/service/StorageServiceTest.java
+++ b/src/test/java/com/hideyoshi/auth/microservice/storageService/service/StorageServiceTest.java
@@ -1,10 +1,10 @@
-package com.hideyoshi.backendportfolio.microservice.storageService.service;
+package com.hideyoshi.auth.microservice.storageService.service;
import com.fasterxml.jackson.databind.ObjectMapper;
-import com.hideyoshi.backendportfolio.microservice.storageService.config.StorageServiceConfig;
-import com.hideyoshi.backendportfolio.microservice.storageService.enums.FileTypeEnum;
-import com.hideyoshi.backendportfolio.microservice.storageService.model.StorageServiceDownloadResponse;
-import com.hideyoshi.backendportfolio.microservice.storageService.model.StorageServiceUploadResponse;
+import com.hideyoshi.auth.microservice.storageService.config.StorageServiceConfig;
+import com.hideyoshi.auth.microservice.storageService.enums.FileTypeEnum;
+import com.hideyoshi.auth.microservice.storageService.model.StorageServiceDownloadResponse;
+import com.hideyoshi.auth.microservice.storageService.model.StorageServiceUploadResponse;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;