Skip to content

Commit 59598b5

Browse files
authored
[Feat] oauthpop (#165)
1 parent 2af4df4 commit 59598b5

3 files changed

Lines changed: 46 additions & 9 deletions

File tree

src/main/java/umc/codeplay/controller/OAuthController.java

Lines changed: 40 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import java.util.List;
44
import java.util.Map;
55

6+
import org.springframework.beans.factory.annotation.Value;
67
import org.springframework.http.*;
78
import org.springframework.security.core.authority.SimpleGrantedAuthority;
89
import org.springframework.util.LinkedMultiValueMap;
@@ -17,15 +18,14 @@
1718
import io.swagger.v3.oas.annotations.Hidden;
1819
import io.swagger.v3.oas.annotations.Operation;
1920
import io.swagger.v3.oas.annotations.tags.Tag;
20-
import umc.codeplay.apiPayLoad.ApiResponse;
21+
import org.jetbrains.annotations.NotNull;
2122
import umc.codeplay.apiPayLoad.code.status.ErrorStatus;
2223
import umc.codeplay.apiPayLoad.exception.handler.GeneralHandler;
2324
import umc.codeplay.config.properties.BaseOAuthProperties;
2425
import umc.codeplay.config.properties.GoogleOAuthProperties;
2526
import umc.codeplay.config.properties.KakaoOAuthProperties;
2627
import umc.codeplay.domain.Member;
2728
import umc.codeplay.domain.enums.SocialStatus;
28-
import umc.codeplay.dto.MemberResponseDTO;
2929
import umc.codeplay.jwt.JwtUtil;
3030
import umc.codeplay.service.MemberService;
3131

@@ -36,6 +36,9 @@
3636
@Tag(name = "oauth-controller", description = "외부 소셜 로그인 서비스 연동 API, JWT 토큰 헤더 포함을 필요로 하지 않습니다.")
3737
public class OAuthController {
3838

39+
@Value("${frontend.url}")
40+
private static String targetOrigin;
41+
3942
private final JwtUtil jwtUtil;
4043
private final RestTemplate restTemplate = new RestTemplate();
4144
private final GoogleOAuthProperties googleOAuthProperties;
@@ -65,7 +68,7 @@ public RedirectView redirectToOAuth(@PathVariable("provider") String provider) {
6568

6669
@Hidden
6770
@GetMapping("/callback/{provider}")
68-
public ApiResponse<MemberResponseDTO.LoginResultDTO> OAuthCallback(
71+
public ResponseEntity<String> OAuthCallback(
6972
@RequestParam("code") String code, @PathVariable("provider") String provider) {
7073
BaseOAuthProperties properties =
7174
switch (provider) {
@@ -110,13 +113,41 @@ public ApiResponse<MemberResponseDTO.LoginResultDTO> OAuthCallback(
110113
String serviceAccessToken = jwtUtil.generateToken(email, authorities);
111114
String serviceRefreshToken = jwtUtil.generateRefreshToken(email, authorities);
112115

116+
String html = getString(serviceAccessToken, serviceRefreshToken, email);
117+
118+
return ResponseEntity.ok().contentType(MediaType.TEXT_HTML).body(html);
119+
113120
// (6) 최종적으로 JWT(액세스/리프레시)를 프론트에 응답
114-
return ApiResponse.onSuccess(
115-
MemberResponseDTO.LoginResultDTO.builder()
116-
.email(email)
117-
.token(serviceAccessToken)
118-
.refreshToken(serviceRefreshToken)
119-
.build());
121+
// return ApiResponse.onSuccess(
122+
// MemberResponseDTO.LoginResultDTO.builder()
123+
// .email(email)
124+
// .token(serviceAccessToken)
125+
// .refreshToken(serviceRefreshToken)
126+
// .build());
127+
}
128+
129+
private static @NotNull String getString(
130+
String serviceAccessToken, String serviceRefreshToken, String email) {
131+
String jsonData =
132+
String.format(
133+
"{ \"accessToken\": \"%s\", \"refreshToken\": \"%s\", \"email\": \"%s\" }",
134+
serviceAccessToken, serviceRefreshToken, email);
135+
136+
return """
137+
<!DOCTYPE html>
138+
<html>
139+
<body>
140+
<script>
141+
(function() {
142+
var data = %s;
143+
window.opener.postMessage(data, "%s");
144+
window.close();
145+
})();
146+
</script>
147+
</body>
148+
</html>
149+
"""
150+
.formatted(jsonData, targetOrigin);
120151
}
121152

122153
private Map<String, Object> requestOAuthToken(String code, BaseOAuthProperties properties) {

src/main/resources/application-prod.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,9 @@ spring:
4848
access-key: ${AWS_ACCESS_KEY_ID}
4949
secret-key: ${AWS_SECRET_ACCESS_KEY}
5050

51+
frontend:
52+
url: ${FRONTEND_URL}
53+
5154
s3:
5255
bucket: ${S3_BUCKET}
5356

src/main/resources/application.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,9 @@ spring:
4949
access-key: ${AWS_ACCESS_KEY_ID}
5050
secret-key: ${AWS_SECRET_ACCESS_KEY}
5151

52+
frontend:
53+
url: ${FRONTEND_URL}
54+
5255
s3:
5356
bucket: ${S3_BUCKET}
5457

0 commit comments

Comments
 (0)