1
1
package com .kusithm .hdmedi_server .domain .user .service ;
2
2
3
3
import com .kusithm .hdmedi_server .domain .user .auth .naver .NaverOAuthProvider ;
4
+ import com .kusithm .hdmedi_server .domain .user .domain .AuthCode ;
4
5
import com .kusithm .hdmedi_server .domain .user .domain .Platform ;
5
6
import com .kusithm .hdmedi_server .domain .user .domain .User ;
6
7
import com .kusithm .hdmedi_server .domain .user .dto .request .UserAuthRequestDto ;
7
8
import com .kusithm .hdmedi_server .domain .user .dto .request .UserSignUpRequestDto ;
9
+ import com .kusithm .hdmedi_server .domain .user .dto .response .AuthCodeResponseDto ;
8
10
import com .kusithm .hdmedi_server .domain .user .dto .response .UserAuthResponseDto ;
11
+ import com .kusithm .hdmedi_server .domain .user .repository .AuthCodeRepository ;
9
12
import com .kusithm .hdmedi_server .domain .user .repository .RefreshTokenRepository ;
10
13
import com .kusithm .hdmedi_server .domain .user .repository .UserRepository ;
11
14
import com .kusithm .hdmedi_server .global .config .jwt .JwtProvider ;
16
19
import lombok .RequiredArgsConstructor ;
17
20
import org .springframework .stereotype .Service ;
18
21
22
+ import java .security .SecureRandom ;
23
+
19
24
import static com .kusithm .hdmedi_server .domain .user .domain .RefreshToken .createRefreshToken ;
20
25
import static com .kusithm .hdmedi_server .global .error .exception .ErrorCode .DUPLICATE_USER ;
21
26
import static com .kusithm .hdmedi_server .global .error .exception .ErrorCode .USER_NOT_FOUND ;
26
31
public class AuthService {
27
32
private final NaverOAuthProvider naverOAuthProvider ;
28
33
private final RefreshTokenRepository refreshTokenRepository ;
34
+ private final AuthCodeRepository authCodeRepository ;
29
35
private final UserRepository userRepository ;
30
36
private final JwtProvider jwtProvider ;
31
37
38
+ private static final String CHARACTERS = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" ;
39
+ private static final int CODE_LENGTH = 6 ;
40
+
32
41
public UserAuthResponseDto signIn (String token , UserAuthRequestDto requestDto ) {
33
42
Platform platform = Platform .getEnumPlatformFrom (requestDto .getPlatform ());
34
43
String platformId = getPlatformId (token );
@@ -38,7 +47,7 @@ public UserAuthResponseDto signIn(String token, UserAuthRequestDto requestDto) {
38
47
return UserAuthResponseDto .of (issuedToken , findUser );
39
48
}
40
49
41
- public UserAuthResponseDto signUp (String token , UserSignUpRequestDto requestDto ){
50
+ public UserAuthResponseDto signUp (String token , UserSignUpRequestDto requestDto ) {
42
51
Platform platform = Platform .getEnumPlatformFrom (requestDto .getPlatform ());
43
52
String platformId = getPlatformId (token );
44
53
validateDuplicateUser (platform , platformId );
@@ -48,6 +57,39 @@ public UserAuthResponseDto signUp(String token, UserSignUpRequestDto requestDto)
48
57
return UserAuthResponseDto .of (issuedToken , saveUser );
49
58
}
50
59
60
+ public AuthCodeResponseDto createAuthCode (Long userId ) {
61
+ String authCode = createAuthCodeAtSecureRandom (new SecureRandom ());
62
+ AuthCode createdAuthCode = AuthCode .createAuthCode (authCode , userId );
63
+ saveAuthCode (createdAuthCode );
64
+ return AuthCodeResponseDto .of (createdAuthCode .getAuthCode ());
65
+ }
66
+
67
+ private void saveAuthCode (AuthCode createdAuthCode ) {
68
+ authCodeRepository .save (createdAuthCode );
69
+ }
70
+
71
+ private boolean duplicateAuthCode (String authCode ) {
72
+ return authCodeRepository .existsByAuthCode (authCode );
73
+ }
74
+
75
+ private String createAuthCodeAtSecureRandom (SecureRandom random ) {
76
+ StringBuilder codeBuilder ;
77
+ do {
78
+ codeBuilder = createAuthCodeWithStringBuilder (random );
79
+ } while (duplicateAuthCode (codeBuilder .toString ()));
80
+ return codeBuilder .toString ();
81
+ }
82
+
83
+ private StringBuilder createAuthCodeWithStringBuilder (SecureRandom random ){
84
+ StringBuilder codeBuilder = new StringBuilder ();
85
+ for (int i = 0 ; i < CODE_LENGTH ; i ++) {
86
+ int randomIndex = random .nextInt (CHARACTERS .length ());
87
+ char randomChar = CHARACTERS .charAt (randomIndex );
88
+ codeBuilder .append (randomChar );
89
+ }
90
+ return codeBuilder ;
91
+ }
92
+
51
93
private User getUser (Platform platform , String platformId ) {
52
94
return userRepository .findUserByPlatformAndPlatformId (platform , platformId )
53
95
.orElseThrow (() -> new EntityNotFoundException (USER_NOT_FOUND ));
0 commit comments