-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge branch 'refs/heads/develop' into feature/40-modify-entity-pk-type
- Loading branch information
Showing
12 changed files
with
236 additions
and
36 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
9 changes: 8 additions & 1 deletion
9
jabiseo-api/src/main/java/com/jabiseo/auth/application/usecase/LogoutUseCase.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,10 +1,17 @@ | ||
package com.jabiseo.auth.application.usecase; | ||
|
||
import com.jabiseo.cache.RedisCacheRepository; | ||
import lombok.RequiredArgsConstructor; | ||
import org.springframework.stereotype.Service; | ||
|
||
@Service | ||
@RequiredArgsConstructor | ||
public class LogoutUseCase { | ||
public void execute() { | ||
|
||
private final RedisCacheRepository redisCacheRepository; | ||
|
||
public void execute(String memberId) { | ||
redisCacheRepository.deleteToken(memberId); | ||
} | ||
|
||
} |
33 changes: 31 additions & 2 deletions
33
jabiseo-api/src/main/java/com/jabiseo/auth/application/usecase/ReissueUseCase.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,13 +1,42 @@ | ||
package com.jabiseo.auth.application.usecase; | ||
|
||
import com.jabiseo.auth.application.JwtHandler; | ||
import com.jabiseo.auth.dto.LoginResponse; | ||
import com.jabiseo.auth.dto.ReissueRequest; | ||
import com.jabiseo.auth.dto.ReissueResponse; | ||
import com.jabiseo.auth.exception.AuthenticationBusinessException; | ||
import com.jabiseo.auth.exception.AuthenticationErrorCode; | ||
import com.jabiseo.cache.RedisCacheRepository; | ||
import com.jabiseo.member.domain.Member; | ||
import com.jabiseo.member.domain.MemberRepository; | ||
import lombok.RequiredArgsConstructor; | ||
import org.springframework.stereotype.Service; | ||
import org.springframework.transaction.annotation.Transactional; | ||
|
||
@Service | ||
@RequiredArgsConstructor | ||
@Transactional(readOnly = true) | ||
public class ReissueUseCase { | ||
|
||
public LoginResponse reissue(String refreshToken) { | ||
return new LoginResponse("access_token", "refresh_token"); | ||
private final MemberRepository memberRepository; | ||
private final RedisCacheRepository redisCacheRepository; | ||
private final JwtHandler jwtHandler; | ||
|
||
public ReissueResponse execute(ReissueRequest request, String memberId) { | ||
Member member = memberRepository.getReferenceById(memberId); | ||
|
||
jwtHandler.validateRefreshToken(request.refreshToken()); | ||
|
||
String savedToken = redisCacheRepository.findToken(memberId) | ||
.orElseThrow(() -> new AuthenticationBusinessException(AuthenticationErrorCode.REQUIRE_LOGIN)); | ||
|
||
if (!savedToken.equals(request.refreshToken())) { | ||
throw new AuthenticationBusinessException(AuthenticationErrorCode.NOT_MATCH_REFRESH); | ||
} | ||
|
||
String accessToken = jwtHandler.createAccessToken(member); | ||
return new ReissueResponse(accessToken); | ||
} | ||
|
||
|
||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
6 changes: 6 additions & 0 deletions
6
jabiseo-api/src/main/java/com/jabiseo/auth/dto/ReissueRequest.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
package com.jabiseo.auth.dto; | ||
|
||
import jakarta.validation.constraints.NotBlank; | ||
|
||
public record ReissueRequest(@NotBlank String refreshToken) { | ||
} |
5 changes: 5 additions & 0 deletions
5
jabiseo-api/src/main/java/com/jabiseo/auth/dto/ReissueResponse.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
package com.jabiseo.auth.dto; | ||
|
||
public record ReissueResponse(String accessToken) { | ||
|
||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -38,7 +38,7 @@ management: | |
include: "*" | ||
|
||
jwt: | ||
access-expired-min: 6000 | ||
access-expired-min: 1 | ||
|
||
--- | ||
spring: | ||
|
95 changes: 95 additions & 0 deletions
95
jabiseo-api/src/test/java/com/jabiseo/auth/application/usecase/ReissueUseCaseTest.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,95 @@ | ||
package com.jabiseo.auth.application.usecase; | ||
|
||
import com.jabiseo.auth.application.JwtHandler; | ||
import com.jabiseo.auth.dto.ReissueRequest; | ||
import com.jabiseo.auth.dto.ReissueResponse; | ||
import com.jabiseo.auth.exception.AuthenticationBusinessException; | ||
import com.jabiseo.auth.exception.AuthenticationErrorCode; | ||
import com.jabiseo.cache.RedisCacheRepository; | ||
import com.jabiseo.member.domain.Member; | ||
import com.jabiseo.member.domain.MemberRepository; | ||
import fixture.MemberFixture; | ||
import org.assertj.core.api.Assertions; | ||
import org.junit.jupiter.api.BeforeEach; | ||
import org.junit.jupiter.api.DisplayName; | ||
import org.junit.jupiter.api.Test; | ||
import org.junit.jupiter.api.extension.ExtendWith; | ||
import org.mockito.InjectMocks; | ||
import org.mockito.Mock; | ||
import org.mockito.junit.jupiter.MockitoExtension; | ||
|
||
import java.util.Optional; | ||
|
||
import static org.assertj.core.api.Assertions.assertThat; | ||
import static org.assertj.core.api.Assertions.assertThatThrownBy; | ||
import static org.junit.jupiter.api.Assertions.*; | ||
import static org.mockito.BDDMockito.given; | ||
|
||
@ExtendWith(MockitoExtension.class) | ||
class ReissueUseCaseTest { | ||
|
||
@InjectMocks | ||
ReissueUseCase reissueUseCase; | ||
|
||
@Mock | ||
MemberRepository memberRepository; | ||
|
||
@Mock | ||
RedisCacheRepository redisCacheRepository; | ||
|
||
@Mock | ||
JwtHandler jwtHandler; | ||
|
||
ReissueRequest request; | ||
|
||
@BeforeEach | ||
void setUp() { | ||
request = new ReissueRequest("refresh"); | ||
} | ||
|
||
@Test | ||
@DisplayName("저장된 토큰이 없는 경우 예외를 반환한다") | ||
void savedTokenIsNullThrownException() { | ||
//given | ||
String memberId = "id"; | ||
given(memberRepository.getReferenceById(memberId)).willReturn(MemberFixture.createMember(memberId)); | ||
given(redisCacheRepository.findToken(memberId)).willReturn(Optional.empty()); | ||
|
||
//when then | ||
assertThatThrownBy(() -> reissueUseCase.execute(request, memberId)) | ||
.isInstanceOf(AuthenticationBusinessException.class); | ||
} | ||
|
||
@Test | ||
@DisplayName("다른 refreshToken으로 요청하면 예외를 반환한다") | ||
void otherTokenRequestThrownException() { | ||
//given | ||
String memberId = "id"; | ||
String otherToken = "tokens"; | ||
given(memberRepository.getReferenceById(memberId)).willReturn(MemberFixture.createMember(memberId)); | ||
given(redisCacheRepository.findToken(memberId)).willReturn(Optional.of(otherToken)); | ||
|
||
//when then | ||
assertThatThrownBy(() -> reissueUseCase.execute(request, memberId)) | ||
.isInstanceOf(AuthenticationBusinessException.class) | ||
.hasMessage(AuthenticationErrorCode.NOT_MATCH_REFRESH.getMessage()); | ||
} | ||
|
||
@Test | ||
@DisplayName("정상 요청의 경우 새로운 access Token을 발급한다.") | ||
void requestSuccessReturnNewAccessToken(){ | ||
//given | ||
String memberId = "id"; | ||
Member member = MemberFixture.createMember(memberId); | ||
String newAccessToken = "accessToken"; | ||
given(memberRepository.getReferenceById(memberId)).willReturn(member); | ||
given(redisCacheRepository.findToken(memberId)).willReturn(Optional.of(request.refreshToken())); | ||
given(jwtHandler.createAccessToken(member)).willReturn(newAccessToken); | ||
|
||
//when | ||
ReissueResponse execute = reissueUseCase.execute(request, memberId); | ||
|
||
//then | ||
assertThat(execute.accessToken()).isEqualTo(newAccessToken); | ||
} | ||
} |
Oops, something went wrong.