generated from pricelees/issue-pr-template
[#34] 회원 / 인증 도메인 재정의 #43
@ -9,7 +9,7 @@ import roomescape.auth.exception.AuthErrorCode
|
|||||||
import roomescape.auth.exception.AuthException
|
import roomescape.auth.exception.AuthException
|
||||||
import roomescape.auth.infrastructure.jwt.JwtUtils
|
import roomescape.auth.infrastructure.jwt.JwtUtils
|
||||||
import roomescape.auth.web.LoginContext
|
import roomescape.auth.web.LoginContext
|
||||||
import roomescape.auth.web.LoginRequestV2
|
import roomescape.auth.web.LoginRequest
|
||||||
import roomescape.auth.web.LoginSuccessResponse
|
import roomescape.auth.web.LoginSuccessResponse
|
||||||
import roomescape.common.dto.CurrentUserContext
|
import roomescape.common.dto.CurrentUserContext
|
||||||
import roomescape.common.dto.LoginCredentials
|
import roomescape.common.dto.LoginCredentials
|
||||||
@ -30,7 +30,7 @@ class AuthService(
|
|||||||
) {
|
) {
|
||||||
@Transactional(readOnly = true)
|
@Transactional(readOnly = true)
|
||||||
fun login(
|
fun login(
|
||||||
request: LoginRequestV2,
|
request: LoginRequest,
|
||||||
context: LoginContext
|
context: LoginContext
|
||||||
): LoginSuccessResponse {
|
): LoginSuccessResponse {
|
||||||
log.info { "[AuthService.login] 로그인 시작: account=${request.account}, type=${request.principalType}, context=${context}" }
|
log.info { "[AuthService.login] 로그인 시작: account=${request.account}, type=${request.principalType}, context=${context}" }
|
||||||
@ -83,7 +83,7 @@ class AuthService(
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun verifyPasswordOrThrow(
|
private fun verifyPasswordOrThrow(
|
||||||
request: LoginRequestV2,
|
request: LoginRequest,
|
||||||
credentials: LoginCredentials
|
credentials: LoginCredentials
|
||||||
) {
|
) {
|
||||||
if (credentials.password != request.password) {
|
if (credentials.password != request.password) {
|
||||||
@ -92,7 +92,7 @@ class AuthService(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun getCredentials(request: LoginRequestV2): Pair<LoginCredentials, Map<String, Any>> {
|
private fun getCredentials(request: LoginRequest): Pair<LoginCredentials, Map<String, Any>> {
|
||||||
val extraClaims: MutableMap<String, Any> = mutableMapOf()
|
val extraClaims: MutableMap<String, Any> = mutableMapOf()
|
||||||
val credentials: LoginCredentials = when (request.principalType) {
|
val credentials: LoginCredentials = when (request.principalType) {
|
||||||
PrincipalType.ADMIN -> {
|
PrincipalType.ADMIN -> {
|
||||||
|
|||||||
@ -9,7 +9,7 @@ import jakarta.servlet.http.HttpServletResponse
|
|||||||
import jakarta.validation.Valid
|
import jakarta.validation.Valid
|
||||||
import org.springframework.http.ResponseEntity
|
import org.springframework.http.ResponseEntity
|
||||||
import org.springframework.web.bind.annotation.RequestBody
|
import org.springframework.web.bind.annotation.RequestBody
|
||||||
import roomescape.auth.web.LoginRequestV2
|
import roomescape.auth.web.LoginRequest
|
||||||
import roomescape.auth.web.LoginSuccessResponse
|
import roomescape.auth.web.LoginSuccessResponse
|
||||||
import roomescape.auth.web.support.CurrentUser
|
import roomescape.auth.web.support.CurrentUser
|
||||||
import roomescape.auth.web.support.Public
|
import roomescape.auth.web.support.Public
|
||||||
@ -25,7 +25,7 @@ interface AuthAPI {
|
|||||||
ApiResponse(responseCode = "200", description = "로그인 성공시 토큰을 반환합니다."),
|
ApiResponse(responseCode = "200", description = "로그인 성공시 토큰을 반환합니다."),
|
||||||
)
|
)
|
||||||
fun login(
|
fun login(
|
||||||
@Valid @RequestBody loginRequest: LoginRequestV2,
|
@Valid @RequestBody loginRequest: LoginRequest,
|
||||||
servletRequest: HttpServletRequest
|
servletRequest: HttpServletRequest
|
||||||
): ResponseEntity<CommonApiResponse<LoginSuccessResponse>>
|
): ResponseEntity<CommonApiResponse<LoginSuccessResponse>>
|
||||||
|
|
||||||
|
|||||||
@ -21,7 +21,7 @@ class AuthController(
|
|||||||
|
|
||||||
@PostMapping("/login")
|
@PostMapping("/login")
|
||||||
override fun login(
|
override fun login(
|
||||||
loginRequest: LoginRequestV2,
|
loginRequest: LoginRequest,
|
||||||
servletRequest: HttpServletRequest
|
servletRequest: HttpServletRequest
|
||||||
): ResponseEntity<CommonApiResponse<LoginSuccessResponse>> {
|
): ResponseEntity<CommonApiResponse<LoginSuccessResponse>> {
|
||||||
val response = authService.login(request = loginRequest, context = servletRequest.toLoginContext())
|
val response = authService.login(request = loginRequest, context = servletRequest.toLoginContext())
|
||||||
|
|||||||
@ -13,7 +13,7 @@ fun HttpServletRequest.toLoginContext() = LoginContext(
|
|||||||
userAgent = this.getHeader("User-Agent")
|
userAgent = this.getHeader("User-Agent")
|
||||||
)
|
)
|
||||||
|
|
||||||
data class LoginRequestV2(
|
data class LoginRequest(
|
||||||
val account: String,
|
val account: String,
|
||||||
val password: String,
|
val password: String,
|
||||||
val principalType: PrincipalType
|
val principalType: PrincipalType
|
||||||
|
|||||||
@ -14,7 +14,7 @@ import roomescape.auth.business.CLAIM_PERMISSION_KEY
|
|||||||
import roomescape.auth.exception.AuthErrorCode
|
import roomescape.auth.exception.AuthErrorCode
|
||||||
import roomescape.auth.infrastructure.jwt.JwtUtils
|
import roomescape.auth.infrastructure.jwt.JwtUtils
|
||||||
import roomescape.auth.infrastructure.persistence.LoginHistoryRepository
|
import roomescape.auth.infrastructure.persistence.LoginHistoryRepository
|
||||||
import roomescape.auth.web.LoginRequestV2
|
import roomescape.auth.web.LoginRequest
|
||||||
import roomescape.common.dto.PrincipalType
|
import roomescape.common.dto.PrincipalType
|
||||||
import roomescape.member.exception.UserErrorCode
|
import roomescape.member.exception.UserErrorCode
|
||||||
import roomescape.member.infrastructure.persistence.UserEntity
|
import roomescape.member.infrastructure.persistence.UserEntity
|
||||||
@ -63,7 +63,7 @@ class AuthApiTest(
|
|||||||
context("실패 응답") {
|
context("실패 응답") {
|
||||||
test("비밀번호가 틀린 경우") {
|
test("비밀번호가 틀린 경우") {
|
||||||
val admin = authUtil.createAdmin(AdminFixture.default)
|
val admin = authUtil.createAdmin(AdminFixture.default)
|
||||||
val request = LoginRequestV2(admin.account, "wrong_password", PrincipalType.ADMIN)
|
val request = LoginRequest(admin.account, "wrong_password", PrincipalType.ADMIN)
|
||||||
|
|
||||||
runTest(
|
runTest(
|
||||||
using = {
|
using = {
|
||||||
@ -86,7 +86,7 @@ class AuthApiTest(
|
|||||||
|
|
||||||
test("토큰 생성 과정에서 오류가 발생하는 경우") {
|
test("토큰 생성 과정에서 오류가 발생하는 경우") {
|
||||||
val admin = authUtil.createAdmin(AdminFixture.default)
|
val admin = authUtil.createAdmin(AdminFixture.default)
|
||||||
val request = LoginRequestV2(admin.account, admin.password, PrincipalType.ADMIN)
|
val request = LoginRequest(admin.account, admin.password, PrincipalType.ADMIN)
|
||||||
|
|
||||||
every {
|
every {
|
||||||
jwtUtils.createToken(any(), any())
|
jwtUtils.createToken(any(), any())
|
||||||
@ -118,7 +118,7 @@ class AuthApiTest(
|
|||||||
it shouldNotBe user.email
|
it shouldNotBe user.email
|
||||||
}
|
}
|
||||||
|
|
||||||
val request = LoginRequestV2(invalidEmail, user.password, PrincipalType.USER)
|
val request = LoginRequest(invalidEmail, user.password, PrincipalType.USER)
|
||||||
|
|
||||||
runTest(
|
runTest(
|
||||||
using = {
|
using = {
|
||||||
@ -142,7 +142,7 @@ class AuthApiTest(
|
|||||||
it shouldNotBe admin.account
|
it shouldNotBe admin.account
|
||||||
}
|
}
|
||||||
|
|
||||||
val request = LoginRequestV2(invalidAccount, admin.password, PrincipalType.ADMIN)
|
val request = LoginRequest(invalidAccount, admin.password, PrincipalType.ADMIN)
|
||||||
|
|
||||||
runTest(
|
runTest(
|
||||||
using = {
|
using = {
|
||||||
@ -204,7 +204,7 @@ class AuthApiTest(
|
|||||||
type: PrincipalType,
|
type: PrincipalType,
|
||||||
extraAssertions: ((ValidatableResponse) -> Unit)? = null
|
extraAssertions: ((ValidatableResponse) -> Unit)? = null
|
||||||
) {
|
) {
|
||||||
val request = LoginRequestV2(account, password, type)
|
val request = LoginRequest(account, password, type)
|
||||||
|
|
||||||
runTest(
|
runTest(
|
||||||
using = {
|
using = {
|
||||||
|
|||||||
@ -5,7 +5,7 @@ import io.mockk.clearMocks
|
|||||||
import io.mockk.every
|
import io.mockk.every
|
||||||
import org.springframework.http.HttpStatus
|
import org.springframework.http.HttpStatus
|
||||||
import roomescape.auth.infrastructure.persistence.LoginHistoryRepository
|
import roomescape.auth.infrastructure.persistence.LoginHistoryRepository
|
||||||
import roomescape.auth.web.LoginRequestV2
|
import roomescape.auth.web.LoginRequest
|
||||||
import roomescape.common.dto.PrincipalType
|
import roomescape.common.dto.PrincipalType
|
||||||
import roomescape.supports.AdminFixture
|
import roomescape.supports.AdminFixture
|
||||||
import roomescape.supports.FunSpecSpringbootTest
|
import roomescape.supports.FunSpecSpringbootTest
|
||||||
@ -28,7 +28,7 @@ class FailOnSaveLoginHistoryTest(
|
|||||||
|
|
||||||
test("회원") {
|
test("회원") {
|
||||||
val user = authUtil.signup(UserFixture.createRequest)
|
val user = authUtil.signup(UserFixture.createRequest)
|
||||||
val request = LoginRequestV2(user.email, user.password, PrincipalType.USER)
|
val request = LoginRequest(user.email, user.password, PrincipalType.USER)
|
||||||
|
|
||||||
runTest(
|
runTest(
|
||||||
using = {
|
using = {
|
||||||
@ -45,7 +45,7 @@ class FailOnSaveLoginHistoryTest(
|
|||||||
|
|
||||||
test("관리자") {
|
test("관리자") {
|
||||||
val admin = authUtil.createAdmin(AdminFixture.default)
|
val admin = authUtil.createAdmin(AdminFixture.default)
|
||||||
val request = LoginRequestV2(admin.account, admin.password, PrincipalType.ADMIN)
|
val request = LoginRequest(admin.account, admin.password, PrincipalType.ADMIN)
|
||||||
|
|
||||||
runTest(
|
runTest(
|
||||||
using = {
|
using = {
|
||||||
|
|||||||
@ -14,7 +14,7 @@ import org.springframework.http.HttpStatus
|
|||||||
import org.springframework.http.MediaType
|
import org.springframework.http.MediaType
|
||||||
import roomescape.admin.infrastructure.persistence.AdminEntity
|
import roomescape.admin.infrastructure.persistence.AdminEntity
|
||||||
import roomescape.admin.infrastructure.persistence.AdminRepository
|
import roomescape.admin.infrastructure.persistence.AdminRepository
|
||||||
import roomescape.auth.web.LoginRequestV2
|
import roomescape.auth.web.LoginRequest
|
||||||
import roomescape.common.dto.PrincipalType
|
import roomescape.common.dto.PrincipalType
|
||||||
import roomescape.common.exception.ErrorCode
|
import roomescape.common.exception.ErrorCode
|
||||||
import roomescape.member.infrastructure.persistence.UserEntity
|
import roomescape.member.infrastructure.persistence.UserEntity
|
||||||
@ -49,7 +49,7 @@ class AuthUtil(
|
|||||||
if (adminRepository.findByAccount(admin.account) == null) {
|
if (adminRepository.findByAccount(admin.account) == null) {
|
||||||
adminRepository.save(admin)
|
adminRepository.save(admin)
|
||||||
}
|
}
|
||||||
val requestBody = LoginRequestV2(admin.account, admin.password, PrincipalType.ADMIN)
|
val requestBody = LoginRequest(admin.account, admin.password, PrincipalType.ADMIN)
|
||||||
|
|
||||||
return Given {
|
return Given {
|
||||||
contentType(MediaType.APPLICATION_JSON_VALUE)
|
contentType(MediaType.APPLICATION_JSON_VALUE)
|
||||||
@ -72,7 +72,7 @@ class AuthUtil(
|
|||||||
|
|
||||||
return Given {
|
return Given {
|
||||||
contentType(MediaType.APPLICATION_JSON_VALUE)
|
contentType(MediaType.APPLICATION_JSON_VALUE)
|
||||||
body(LoginRequestV2(account = user.email, password = user.password, principalType = PrincipalType.USER))
|
body(LoginRequest(account = user.email, password = user.password, principalType = PrincipalType.USER))
|
||||||
} When {
|
} When {
|
||||||
post("/auth/login")
|
post("/auth/login")
|
||||||
} Then {
|
} Then {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user