From d93e0099320edc892ac5fe655bdb7eaaaa8ae095 Mon Sep 17 00:00:00 2001 From: wlgns12370 Date: Wed, 13 Aug 2025 02:35:20 +0900 Subject: [PATCH 1/2] =?UTF-8?q?MOSU-341=20refactor:=20OAuth=20=EA=B4=80?= =?UTF-8?q?=EB=A0=A8=20=EC=97=90=EB=9F=AC=20=EA=B3=B5=ED=86=B5=ED=99=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../handler/OAuth2LoginFailureHandler.java | 8 +++--- .../global/handler/OAuthErrorType.java | 27 +++++++++++++++++++ .../global/handler/OAuthFailureResponse.java | 11 ++++++++ .../auth/dto/request/LoginResponse.java | 4 --- 4 files changed, 43 insertions(+), 7 deletions(-) create mode 100644 src/main/java/life/mosu/mosuserver/global/handler/OAuthErrorType.java create mode 100644 src/main/java/life/mosu/mosuserver/global/handler/OAuthFailureResponse.java diff --git a/src/main/java/life/mosu/mosuserver/global/handler/OAuth2LoginFailureHandler.java b/src/main/java/life/mosu/mosuserver/global/handler/OAuth2LoginFailureHandler.java index cee9925a..f047a66b 100644 --- a/src/main/java/life/mosu/mosuserver/global/handler/OAuth2LoginFailureHandler.java +++ b/src/main/java/life/mosu/mosuserver/global/handler/OAuth2LoginFailureHandler.java @@ -6,7 +6,6 @@ import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; import java.nio.charset.StandardCharsets; -import life.mosu.mosuserver.presentation.auth.dto.request.LoginResponse; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.security.core.AuthenticationException; @@ -27,8 +26,11 @@ public class OAuth2LoginFailureHandler implements public void onAuthenticationFailure(HttpServletRequest request, HttpServletResponse response, AuthenticationException exception) throws IOException, ServletException { - LoginResponse loginResponse = LoginResponse.from(); - String jsonResponse = UriUtils.encode(objectMapper.writeValueAsString(loginResponse), + OAuthErrorType errorType = OAuthErrorType.from(exception.getMessage()); + OAuthFailureResponse oAuthFailureResponse = OAuthFailureResponse.from( + errorType.getMessage()); + + String jsonResponse = UriUtils.encode(objectMapper.writeValueAsString(oAuthFailureResponse), StandardCharsets.UTF_8); final String redirectWithAccessToken = UriComponentsBuilder.fromUriString( diff --git a/src/main/java/life/mosu/mosuserver/global/handler/OAuthErrorType.java b/src/main/java/life/mosu/mosuserver/global/handler/OAuthErrorType.java new file mode 100644 index 00000000..9ae0e07a --- /dev/null +++ b/src/main/java/life/mosu/mosuserver/global/handler/OAuthErrorType.java @@ -0,0 +1,27 @@ +package life.mosu.mosuserver.global.handler; + +import lombok.Getter; + +@Getter +public enum OAuthErrorType { + CANCELED("CANCELED"), + DUPLICATE("DUPLICATE"), + UNKNOWN("UNKNOWN"); + + private final String message; + + OAuthErrorType(String message) { + this.message = message; + } + + public static OAuthErrorType from(String text) { + if (text == null) { + return UNKNOWN; + } + return switch (text) { + case "DUPLICATE" -> DUPLICATE; + case "[access_denied] User denied access" -> CANCELED; + default -> UNKNOWN; + }; + } +} \ No newline at end of file diff --git a/src/main/java/life/mosu/mosuserver/global/handler/OAuthFailureResponse.java b/src/main/java/life/mosu/mosuserver/global/handler/OAuthFailureResponse.java new file mode 100644 index 00000000..7af100e0 --- /dev/null +++ b/src/main/java/life/mosu/mosuserver/global/handler/OAuthFailureResponse.java @@ -0,0 +1,11 @@ +package life.mosu.mosuserver.global.handler; + +public record OAuthFailureResponse( + Boolean isProfileRegistered, + String errorCode +) { + + public static OAuthFailureResponse from(String errorCode) { + return new OAuthFailureResponse(null, errorCode); + } +} diff --git a/src/main/java/life/mosu/mosuserver/presentation/auth/dto/request/LoginResponse.java b/src/main/java/life/mosu/mosuserver/presentation/auth/dto/request/LoginResponse.java index 7f206fe4..4f9f35ef 100644 --- a/src/main/java/life/mosu/mosuserver/presentation/auth/dto/request/LoginResponse.java +++ b/src/main/java/life/mosu/mosuserver/presentation/auth/dto/request/LoginResponse.java @@ -21,8 +21,4 @@ public static LoginResponse from(Boolean isProfileRegistered, final UserJpaEntit } return new LoginResponse(false, LoginUserResponse.from(user)); } - - public static LoginResponse from() { - return new LoginResponse(null, null); - } } From 80537c4a93268a2f2740599555a16740dfb1534d Mon Sep 17 00:00:00 2001 From: wlgns12370 Date: Wed, 13 Aug 2025 02:37:13 +0900 Subject: [PATCH 2/2] =?UTF-8?q?MOSU-341=20refactor:=20KMC=20=ED=9A=8C?= =?UTF-8?q?=EC=9B=90,=EC=B9=B4=EC=B9=B4=EC=98=A4=20=EC=A4=91=EB=B3=B5=20?= =?UTF-8?q?=ED=9A=8C=EC=9B=90=20=EB=8F=99=EC=8B=9C=EA=B0=80=EC=9E=85=20?= =?UTF-8?q?=EC=97=90=EB=9F=AC=20=EC=B2=98=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../oauth/OAuthUserPersistenceProcessor.java | 7 ++++--- .../mosuserver/global/exception/OAuthException.java | 10 ++++++++++ 2 files changed, 14 insertions(+), 3 deletions(-) create mode 100644 src/main/java/life/mosu/mosuserver/global/exception/OAuthException.java diff --git a/src/main/java/life/mosu/mosuserver/application/oauth/OAuthUserPersistenceProcessor.java b/src/main/java/life/mosu/mosuserver/application/oauth/OAuthUserPersistenceProcessor.java index 7f21b7a0..a137bb9c 100644 --- a/src/main/java/life/mosu/mosuserver/application/oauth/OAuthUserPersistenceProcessor.java +++ b/src/main/java/life/mosu/mosuserver/application/oauth/OAuthUserPersistenceProcessor.java @@ -4,6 +4,7 @@ import life.mosu.mosuserver.domain.user.entity.UserJpaEntity; import life.mosu.mosuserver.domain.user.entity.UserRole; import life.mosu.mosuserver.domain.user.repository.UserJpaRepository; +import life.mosu.mosuserver.global.exception.OAuthException; import life.mosu.mosuserver.global.processor.StepProcessor; import life.mosu.mosuserver.global.util.PhoneNumberUtil; import lombok.RequiredArgsConstructor; @@ -28,9 +29,9 @@ public UserJpaEntity process(final OAuthUserInfo info) { return userRepository.findByPhoneNumber( PhoneNumberUtil.formatPhoneNumber(info.phoneNumber())) .map(existingUser -> { -// if (existingUser.isMosuUser()) { -// throw new IllegalArgumentException("이미 모수 회원입니다."); -// } + if (existingUser.isMosuUser()) { + throw new OAuthException("DUPLICATE"); + } existingUser.updateOAuthUser( info.gender(), info.name(), diff --git a/src/main/java/life/mosu/mosuserver/global/exception/OAuthException.java b/src/main/java/life/mosu/mosuserver/global/exception/OAuthException.java new file mode 100644 index 00000000..3a831272 --- /dev/null +++ b/src/main/java/life/mosu/mosuserver/global/exception/OAuthException.java @@ -0,0 +1,10 @@ +package life.mosu.mosuserver.global.exception; + +import org.springframework.security.core.AuthenticationException; + +public class OAuthException extends AuthenticationException { + + public OAuthException(String msg) { + super(msg); + } +}