Repository navigation
Expand file tree
/
Copy pathAuthTokenService.java
More file actions
71 lines (57 loc) · 2.63 KB
/
Copy pathAuthTokenService.java
File metadata and controls
71 lines (57 loc) · 2.63 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
package com.jobnote.domain.user.service;
import com.jobnote.auth.token.Token;
import com.jobnote.auth.token.TokenClaim;
import com.jobnote.auth.token.TokenProvider;
import com.jobnote.domain.refreshtoken.domain.RefreshToken;
import com.jobnote.domain.user.domain.User;
import com.jobnote.domain.refreshtoken.repository.RefreshTokenRepository;
import com.jobnote.global.exception.JobNoteException;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.time.LocalDateTime;
import static com.jobnote.global.common.Constants.CLAIM_VALUE_REFRESH_TOKEN;
import static com.jobnote.global.common.ResponseCode.NOT_FOUND_REFRESH_TOKEN;
@RequiredArgsConstructor
@Transactional(readOnly = true)
@Service
public class AuthTokenService {
private final TokenProvider tokenProvider;
private final RefreshTokenRepository refreshTokenRepository;
private final UserQueryService userQueryService;
@Transactional
public Token saveAndGetToken(final Long userId) {
final User user = userQueryService.getUserById(userId);
final Token token = issueToken(user.getEmail());
final LocalDateTime expiration = tokenProvider.getExpiration(token.refreshToken(), CLAIM_VALUE_REFRESH_TOKEN);
refreshTokenRepository.save(RefreshToken.of(user, token.refreshToken(), expiration));
return token;
}
@Transactional
public Token reissue(final String existingRefreshToken) {
tokenProvider.validateRefreshToken(existingRefreshToken);
final RefreshToken refreshToken = getRefreshTokenByToken(existingRefreshToken);
refreshTokenRepository.delete(refreshToken);
return saveAndGetToken(refreshToken.getUser().getId());
}
@Transactional
public void invalidate(final String targetRefreshToken) {
validateExistsRefreshToken(targetRefreshToken);
refreshTokenRepository.deleteByToken(targetRefreshToken);
}
private Token issueToken(final String email) {
final TokenClaim tokenClaim = TokenClaim.builder()
.email(email)
.build();
return tokenProvider.issueToken(tokenClaim);
}
private void validateExistsRefreshToken(final String existingRefreshToken) {
if (!refreshTokenRepository.existsByToken(existingRefreshToken)) {
throw new JobNoteException(NOT_FOUND_REFRESH_TOKEN);
}
}
private RefreshToken getRefreshTokenByToken(final String token) {
return refreshTokenRepository.findByToken(token)
.orElseThrow(() -> new JobNoteException(NOT_FOUND_REFRESH_TOKEN));
}
}