|
17 | 17 | import io.swagger.v3.oas.annotations.Hidden; |
18 | 18 | import io.swagger.v3.oas.annotations.Operation; |
19 | 19 | import io.swagger.v3.oas.annotations.tags.Tag; |
20 | | -import umc.codeplay.apiPayLoad.ApiResponse; |
21 | 20 | import umc.codeplay.apiPayLoad.code.status.ErrorStatus; |
22 | 21 | import umc.codeplay.apiPayLoad.exception.handler.GeneralHandler; |
23 | 22 | import umc.codeplay.config.properties.BaseOAuthProperties; |
24 | 23 | import umc.codeplay.config.properties.GoogleOAuthProperties; |
25 | 24 | import umc.codeplay.config.properties.KakaoOAuthProperties; |
26 | 25 | import umc.codeplay.domain.Member; |
27 | 26 | import umc.codeplay.domain.enums.SocialStatus; |
28 | | -import umc.codeplay.dto.MemberResponseDTO; |
29 | 27 | import umc.codeplay.jwt.JwtUtil; |
30 | 28 | import umc.codeplay.service.MemberService; |
31 | 29 |
|
@@ -65,7 +63,7 @@ public RedirectView redirectToOAuth(@PathVariable("provider") String provider) { |
65 | 63 |
|
66 | 64 | @Hidden |
67 | 65 | @GetMapping("/callback/{provider}") |
68 | | - public ApiResponse<MemberResponseDTO.LoginResultDTO> OAuthCallback( |
| 66 | + public ResponseEntity<String> OAuthCallback( |
69 | 67 | @RequestParam("code") String code, @PathVariable("provider") String provider) { |
70 | 68 | BaseOAuthProperties properties = |
71 | 69 | switch (provider) { |
@@ -110,13 +108,42 @@ public ApiResponse<MemberResponseDTO.LoginResultDTO> OAuthCallback( |
110 | 108 | String serviceAccessToken = jwtUtil.generateToken(email, authorities); |
111 | 109 | String serviceRefreshToken = jwtUtil.generateRefreshToken(email, authorities); |
112 | 110 |
|
| 111 | + String html = getString(serviceAccessToken, serviceRefreshToken, email); |
| 112 | + |
| 113 | + return ResponseEntity.ok().contentType(MediaType.TEXT_HTML).body(html); |
| 114 | + |
113 | 115 | // (6) 최종적으로 JWT(액세스/리프레시)를 프론트에 응답 |
114 | | - return ApiResponse.onSuccess( |
115 | | - MemberResponseDTO.LoginResultDTO.builder() |
116 | | - .email(email) |
117 | | - .token(serviceAccessToken) |
118 | | - .refreshToken(serviceRefreshToken) |
119 | | - .build()); |
| 116 | + // return ApiResponse.onSuccess( |
| 117 | + // MemberResponseDTO.LoginResultDTO.builder() |
| 118 | + // .email(email) |
| 119 | + // .token(serviceAccessToken) |
| 120 | + // .refreshToken(serviceRefreshToken) |
| 121 | + // .build()); |
| 122 | + } |
| 123 | + |
| 124 | + String targetOrigin = "https://code-play-fe.vercel.app"; |
| 125 | + |
| 126 | + private String getString(String serviceAccessToken, String serviceRefreshToken, String email) { |
| 127 | + String jsonData = |
| 128 | + String.format( |
| 129 | + "{ \"accessToken\": \"%s\", \"refreshToken\": \"%s\", \"email\": \"%s\" }", |
| 130 | + serviceAccessToken, serviceRefreshToken, email); |
| 131 | + |
| 132 | + return """ |
| 133 | + <!DOCTYPE html> |
| 134 | + <html> |
| 135 | + <body> |
| 136 | + <script> |
| 137 | + (function() { |
| 138 | + var data = %s; |
| 139 | + window.opener.postMessage(data, "%s"); |
| 140 | + window.close(); |
| 141 | + })(); |
| 142 | + </script> |
| 143 | + </body> |
| 144 | + </html> |
| 145 | + """ |
| 146 | + .formatted(jsonData, targetOrigin); |
120 | 147 | } |
121 | 148 |
|
122 | 149 | private Map<String, Object> requestOAuthToken(String code, BaseOAuthProperties properties) { |
|
0 commit comments