Skip to content

Commit df8f13d

Browse files
authored
Merge pull request #286 from YAPP-Github/refactor/#280
[#280] Refactor: 트위터 로그인 api
2 parents b8ea3b0 + 4ef13f7 commit df8f13d

4 files changed

Lines changed: 55 additions & 18 deletions

File tree

clients/sns-client/src/main/java/org/snsclient/twitter/facade/TwitterApiService.java

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import org.snsclient.twitter.dto.response.TwitterToken;
44
import org.snsclient.twitter.dto.response.TwitterUserInfoDto;
55
import org.snsclient.twitter.service.Twitter4jService;
6+
import org.snsclient.twitter.service.TwitterAuthService;
67
import org.snsclient.twitter.service.TwitterUserService;
78
import org.snsclient.twitter.service.TwitterMediaUploadService;
89
import org.springframework.stereotype.Service;
@@ -18,16 +19,13 @@ public class TwitterApiService {
1819
private final TwitterUserService twitterUserService;
1920
private final TwitterMediaUploadService twitterMediaUploadService;
2021
private final Twitter4jService twitter4jService;
22+
private final TwitterAuthService twitterAuthService;
2123

2224
/**
2325
* authorization url 생성 메서드
2426
*/
2527
public String getTwitterAuthorizationUrl(String userId) {
26-
String url = twitter4jService.getTwitterAuthorizationUrl();
27-
//TODO userID를 트위터 로그인 같이 감아보내는데 Base64인코딩해서 암호화하기
28-
29-
// 기존 state 값을 교체하여 하나만 유지
30-
return url.replaceAll("&state=[^&]*", "") + "&state=" + userId + "&prompt=select_account";
28+
return twitterAuthService.getTwitterAuthorizationUrl(userId);
3129
}
3230

3331
/**

clients/sns-client/src/main/java/org/snsclient/twitter/service/Twitter4jService.java

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -23,21 +23,8 @@
2323
@RequiredArgsConstructor
2424
public class Twitter4jService {
2525
private final Twitter4jConfig config;
26-
private final String[] scopes = {"media.write", "tweet.read", "tweet.write", "users.read", "offline.access"};
2726
private final OAuth2TokenProvider twitterOAuth2TokenProvider;
2827

29-
/**
30-
* authorization url 생성 메서드
31-
* @return authorization url
32-
*/
33-
public String getTwitterAuthorizationUrl() {
34-
return twitterOAuth2TokenProvider.createAuthorizeUrl(
35-
config.getClientId(),
36-
config.getRedirectUri(),
37-
scopes,
38-
config.getChallenge());
39-
}
40-
4128
/**
4229
* 발급받은 code를 가지고 access token(2시간 동안 유효)을 발급받는 메서드
4330
* @param code 발급받은 code (10분간 유효)
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
package org.snsclient.twitter.service;
2+
3+
import org.snsclient.twitter.config.Twitter4jConfig;
4+
import org.springframework.stereotype.Component;
5+
6+
import lombok.RequiredArgsConstructor;
7+
import lombok.extern.slf4j.Slf4j;
8+
9+
@Slf4j
10+
@Component
11+
@RequiredArgsConstructor
12+
public class TwitterAuthService {
13+
private final String[] scopes = {"media.write", "tweet.read", "tweet.write", "users.read", "offline.access"};
14+
private final Twitter4jConfig config;
15+
16+
/**
17+
* authorization url 생성 메서드
18+
* @return authorization url
19+
*/
20+
public String getTwitterAuthorizationUrl(String userId) {
21+
return createAuthorizeUrl(
22+
userId,
23+
config.getClientId(),
24+
config.getRedirectUri(),
25+
scopes,
26+
config.getChallenge());
27+
}
28+
29+
private String createAuthorizeUrl(String userId, String clientId, String redirectUri, String[] scopes, String challenge) {
30+
if (challenge == null || challenge.isEmpty()) {
31+
challenge = "challenge";
32+
}
33+
34+
String scope = String.join("%20", scopes);
35+
36+
return "https://twitter.com/i/oauth2/authorize?response_type=code&" +
37+
"client_id=" + clientId + "&" +
38+
"redirect_uri=" + redirectUri + "&" +
39+
"scope=" + scope + "&" +
40+
"state=" + userId + "&" +
41+
"code_challenge=" + challenge + "&" +
42+
"code_challenge_method=plain" + "&" +
43+
"prompt=select_account";
44+
}
45+
46+
}

domain/domain-module/src/main/java/org/domainmodule/common/entity/BaseAuditEntity.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import jakarta.persistence.Column;
88
import jakarta.persistence.EntityListeners;
99
import jakarta.persistence.MappedSuperclass;
10+
import jakarta.persistence.PrePersist;
1011
import jakarta.persistence.PreUpdate;
1112
import jakarta.persistence.Transient;
1213
import lombok.Getter;
@@ -22,6 +23,11 @@ public class BaseAuditEntity extends BaseTimeEntity {
2223
@Transient
2324
private boolean preventUpdatedAt = false;
2425

26+
@PrePersist
27+
public void prePersist() {
28+
this.updatedAt = LocalDateTime.now(); // 초기 저장 시 updatedAt 설정
29+
}
30+
2531
@PreUpdate
2632
public void setPreventUpdatedAt() {
2733
// 업데이트가 가능하면 현재시간으로 설정

0 commit comments

Comments
 (0)