diff --git a/tosspay-mock/src/main/kotlin/com/sangdol/tosspaymock/web/supports/SecretKeyInterceptor.kt b/tosspay-mock/src/main/kotlin/com/sangdol/tosspaymock/web/supports/SecretKeyInterceptor.kt new file mode 100644 index 00000000..9608478d --- /dev/null +++ b/tosspay-mock/src/main/kotlin/com/sangdol/tosspaymock/web/supports/SecretKeyInterceptor.kt @@ -0,0 +1,39 @@ +package com.sangdol.tosspaymock.web.supports + +import com.sangdol.tosspaymock.exception.TosspayException +import com.sangdol.tosspaymock.exception.code.TosspayConfirmErrorCode +import jakarta.servlet.http.HttpServletRequest +import jakarta.servlet.http.HttpServletResponse +import org.springframework.http.HttpHeaders +import org.springframework.stereotype.Component +import org.springframework.web.method.HandlerMethod +import org.springframework.web.servlet.HandlerInterceptor +import java.util.* + +@Component +class SecretKeyInterceptor : HandlerInterceptor { + + companion object { + val basicAuthRegex = Regex("Basic (.*)") + } + + override fun preHandle( + request: HttpServletRequest, + response: HttpServletResponse, + handler: Any + ): Boolean { + if (handler !is HandlerMethod) return true + + val basicAuthSecretKey: String = request.getHeader(HttpHeaders.AUTHORIZATION) + ?: throw TosspayException(TosspayConfirmErrorCode.INVALID_API_KEY) + + return try { + val secretKey = basicAuthRegex.find(basicAuthSecretKey)!!.groupValues[1] + Base64.getDecoder().decode(secretKey) + + true + } catch (_: Exception) { + throw TosspayException(TosspayConfirmErrorCode.UNAUTHORIZED_KEY) + } + } +} diff --git a/tosspay-mock/src/main/kotlin/com/sangdol/tosspaymock/web/supports/TosspayMvcConfig.kt b/tosspay-mock/src/main/kotlin/com/sangdol/tosspaymock/web/supports/TosspayMvcConfig.kt new file mode 100644 index 00000000..952b49f8 --- /dev/null +++ b/tosspay-mock/src/main/kotlin/com/sangdol/tosspaymock/web/supports/TosspayMvcConfig.kt @@ -0,0 +1,15 @@ +package com.sangdol.tosspaymock.web.supports + +import org.springframework.context.annotation.Configuration +import org.springframework.web.servlet.config.annotation.InterceptorRegistry +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer + +@Configuration +class TosspayMvcConfig( + private val secretKeyInterceptor: SecretKeyInterceptor +) : WebMvcConfigurer { + + override fun addInterceptors(registry: InterceptorRegistry) { + registry.addInterceptor(secretKeyInterceptor) + } +}