1818import org .springframework .web .reactive .function .client .WebClient ;
1919
2020import com .fasterxml .jackson .databind .ObjectMapper ;
21+ import com .leets .commitatobe .domain .auth .dto .GithubToken ;
2122import com .leets .commitatobe .global .exception .ApiException ;
2223
2324import jakarta .servlet .http .HttpServletResponse ;
@@ -49,7 +50,7 @@ public class AuthService {
4950 @ Value ("${jwt.iv-secret}" )
5051 private String ivSecret ;
5152
52- public String gitHubLogin (String authCode ) {
53+ public GithubToken gitHubLogin (String authCode ) {
5354 WebClient webClient = WebClient .builder ()
5455 .baseUrl ("https://github.com" )
5556 .defaultHeader (HttpHeaders .CONTENT_TYPE , MediaType .APPLICATION_FORM_URLENCODED_VALUE )
@@ -72,11 +73,14 @@ public String gitHubLogin(String authCode) {
7273
7374 // JSON ํ์์ ์๋ต ํ์ฑ
7475 String accessToken ;
76+ String refreshToken ;
7577
7678 try {
7779 ObjectMapper mapper = new ObjectMapper ();
7880 Map <String , String > resultMap = mapper .readValue (responseBody , Map .class );
81+
7982 accessToken = resultMap .get ("access_token" );
83+ refreshToken = resultMap .get ("refresh_token" );
8084 } catch (Exception e ) {
8185 throw new ApiException (_GITHUB_JSON_PARSING_ERROR );
8286 }
@@ -85,7 +89,7 @@ public String gitHubLogin(String authCode) {
8589 throw new ApiException (_GITHUB_TOKEN_GENERATION_ERROR );
8690 }
8791
88- return accessToken ;
92+ return new GithubToken ( accessToken , refreshToken ) ;
8993 }
9094
9195 public void redirect (HttpServletResponse response ) {
@@ -98,6 +102,39 @@ public void redirect(HttpServletResponse response) {
98102 }
99103 }
100104
105+ public GithubToken refreshAccessToken (String refreshToken ) {
106+ WebClient webClient = WebClient .builder ()
107+ .baseUrl ("https://github.com" )
108+ .defaultHeader (HttpHeaders .CONTENT_TYPE , MediaType .APPLICATION_FORM_URLENCODED_VALUE )
109+ .defaultHeader (HttpHeaders .ACCEPT , MediaType .APPLICATION_JSON_VALUE )
110+ .build ();
111+
112+ String responseBody = webClient .post ()
113+ .uri ("/login/oauth/access_token" )
114+ .bodyValue ("client_id=" + clientId +
115+ "&client_secret=" + clientSecret +
116+ "&grant_type=refresh_token" +
117+ "&refresh_token=" + refreshToken )
118+ .retrieve ()
119+ .bodyToMono (String .class )
120+ .block ();
121+
122+ String newAccessToken ;
123+ String newRefreshToken ;
124+ try {
125+ ObjectMapper mapper = new ObjectMapper ();
126+ Map <String , Object > resultMap = mapper .readValue (responseBody , Map .class );
127+
128+ newAccessToken = (String )resultMap .get ("access_token" );
129+ newRefreshToken = (String )resultMap .get ("refresh_token" );
130+
131+ } catch (Exception e ) {
132+ throw new ApiException (_GITHUB_JSON_PARSING_ERROR );
133+ }
134+
135+ return new GithubToken (newAccessToken , newRefreshToken );
136+ }
137+
101138 public String encrypt (String token ) {
102139 byte [] encrypted ;
103140 try {
0 commit comments