diff --git a/.github/workflows/docker-image.yml b/.github/workflows/docker-image.yml index 8783930..fb79703 100644 --- a/.github/workflows/docker-image.yml +++ b/.github/workflows/docker-image.yml @@ -36,7 +36,7 @@ jobs: # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it - name: Runs Infra-Hideyoshi.com Deployment Dispatcher run: | - curl -X POST https://api.github.com/repos/HideyoshiNakazone/infra-hideyoshi.com/dispatches \ + curl -X POST https://api.github.com/repos/HideyoshiSolutions/infra-hideyoshi.com/dispatches \ -H 'Accept: application/vnd.github.everest-preview+json' \ -u ${{ secrets.ACTIONS_KEY }} \ --data '{"event_type": "refresh-deployments", "client_payload": { "deployments": "backend-deployment" }}' \ No newline at end of file diff --git a/src/main/java/com/hideyoshi/backendportfolio/BackendPortfolioApplication.java b/src/main/java/com/hideyoshi/backendportfolio/BackendPortfolioApplication.java index 4dce649..e0737e6 100644 --- a/src/main/java/com/hideyoshi/backendportfolio/BackendPortfolioApplication.java +++ b/src/main/java/com/hideyoshi/backendportfolio/BackendPortfolioApplication.java @@ -9,13 +9,13 @@ @SpringBootApplication public class BackendPortfolioApplication { - public static void main(String[] args) { - SpringApplication.run(BackendPortfolioApplication.class, args); - } + public static void main(String[] args) { + SpringApplication.run(BackendPortfolioApplication.class, args); + } - @Bean - PasswordEncoder passwordEncoder() { - return new BCryptPasswordEncoder(); - } + @Bean + PasswordEncoder passwordEncoder() { + return new BCryptPasswordEncoder(); + } } diff --git a/src/main/java/com/hideyoshi/backendportfolio/base/config/CorsConfig.java b/src/main/java/com/hideyoshi/backendportfolio/base/config/CorsConfig.java index 8a1ccff..3a3e2a5 100644 --- a/src/main/java/com/hideyoshi/backendportfolio/base/config/CorsConfig.java +++ b/src/main/java/com/hideyoshi/backendportfolio/base/config/CorsConfig.java @@ -1,6 +1,5 @@ package com.hideyoshi.backendportfolio.base.config; -import antlr.actions.python.CodeLexer; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; diff --git a/src/main/java/com/hideyoshi/backendportfolio/base/config/DefaultUserConfig.java b/src/main/java/com/hideyoshi/backendportfolio/base/config/DefaultUserConfig.java index 6c1b2a7..8ed808f 100644 --- a/src/main/java/com/hideyoshi/backendportfolio/base/config/DefaultUserConfig.java +++ b/src/main/java/com/hideyoshi/backendportfolio/base/config/DefaultUserConfig.java @@ -31,13 +31,13 @@ public class DefaultUserConfig { CommandLineRunner run(UserService userService, UserRepository userRepo) { return args -> { UserDTO defaultUser = UserDTO.builder() - .name(ADMIN_NAME) - .email(ADMIN_EMAIL) - .username(ADMIN_USERNAME) - .password(ADMIN_PASSWORD) - .provider(Provider.LOCAL) - .roles(new ArrayList<>()) - .build(); + .name(ADMIN_NAME) + .email(ADMIN_EMAIL) + .username(ADMIN_USERNAME) + .password(ADMIN_PASSWORD) + .provider(Provider.LOCAL) + .roles(new ArrayList<>()) + .build(); if (!userRepo.findByUsername(defaultUser.getUsername()).isPresent()) { defaultUser = userService.saveUser(defaultUser); diff --git a/src/main/java/com/hideyoshi/backendportfolio/base/config/RestAuthenticationEntryPointConfig.java b/src/main/java/com/hideyoshi/backendportfolio/base/config/RestAuthenticationEntryPointConfig.java index 0cbf0bf..81ac67e 100644 --- a/src/main/java/com/hideyoshi/backendportfolio/base/config/RestAuthenticationEntryPointConfig.java +++ b/src/main/java/com/hideyoshi/backendportfolio/base/config/RestAuthenticationEntryPointConfig.java @@ -1,7 +1,6 @@ package com.hideyoshi.backendportfolio.base.config; import com.hideyoshi.backendportfolio.util.exception.AuthenticationInvalidException; -import lombok.RequiredArgsConstructor; import lombok.extern.log4j.Log4j2; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; @@ -15,7 +14,7 @@ @Log4j2 @Component("restAuthenticationEntryPoint") -public class RestAuthenticationEntryPointConfig implements AuthenticationEntryPoint{ +public class RestAuthenticationEntryPointConfig implements AuthenticationEntryPoint { @Autowired @Qualifier("handlerExceptionResolver") diff --git a/src/main/java/com/hideyoshi/backendportfolio/base/security/config/SecurityConfig.java b/src/main/java/com/hideyoshi/backendportfolio/base/security/config/SecurityConfig.java index 655d51f..6167780 100644 --- a/src/main/java/com/hideyoshi/backendportfolio/base/security/config/SecurityConfig.java +++ b/src/main/java/com/hideyoshi/backendportfolio/base/security/config/SecurityConfig.java @@ -8,10 +8,8 @@ import com.hideyoshi.backendportfolio.util.exception.AuthenticationInvalidException; import lombok.RequiredArgsConstructor; import lombok.extern.log4j.Log4j2; -import org.springframework.boot.web.servlet.FilterRegistrationBean; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; -import org.springframework.core.Ordered; import org.springframework.security.authentication.AuthenticationManager; import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; import org.springframework.security.config.annotation.web.builders.HttpSecurity; @@ -24,7 +22,6 @@ import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.security.oauth2.core.user.OAuth2User; import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter; -import org.springframework.web.filter.ForwardedHeaderFilter; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -69,31 +66,31 @@ private void addSecurityToHttp(HttpSecurity http) throws Exception { customAuthenticationFilter.setFilterProcessesUrl("/user/login"); http.authorizeRequests() - .antMatchers("/session/**").permitAll() - .and().authorizeRequests().antMatchers("/user/signup").permitAll() - .and().authorizeRequests().antMatchers("/user/oauth/**").permitAll() - .and().authorizeRequests().antMatchers("/user/login/**").permitAll() - .and().authorizeRequests().antMatchers("/**").hasAnyAuthority("ROLE_USER", "ROLE_ADMIN") + .antMatchers("/session/**").permitAll() + .and().authorizeRequests().antMatchers("/user/signup").permitAll() + .and().authorizeRequests().antMatchers("/user/oauth/**").permitAll() + .and().authorizeRequests().antMatchers("/user/login/**").permitAll() + .and().authorizeRequests().antMatchers("/**").hasAnyAuthority("ROLE_USER", "ROLE_ADMIN") - .and().sessionManagement().sessionCreationPolicy(SessionCreationPolicy.IF_REQUIRED) - .and().addFilter(customAuthenticationFilter) + .and().sessionManagement().sessionCreationPolicy(SessionCreationPolicy.IF_REQUIRED) + .and().addFilter(customAuthenticationFilter) - .addFilterBefore(new CustomAuthorizationFilter(this.authService), UsernamePasswordAuthenticationFilter.class); + .addFilterBefore(new CustomAuthorizationFilter(this.authService), UsernamePasswordAuthenticationFilter.class); } private void addOAuthSecurityToHttp(HttpSecurity http) throws Exception { http.oauth2Login() - .authorizationEndpoint() - .authorizationRequestRepository(this.oAuthRequestRepository) - .and().successHandler(this::successHandler) - .failureHandler(this::failureHandler); + .authorizationEndpoint() + .authorizationRequestRepository(this.oAuthRequestRepository) + .and().successHandler(this::successHandler) + .failureHandler(this::failureHandler); } private void successHandler(HttpServletRequest request, HttpServletResponse response, - Authentication authentication ) throws IOException { + Authentication authentication) throws IOException { OAuth2User oauthUser = (OAuth2User) authentication.getPrincipal(); diff --git a/src/main/java/com/hideyoshi/backendportfolio/base/security/filter/CustomAuthenticationFilter.java b/src/main/java/com/hideyoshi/backendportfolio/base/security/filter/CustomAuthenticationFilter.java index 2beac74..878ad83 100644 --- a/src/main/java/com/hideyoshi/backendportfolio/base/security/filter/CustomAuthenticationFilter.java +++ b/src/main/java/com/hideyoshi/backendportfolio/base/security/filter/CustomAuthenticationFilter.java @@ -1,13 +1,9 @@ package com.hideyoshi.backendportfolio.base.security.filter; -import com.auth0.jwt.algorithms.Algorithm; -import com.fasterxml.jackson.databind.ObjectMapper; import com.hideyoshi.backendportfolio.base.config.RestAuthenticationEntryPointConfig; 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 lombok.extern.log4j.Log4j2; -import org.springframework.beans.factory.annotation.Value; import org.springframework.security.authentication.AuthenticationManager; import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; import org.springframework.security.core.Authentication; @@ -17,11 +13,7 @@ import javax.servlet.FilterChain; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import javax.servlet.http.HttpSession; import java.io.IOException; -import java.util.HashMap; - -import static org.springframework.http.MediaType.APPLICATION_JSON_VALUE; @Log4j2 public class CustomAuthenticationFilter extends UsernamePasswordAuthenticationFilter { @@ -65,5 +57,5 @@ protected void successfulAuthentication(HttpServletRequest request, HttpServletR ); } - + } diff --git a/src/main/java/com/hideyoshi/backendportfolio/base/security/filter/CustomAuthorizationFilter.java b/src/main/java/com/hideyoshi/backendportfolio/base/security/filter/CustomAuthorizationFilter.java index 1bb8d00..b658dcc 100644 --- a/src/main/java/com/hideyoshi/backendportfolio/base/security/filter/CustomAuthorizationFilter.java +++ b/src/main/java/com/hideyoshi/backendportfolio/base/security/filter/CustomAuthorizationFilter.java @@ -19,7 +19,13 @@ public class CustomAuthorizationFilter extends OncePerRequestFilter { - public static String AUTHORIZATION_TYPE_STRING = "Bearer "; + private static final List notProtectedPaths = Arrays.asList( + "/user/login", + "/user/signup", + "/user/login/refresh" + ); + + private static final String AUTHORIZATION_TYPE_STRING = "Bearer "; private final AuthService authService; @@ -62,11 +68,6 @@ protected void doFilterInternal(HttpServletRequest request, HttpServletResponse } private Boolean isPathNotProtected(String path) { - - List notProtectedPaths = Arrays.asList( - "/user/login" - ); - return notProtectedPaths.contains(path); } diff --git a/src/main/java/com/hideyoshi/backendportfolio/base/security/interceptor/ConfigInterceptor.java b/src/main/java/com/hideyoshi/backendportfolio/base/security/interceptor/ConfigInterceptor.java index d10783d..7188701 100644 --- a/src/main/java/com/hideyoshi/backendportfolio/base/security/interceptor/ConfigInterceptor.java +++ b/src/main/java/com/hideyoshi/backendportfolio/base/security/interceptor/ConfigInterceptor.java @@ -7,7 +7,7 @@ @Component @RequiredArgsConstructor -public class ConfigInterceptor implements WebMvcConfigurer { +public class ConfigInterceptor implements WebMvcConfigurer { private final UserResourceAccessInterceptor userResourceAccessInterceptor; diff --git a/src/main/java/com/hideyoshi/backendportfolio/base/security/interceptor/UserResourceAccessInterceptor.java b/src/main/java/com/hideyoshi/backendportfolio/base/security/interceptor/UserResourceAccessInterceptor.java index b4a3cbd..00dfde7 100644 --- a/src/main/java/com/hideyoshi/backendportfolio/base/security/interceptor/UserResourceAccessInterceptor.java +++ b/src/main/java/com/hideyoshi/backendportfolio/base/security/interceptor/UserResourceAccessInterceptor.java @@ -29,7 +29,7 @@ public boolean preHandle(final HttpServletRequest request, final HttpServletResp return true; } - final UserResourceGuard annotation = ((HandlerMethod)handler) + final UserResourceGuard annotation = ((HandlerMethod) handler) .getMethodAnnotation(UserResourceGuard.class); if (Objects.nonNull(annotation)) { diff --git a/src/main/java/com/hideyoshi/backendportfolio/base/security/model/AuthDTO.java b/src/main/java/com/hideyoshi/backendportfolio/base/security/model/AuthDTO.java index 710ae06..be9baed 100644 --- a/src/main/java/com/hideyoshi/backendportfolio/base/security/model/AuthDTO.java +++ b/src/main/java/com/hideyoshi/backendportfolio/base/security/model/AuthDTO.java @@ -10,7 +10,6 @@ import lombok.Builder; import lombok.Data; -import javax.validation.constraints.Size; import java.io.Serializable; import java.util.List; diff --git a/src/main/java/com/hideyoshi/backendportfolio/base/security/oauth/mapper/GithubOAuthMap.java b/src/main/java/com/hideyoshi/backendportfolio/base/security/oauth/mapper/GithubOAuthMap.java index e83095a..8e53d2c 100644 --- a/src/main/java/com/hideyoshi/backendportfolio/base/security/oauth/mapper/GithubOAuthMap.java +++ b/src/main/java/com/hideyoshi/backendportfolio/base/security/oauth/mapper/GithubOAuthMap.java @@ -2,7 +2,6 @@ import com.hideyoshi.backendportfolio.base.user.entity.Provider; import lombok.AllArgsConstructor; -import lombok.RequiredArgsConstructor; import org.springframework.security.oauth2.core.user.OAuth2User; @AllArgsConstructor diff --git a/src/main/java/com/hideyoshi/backendportfolio/base/security/oauth/mapper/GoogleOAuthMap.java b/src/main/java/com/hideyoshi/backendportfolio/base/security/oauth/mapper/GoogleOAuthMap.java index 5f90fdb..a12904c 100644 --- a/src/main/java/com/hideyoshi/backendportfolio/base/security/oauth/mapper/GoogleOAuthMap.java +++ b/src/main/java/com/hideyoshi/backendportfolio/base/security/oauth/mapper/GoogleOAuthMap.java @@ -2,7 +2,6 @@ import com.hideyoshi.backendportfolio.base.user.entity.Provider; import lombok.AllArgsConstructor; -import lombok.RequiredArgsConstructor; import org.springframework.security.oauth2.core.user.OAuth2User; @AllArgsConstructor diff --git a/src/main/java/com/hideyoshi/backendportfolio/base/security/oauth/mapper/OAuthMap.java b/src/main/java/com/hideyoshi/backendportfolio/base/security/oauth/mapper/OAuthMap.java index 9a770b6..4155572 100644 --- a/src/main/java/com/hideyoshi/backendportfolio/base/security/oauth/mapper/OAuthMap.java +++ b/src/main/java/com/hideyoshi/backendportfolio/base/security/oauth/mapper/OAuthMap.java @@ -1,7 +1,6 @@ package com.hideyoshi.backendportfolio.base.security.oauth.mapper; import com.hideyoshi.backendportfolio.base.user.entity.Provider; -import org.springframework.security.oauth2.core.user.OAuth2User; public interface OAuthMap { diff --git a/src/main/java/com/hideyoshi/backendportfolio/base/security/oauth/mapper/OAuthMapper.java b/src/main/java/com/hideyoshi/backendportfolio/base/security/oauth/mapper/OAuthMapper.java index 7a0db8d..b4b73b8 100644 --- a/src/main/java/com/hideyoshi/backendportfolio/base/security/oauth/mapper/OAuthMapper.java +++ b/src/main/java/com/hideyoshi/backendportfolio/base/security/oauth/mapper/OAuthMapper.java @@ -19,10 +19,6 @@ private OAuthMapper(Class oAuthMap, Provider provider) { this.provider = provider; } - public Class getMap() { - return oAuthMap; - } - public static OAuthMapper byValue(String name) { for (OAuthMapper e : values()) { if (e.getProvider().getName().equals(name)) { @@ -32,4 +28,8 @@ public static OAuthMapper byValue(String name) { throw new IllegalArgumentException("Argument not valid."); } + public Class getMap() { + return oAuthMap; + } + } diff --git a/src/main/java/com/hideyoshi/backendportfolio/base/security/oauth/repo/OAuthRequestRepository.java b/src/main/java/com/hideyoshi/backendportfolio/base/security/oauth/repo/OAuthRequestRepository.java index 233eda9..b49a359 100644 --- a/src/main/java/com/hideyoshi/backendportfolio/base/security/oauth/repo/OAuthRequestRepository.java +++ b/src/main/java/com/hideyoshi/backendportfolio/base/security/oauth/repo/OAuthRequestRepository.java @@ -29,8 +29,8 @@ public void saveAuthorizationRequest(OAuth2AuthorizationRequest authorizationReq String state = authorizationRequest.getState(); request.getSession().setAttribute( - String.format("state_%s", state), - authorizationRequest + String.format("state_%s", state), + authorizationRequest ); } 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 index 4f11ecb..81fc064 100644 --- a/src/main/java/com/hideyoshi/backendportfolio/base/security/service/AuthService.java +++ b/src/main/java/com/hideyoshi/backendportfolio/base/security/service/AuthService.java @@ -19,7 +19,7 @@ public interface AuthService { TokenDTO generateRefreshToken(@Valid UserDTO user, Algorithm algorithm, HttpServletRequest request); - HashMap generateTokens(@Valid UserDTO user, Algorithm algorithm, HttpServletRequest request); + HashMap generateTokens(@Valid UserDTO user, Algorithm algorithm, HttpServletRequest request); UsernamePasswordAuthenticationToken verifyAccessToken(String authorizationHeader); diff --git a/src/main/java/com/hideyoshi/backendportfolio/base/security/service/AuthServiceImpl.java b/src/main/java/com/hideyoshi/backendportfolio/base/security/service/AuthServiceImpl.java index 101fc74..ed7e81b 100644 --- a/src/main/java/com/hideyoshi/backendportfolio/base/security/service/AuthServiceImpl.java +++ b/src/main/java/com/hideyoshi/backendportfolio/base/security/service/AuthServiceImpl.java @@ -45,21 +45,15 @@ 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; - - private static final String AUTHORIZATION_TYPE_STRING = "Bearer "; - - private final UserService userService; - - private final StorageService storageService; - @Autowired @Qualifier("handlerExceptionResolver") private HandlerExceptionResolver resolver; diff --git a/src/main/java/com/hideyoshi/backendportfolio/base/session/api/SessionController.java b/src/main/java/com/hideyoshi/backendportfolio/base/session/api/SessionController.java index f856a80..2c2f0b1 100644 --- a/src/main/java/com/hideyoshi/backendportfolio/base/session/api/SessionController.java +++ b/src/main/java/com/hideyoshi/backendportfolio/base/session/api/SessionController.java @@ -2,12 +2,14 @@ import com.hideyoshi.backendportfolio.base.security.model.AuthDTO; import com.hideyoshi.backendportfolio.base.session.service.SessionManagerService; -import com.hideyoshi.backendportfolio.base.user.model.UserDTO; import lombok.RequiredArgsConstructor; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.*; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; import javax.servlet.http.HttpSession; @@ -24,7 +26,7 @@ public ResponseEntity validateCurrentSession(HttpSession session) { return ResponseEntity.ok(this.sessionManagerService.validateSession(session)); } - @DeleteMapping(path="/destroy") + @DeleteMapping(path = "/destroy") public ResponseEntity destroyCurrentSession(HttpSession session) { this.sessionManagerService.destroySession(session); return new ResponseEntity<>(HttpStatus.NO_CONTENT); diff --git a/src/main/java/com/hideyoshi/backendportfolio/base/session/service/SessionManagerServiceImpl.java b/src/main/java/com/hideyoshi/backendportfolio/base/session/service/SessionManagerServiceImpl.java index c21ee03..f2e25ab 100644 --- a/src/main/java/com/hideyoshi/backendportfolio/base/session/service/SessionManagerServiceImpl.java +++ b/src/main/java/com/hideyoshi/backendportfolio/base/session/service/SessionManagerServiceImpl.java @@ -1,7 +1,6 @@ package com.hideyoshi.backendportfolio.base.session.service; import com.hideyoshi.backendportfolio.base.security.model.AuthDTO; -import com.hideyoshi.backendportfolio.base.user.service.UserService; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; diff --git a/src/main/java/com/hideyoshi/backendportfolio/base/user/entity/Provider.java b/src/main/java/com/hideyoshi/backendportfolio/base/user/entity/Provider.java index 25db4a3..6819ce7 100644 --- a/src/main/java/com/hideyoshi/backendportfolio/base/user/entity/Provider.java +++ b/src/main/java/com/hideyoshi/backendportfolio/base/user/entity/Provider.java @@ -14,10 +14,6 @@ public enum Provider { this.name = name; } - public String getName() { - return name; - } - public static Provider byValue(String name) { for (Provider p : values()) { if (p.getName().equals(name)) { @@ -27,4 +23,8 @@ public static Provider byValue(String name) { 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/backendportfolio/base/user/entity/Role.java index a0bd32f..23e970d 100644 --- a/src/main/java/com/hideyoshi/backendportfolio/base/user/entity/Role.java +++ b/src/main/java/com/hideyoshi/backendportfolio/base/user/entity/Role.java @@ -13,10 +13,6 @@ public enum Role { this.description = description; } - public String getDescription() { - return this.description; - } - public static Role byValue(String description) { for (Role r : values()) { if (r.getDescription().equals(description)) { @@ -26,4 +22,8 @@ public static Role byValue(String description) { throw new IllegalArgumentException("Argument not valid."); } + public String getDescription() { + return this.description; + } + } \ No newline at end of file diff --git a/src/main/java/com/hideyoshi/backendportfolio/base/user/entity/User.java b/src/main/java/com/hideyoshi/backendportfolio/base/user/entity/User.java index a01d52f..3aae63c 100644 --- a/src/main/java/com/hideyoshi/backendportfolio/base/user/entity/User.java +++ b/src/main/java/com/hideyoshi/backendportfolio/base/user/entity/User.java @@ -25,30 +25,30 @@ public class User { private Long id; @Column( - name = "name", - nullable = false + name = "name", + nullable = false ) private String name; @Column( - name = "email", - unique = true, - nullable = false + name = "email", + unique = true, + nullable = false ) private String email; @Column( - name = "username", - unique = true, - nullable = false + name = "username", + unique = true, + nullable = false ) private String username; @Column( - name = "password", - nullable = false + name = "password", + nullable = false ) private String password; @@ -59,17 +59,11 @@ public class User { private String provider; @Column( - name = "roles", - nullable = false + name = "roles", + nullable = false ) private String roles; - public void setRoles(List roles) { - this.roles = roles.stream() - .map(role -> role.getDescription()) - .collect(Collectors.joining("&")); - } - public List getRoles() { List roles = new ArrayList<>(); if (Objects.nonNull(this.roles) && !this.roles.isEmpty()) { @@ -80,4 +74,10 @@ public List getRoles() { return roles; } + public void setRoles(List roles) { + this.roles = roles.stream() + .map(role -> role.getDescription()) + .collect(Collectors.joining("&")); + } + } diff --git a/src/main/java/com/hideyoshi/backendportfolio/base/user/model/TokenDTO.java b/src/main/java/com/hideyoshi/backendportfolio/base/user/model/TokenDTO.java index e290f56..0a033eb 100644 --- a/src/main/java/com/hideyoshi/backendportfolio/base/user/model/TokenDTO.java +++ b/src/main/java/com/hideyoshi/backendportfolio/base/user/model/TokenDTO.java @@ -3,7 +3,9 @@ import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonInclude; -import lombok.*; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; import javax.validation.constraints.NotNull; import java.io.Serializable; @@ -19,7 +21,7 @@ public class TokenDTO implements Serializable { @NotNull(message = "Invalid AccessToken. Please Authenticate first.") private String token; - @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Date expirationDate; } diff --git a/src/main/java/com/hideyoshi/backendportfolio/base/user/model/UserDTO.java b/src/main/java/com/hideyoshi/backendportfolio/base/user/model/UserDTO.java index 9e4ce86..a1126fa 100644 --- a/src/main/java/com/hideyoshi/backendportfolio/base/user/model/UserDTO.java +++ b/src/main/java/com/hideyoshi/backendportfolio/base/user/model/UserDTO.java @@ -50,7 +50,7 @@ public class UserDTO implements UserDetails { @ValidPassword private String password; - @Size(min=1) + @Size(min = 1) private List roles; private String profilePictureUrl; diff --git a/src/main/java/com/hideyoshi/backendportfolio/base/user/repo/UserRepository.java b/src/main/java/com/hideyoshi/backendportfolio/base/user/repo/UserRepository.java index 455f1bb..e771b17 100644 --- a/src/main/java/com/hideyoshi/backendportfolio/base/user/repo/UserRepository.java +++ b/src/main/java/com/hideyoshi/backendportfolio/base/user/repo/UserRepository.java @@ -9,5 +9,6 @@ @Repository public interface UserRepository extends JpaRepository { Optional findByUsername(String username); + Optional findByEmail(String email); } diff --git a/src/main/java/com/hideyoshi/backendportfolio/base/user/service/UserServiceImpl.java b/src/main/java/com/hideyoshi/backendportfolio/base/user/service/UserServiceImpl.java index 925fb3a..16a7746 100644 --- a/src/main/java/com/hideyoshi/backendportfolio/base/user/service/UserServiceImpl.java +++ b/src/main/java/com/hideyoshi/backendportfolio/base/user/service/UserServiceImpl.java @@ -31,7 +31,7 @@ public class UserServiceImpl implements UserService { @Override public UserDTO saveUser(@Valid UserDTO user) { - this.userRepo.findByUsername(user.getUsername()).ifPresent( userOnDB -> { + this.userRepo.findByUsername(user.getUsername()).ifPresent(userOnDB -> { throw new BadRequestException(String.format("User %s already exists. Try another UserName.", userOnDB.getUsername())); }); @@ -48,7 +48,7 @@ public UserDTO saveUser(@Valid UserDTO user) { @Override public void alterUser(Long id, @Valid UserDTO user) { - this.userRepo.findById(id).ifPresentOrElse( userOnDB -> { + this.userRepo.findById(id).ifPresentOrElse(userOnDB -> { User userToSave = user.toEntity(); userToSave.setId(userOnDB.getId()); userRepo.save(userToSave); @@ -60,7 +60,7 @@ public void alterUser(Long id, @Valid UserDTO user) { @Override public void deleteUser(Long id) { - this.userRepo.findById(id).ifPresentOrElse( userOnDB -> { + this.userRepo.findById(id).ifPresentOrElse(userOnDB -> { this.userRepo.delete(userOnDB); }, () -> { throw new BadRequestException("User doesn't exist."); @@ -124,8 +124,8 @@ public UserDTO getUser(String username) { log.info(String.format("Fetching user: %s", username)); return new UserDTO( - userRepo.findByUsername(username) - .orElseThrow(() -> new BadRequestException("User Not Found. Please create an Account.")) + userRepo.findByUsername(username) + .orElseThrow(() -> new BadRequestException("User Not Found. Please create an Account.")) ); } diff --git a/src/main/java/com/hideyoshi/backendportfolio/healthChecker/api/HealthCheckerController.java b/src/main/java/com/hideyoshi/backendportfolio/healthChecker/api/HealthCheckerController.java new file mode 100644 index 0000000..938e765 --- /dev/null +++ b/src/main/java/com/hideyoshi/backendportfolio/healthChecker/api/HealthCheckerController.java @@ -0,0 +1,21 @@ +package com.hideyoshi.backendportfolio.healthChecker.api; + + +import lombok.extern.log4j.Log4j2; +import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + + +@Log4j2 +@Controller +@RestController +@RequestMapping("/health") +public class HealthCheckerController { + @RequestMapping + public ResponseEntity healthCheck() { + log.info("Health check requested"); + return ResponseEntity.ok("Health check successful!"); + } +} diff --git a/src/main/java/com/hideyoshi/backendportfolio/microservice/storageService/enums/FileTypeEnum.java b/src/main/java/com/hideyoshi/backendportfolio/microservice/storageService/enums/FileTypeEnum.java index 62f6606..0695d5a 100644 --- a/src/main/java/com/hideyoshi/backendportfolio/microservice/storageService/enums/FileTypeEnum.java +++ b/src/main/java/com/hideyoshi/backendportfolio/microservice/storageService/enums/FileTypeEnum.java @@ -19,7 +19,7 @@ public enum FileTypeEnum { } public static FileTypeEnum fromValue(String value) { - for (FileTypeEnum e: FileTypeEnum.values()) { + for (FileTypeEnum e : FileTypeEnum.values()) { if (e.getFileExtension().equals(value)) { return e; } diff --git a/src/main/java/com/hideyoshi/backendportfolio/microservice/storageService/model/StorageServiceDownloadResponse.java b/src/main/java/com/hideyoshi/backendportfolio/microservice/storageService/model/StorageServiceDownloadResponse.java index 1ff869b..73dd073 100644 --- a/src/main/java/com/hideyoshi/backendportfolio/microservice/storageService/model/StorageServiceDownloadResponse.java +++ b/src/main/java/com/hideyoshi/backendportfolio/microservice/storageService/model/StorageServiceDownloadResponse.java @@ -2,7 +2,9 @@ import com.fasterxml.jackson.annotation.JsonProperty; -import lombok.*; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; @Getter @NoArgsConstructor diff --git a/src/main/java/com/hideyoshi/backendportfolio/microservice/storageService/model/StorageServiceUploadResponse.java b/src/main/java/com/hideyoshi/backendportfolio/microservice/storageService/model/StorageServiceUploadResponse.java index 358ff47..be9009b 100644 --- a/src/main/java/com/hideyoshi/backendportfolio/microservice/storageService/model/StorageServiceUploadResponse.java +++ b/src/main/java/com/hideyoshi/backendportfolio/microservice/storageService/model/StorageServiceUploadResponse.java @@ -2,7 +2,9 @@ import com.fasterxml.jackson.annotation.JsonProperty; -import lombok.*; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; @Getter @NoArgsConstructor diff --git a/src/main/java/com/hideyoshi/backendportfolio/microservice/storageService/service/StorageService.java b/src/main/java/com/hideyoshi/backendportfolio/microservice/storageService/service/StorageService.java index a0e03b8..7c16c41 100644 --- a/src/main/java/com/hideyoshi/backendportfolio/microservice/storageService/service/StorageService.java +++ b/src/main/java/com/hideyoshi/backendportfolio/microservice/storageService/service/StorageService.java @@ -1,7 +1,6 @@ package com.hideyoshi.backendportfolio.microservice.storageService.service; import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.JsonMappingException; import com.fasterxml.jackson.databind.ObjectMapper; import com.hideyoshi.backendportfolio.microservice.storageService.config.StorageServiceConfig; import com.hideyoshi.backendportfolio.microservice.storageService.enums.FileTypeEnum; @@ -10,8 +9,8 @@ import lombok.RequiredArgsConstructor; import lombok.extern.log4j.Log4j2; import org.apache.http.client.methods.HttpDelete; -import org.apache.http.client.methods.HttpPost; import org.apache.http.client.methods.HttpGet; +import org.apache.http.client.methods.HttpPost; import org.apache.http.client.utils.URIBuilder; import org.apache.http.entity.ByteArrayEntity; import org.apache.http.impl.client.CloseableHttpClient; diff --git a/src/main/java/com/hideyoshi/backendportfolio/util/exception/AuthenticationInvalidExceptionDetails.java b/src/main/java/com/hideyoshi/backendportfolio/util/exception/AuthenticationInvalidExceptionDetails.java index dd9066b..9e55de3 100644 --- a/src/main/java/com/hideyoshi/backendportfolio/util/exception/AuthenticationInvalidExceptionDetails.java +++ b/src/main/java/com/hideyoshi/backendportfolio/util/exception/AuthenticationInvalidExceptionDetails.java @@ -2,7 +2,7 @@ import java.time.LocalDateTime; -public class AuthenticationInvalidExceptionDetails extends ExceptionDetails{ +public class AuthenticationInvalidExceptionDetails extends ExceptionDetails { public AuthenticationInvalidExceptionDetails( String title, diff --git a/src/main/java/com/hideyoshi/backendportfolio/util/exception/BadRequestException.java b/src/main/java/com/hideyoshi/backendportfolio/util/exception/BadRequestException.java index f6830c0..170a472 100644 --- a/src/main/java/com/hideyoshi/backendportfolio/util/exception/BadRequestException.java +++ b/src/main/java/com/hideyoshi/backendportfolio/util/exception/BadRequestException.java @@ -4,7 +4,7 @@ import org.springframework.web.bind.annotation.ResponseStatus; @ResponseStatus(HttpStatus.BAD_REQUEST) -public class BadRequestException extends RuntimeException{ +public class BadRequestException extends RuntimeException { public BadRequestException(String message) { super(message); } diff --git a/src/main/java/com/hideyoshi/backendportfolio/util/guard/UserResourceGuard.java b/src/main/java/com/hideyoshi/backendportfolio/util/guard/UserResourceGuard.java index f3b4098..337778b 100644 --- a/src/main/java/com/hideyoshi/backendportfolio/util/guard/UserResourceGuard.java +++ b/src/main/java/com/hideyoshi/backendportfolio/util/guard/UserResourceGuard.java @@ -2,8 +2,8 @@ import java.lang.annotation.*; -@Target( ElementType.METHOD ) -@Retention( RetentionPolicy.RUNTIME ) +@Target(ElementType.METHOD) +@Retention(RetentionPolicy.RUNTIME) @Documented public @interface UserResourceGuard { diff --git a/src/main/java/com/hideyoshi/backendportfolio/util/guard/UserResourceGuardEnum.java b/src/main/java/com/hideyoshi/backendportfolio/util/guard/UserResourceGuardEnum.java index ce08014..68d1974 100644 --- a/src/main/java/com/hideyoshi/backendportfolio/util/guard/UserResourceGuardEnum.java +++ b/src/main/java/com/hideyoshi/backendportfolio/util/guard/UserResourceGuardEnum.java @@ -61,11 +61,6 @@ public Boolean hasAccess( this.accessType = accessType; } - public abstract Boolean hasAccess( - UserService userService, - ObjectMapper objectMapper, - HttpServletRequest request); - public static UserResourceGuardEnum byValue(String accessType) { for (UserResourceGuardEnum o : values()) { if (o.getAccessType().equals(accessType)) { @@ -106,4 +101,9 @@ private static Boolean openAccess(UserService userService, ObjectMapper objectMa return true; } + public abstract Boolean hasAccess( + UserService userService, + ObjectMapper objectMapper, + HttpServletRequest request); + } diff --git a/src/main/java/com/hideyoshi/backendportfolio/util/validator/email/valid/EmailValidator.java b/src/main/java/com/hideyoshi/backendportfolio/util/validator/email/valid/EmailValidator.java index 65beae4..9907a84 100644 --- a/src/main/java/com/hideyoshi/backendportfolio/util/validator/email/valid/EmailValidator.java +++ b/src/main/java/com/hideyoshi/backendportfolio/util/validator/email/valid/EmailValidator.java @@ -18,7 +18,7 @@ public void initialize(ValidEmail constraintAnnotation) { } @Override - public boolean isValid(String email, ConstraintValidatorContext context){ + public boolean isValid(String email, ConstraintValidatorContext context) { return (validateEmail(email)); } diff --git a/src/main/java/com/hideyoshi/backendportfolio/util/validator/email/valid/ValidEmail.java b/src/main/java/com/hideyoshi/backendportfolio/util/validator/email/valid/ValidEmail.java index 8d4e920..a68dbb3 100644 --- a/src/main/java/com/hideyoshi/backendportfolio/util/validator/email/valid/ValidEmail.java +++ b/src/main/java/com/hideyoshi/backendportfolio/util/validator/email/valid/ValidEmail.java @@ -1,7 +1,5 @@ package com.hideyoshi.backendportfolio.util.validator.email.valid; -import com.hideyoshi.backendportfolio.util.validator.email.valid.EmailValidator; - import javax.validation.Constraint; import javax.validation.Payload; import java.lang.annotation.Documented; diff --git a/src/main/java/com/hideyoshi/backendportfolio/util/validator/password/PasswordValidator.java b/src/main/java/com/hideyoshi/backendportfolio/util/validator/password/PasswordValidator.java index 4def643..4806060 100644 --- a/src/main/java/com/hideyoshi/backendportfolio/util/validator/password/PasswordValidator.java +++ b/src/main/java/com/hideyoshi/backendportfolio/util/validator/password/PasswordValidator.java @@ -10,9 +10,8 @@ @RequiredArgsConstructor public class PasswordValidator implements ConstraintValidator { - Provider provider; - private final String PASSWORD_PATTERN = "^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[@$!%*?&])[A-Za-z\\d@$!%*?&]{8,}$"; + Provider provider; @Override public void initialize(ValidPassword constraintAnnotation) { diff --git a/src/test/java/com/hideyoshi/backendportfolio/BackendPortfolioApplicationTests.java b/src/test/java/com/hideyoshi/backendportfolio/BackendPortfolioApplicationTests.java index de52fb2..dc359e6 100644 --- a/src/test/java/com/hideyoshi/backendportfolio/BackendPortfolioApplicationTests.java +++ b/src/test/java/com/hideyoshi/backendportfolio/BackendPortfolioApplicationTests.java @@ -2,13 +2,12 @@ import org.junit.jupiter.api.Test; import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest; -import org.springframework.boot.test.context.SpringBootTest; @DataJpaTest class BackendPortfolioApplicationTests { - @Test - void contextLoads() { - } + @Test + void contextLoads() { + } } diff --git a/src/test/java/com/hideyoshi/backendportfolio/base/user/repo/UserRepositoryTest.java b/src/test/java/com/hideyoshi/backendportfolio/base/user/repo/UserRepositoryTest.java index 0ff60f2..d567c6b 100644 --- a/src/test/java/com/hideyoshi/backendportfolio/base/user/repo/UserRepositoryTest.java +++ b/src/test/java/com/hideyoshi/backendportfolio/base/user/repo/UserRepositoryTest.java @@ -38,7 +38,7 @@ void savesUserToDataBase() { } @Test - void canFindsUserByUsername() { + void canFindsUserByUsername() { // Given User userSaved = this.entityManager.persist(this.createEntity()); this.underTest.findAll(); diff --git a/src/test/java/com/hideyoshi/backendportfolio/base/user/service/UserServiceImplTest.java b/src/test/java/com/hideyoshi/backendportfolio/base/user/service/UserServiceImplTest.java index a4903f0..0813842 100644 --- a/src/test/java/com/hideyoshi/backendportfolio/base/user/service/UserServiceImplTest.java +++ b/src/test/java/com/hideyoshi/backendportfolio/base/user/service/UserServiceImplTest.java @@ -1,6 +1,5 @@ package com.hideyoshi.backendportfolio.base.user.service; -import com.hideyoshi.backendportfolio.base.security.service.AuthService; import com.hideyoshi.backendportfolio.base.user.entity.Provider; import com.hideyoshi.backendportfolio.base.user.entity.Role; import com.hideyoshi.backendportfolio.base.user.entity.User; @@ -10,7 +9,10 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; -import org.mockito.*; +import org.mockito.ArgumentCaptor; +import org.mockito.ArgumentMatchers; +import org.mockito.BDDMockito; +import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest; import org.springframework.security.core.userdetails.UserDetails; @@ -24,12 +26,11 @@ import static org.assertj.core.api.AssertionsForClassTypes.assertThat; import static org.junit.jupiter.api.Assertions.*; -import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.verify; @DataJpaTest @ExtendWith(MockitoExtension.class) -@DirtiesContext(classMode= DirtiesContext.ClassMode.AFTER_EACH_TEST_METHOD) +@DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_EACH_TEST_METHOD) class UserServiceImplTest { private UserServiceImpl underTest; @@ -70,25 +71,25 @@ void canSaveUser() { @Test void canSaveOAuthUser() { - BDDMockito.when(userRepository.findByUsername(ArgumentMatchers.any(String.class))) - .thenReturn(Optional.ofNullable(null)); + BDDMockito.when(userRepository.findByUsername(ArgumentMatchers.any(String.class))) + .thenReturn(Optional.ofNullable(null)); - BDDMockito.when(userRepository.save(ArgumentMatchers.any(User.class))) - .thenReturn(createOAuthUser().toEntity()); + BDDMockito.when(userRepository.save(ArgumentMatchers.any(User.class))) + .thenReturn(createOAuthUser().toEntity()); - // Given - UserDTO user = this.createOAuthUser(); + // Given + UserDTO user = this.createOAuthUser(); - // When - UserDTO userSaved = this.underTest.saveUser(user); + // When + UserDTO userSaved = this.underTest.saveUser(user); - //Then - ArgumentCaptor userArgumentCaptor = ArgumentCaptor.forClass(User.class); + //Then + ArgumentCaptor userArgumentCaptor = ArgumentCaptor.forClass(User.class); - verify(userRepository).save(userArgumentCaptor.capture()); - assertThat(userArgumentCaptor.getValue()).isEqualTo(user.toEntity()); - assertThat(userArgumentCaptor.getValue().getPassword()).isEmpty(); - assertThat(userSaved).isInstanceOf(UserDTO.class); + verify(userRepository).save(userArgumentCaptor.capture()); + assertThat(userArgumentCaptor.getValue()).isEqualTo(user.toEntity()); + assertThat(userArgumentCaptor.getValue().getPassword()).isEmpty(); + assertThat(userSaved).isInstanceOf(UserDTO.class); } @Test @@ -181,7 +182,7 @@ void canAddRoleToUser() { // Given UserDTO userSaved = this.underTest.getUser(user.getUsername()); if (!Objects.nonNull(userSaved)) { - userSaved = this.underTest.saveUser(user); + userSaved = this.underTest.saveUser(user); } // When this.underTest.addRoleToUser(userSaved.getId(), Role.USER.getDescription()); diff --git a/src/test/java/com/hideyoshi/backendportfolio/microservice/storageService/service/StorageServiceTest.java b/src/test/java/com/hideyoshi/backendportfolio/microservice/storageService/service/StorageServiceTest.java index 9946414..9044920 100644 --- a/src/test/java/com/hideyoshi/backendportfolio/microservice/storageService/service/StorageServiceTest.java +++ b/src/test/java/com/hideyoshi/backendportfolio/microservice/storageService/service/StorageServiceTest.java @@ -17,7 +17,7 @@ import static org.assertj.core.api.Assertions.assertThat; @ExtendWith(MockitoExtension.class) -@DirtiesContext(classMode= DirtiesContext.ClassMode.AFTER_EACH_TEST_METHOD) +@DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_EACH_TEST_METHOD) public class StorageServiceTest { private StorageService storageService;