From eaf81ef85d8f48cbeb1db53a6962df7e8138ab45 Mon Sep 17 00:00:00 2001 From: ashxom Date: Fri, 19 Jun 2026 09:42:56 +0900 Subject: [PATCH 1/9] =?UTF-8?q?fix=20::=20=ED=86=A0=ED=81=B0=20=EC=9E=AC?= =?UTF-8?q?=EB=B0=9C=EA=B8=89=20=EC=A4=91=EB=B3=B5=20=ED=98=B8=EC=B6=9C=20?= =?UTF-8?q?=EB=B0=A9=EC=A7=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../network/authenticator/JwtAuthenticator.kt | 55 ++++++++++++++----- 1 file changed, 41 insertions(+), 14 deletions(-) diff --git a/core/jwt/src/main/java/team/aliens/dms/android/core/jwt/network/authenticator/JwtAuthenticator.kt b/core/jwt/src/main/java/team/aliens/dms/android/core/jwt/network/authenticator/JwtAuthenticator.kt index cf6e2b24e..4d9c5b836 100644 --- a/core/jwt/src/main/java/team/aliens/dms/android/core/jwt/network/authenticator/JwtAuthenticator.kt +++ b/core/jwt/src/main/java/team/aliens/dms/android/core/jwt/network/authenticator/JwtAuthenticator.kt @@ -21,26 +21,48 @@ class JwtAuthenticator @Inject constructor( ): Request? { val request = response.request - if (request.shouldBeIgnored() || response.retryCount >= MAX_AUTH_RETRY_COUNT) { + if ( + request.shouldBeIgnored() || + response.retryCount >= MAX_AUTH_RETRY_COUNT + ) { return null } - val newAuthorization = refreshAuthorization() + val failedAuthorization = request.header(AUTHORIZATION_HEADER) + val newAuthorization = refreshAuthorization( + failedAuthorization = failedAuthorization, + ) return newAuthorization - ?.takeUnless { refreshedAuthorization -> - refreshedAuthorization == request.header(AUTHORIZATION_HEADER) + ?.takeUnless { authorization -> + authorization == failedAuthorization } - ?.let { refreshedAuthorization -> + ?.let { authorization -> request.newBuilder() - .header(AUTHORIZATION_HEADER, refreshedAuthorization) + .header(AUTHORIZATION_HEADER, authorization) .build() } } - private fun refreshAuthorization(): String? { + @Synchronized + private fun refreshAuthorization( + failedAuthorization: String?, + ): String? { + val currentAuthorization = runCatching { + "Bearer ${jwtProvider.cachedAccessToken.value}" + }.getOrNull() + + if ( + currentAuthorization != null && + currentAuthorization != failedAuthorization + ) { + return currentAuthorization + } + val refreshed = runCatching { - runBlocking { jwtProvider.refreshSession() } + runBlocking { + jwtProvider.refreshSession() + } }.getOrDefault(false) if (!refreshed) { @@ -52,12 +74,16 @@ class JwtAuthenticator @Inject constructor( }.getOrNull() } - private fun Request.shouldBeIgnored(): Boolean = ignoreRequests.requests.any { ignoreRequest -> - val path = this@shouldBeIgnored.url.encodedPath - val method = this@shouldBeIgnored.method.toHttpMethod() + private fun Request.shouldBeIgnored(): Boolean = + ignoreRequests.requests.any { ignoreRequest -> + val path = url.encodedPath + val method = method.toHttpMethod() + val isIgnoredRequest = + path.contains(ignoreRequest.path) && + method == ignoreRequest.method - path.contains(ignoreRequest.path) && method == ignoreRequest.method || checkS3Request(url = this@shouldBeIgnored.url.toString()) - } + isIgnoredRequest || checkS3Request(url.toString()) + } private val Response.retryCount: Int get() { @@ -72,7 +98,8 @@ class JwtAuthenticator @Inject constructor( return count } - private fun checkS3Request(url: String): Boolean = url.contains(ResourceKeys.IMAGE_URL) + private fun checkS3Request(url: String): Boolean = + url.contains(ResourceKeys.IMAGE_URL) private companion object { const val AUTHORIZATION_HEADER = "authorization" From 5feacf533597212c391ac723b84a7f504a92cce2 Mon Sep 17 00:00:00 2001 From: ashxom Date: Fri, 19 Jun 2026 09:47:24 +0900 Subject: [PATCH 2/9] =?UTF-8?q?fix=20::=20=EC=84=B8=EC=85=98=20=EB=B3=B5?= =?UTF-8?q?=EA=B5=AC=20=EC=84=B1=EA=B3=B5=20=EC=A1=B0=EA=B1=B4=EC=9D=84=20?= =?UTF-8?q?=EC=95=A1=EC=84=B8=EC=8A=A4=20=ED=86=A0=ED=81=B0=20=EA=B8=B0?= =?UTF-8?q?=EC=A4=80=EC=9C=BC=EB=A1=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../team/aliens/dms/android/core/jwt/JwtProviderImpl.kt | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/core/jwt/src/main/java/team/aliens/dms/android/core/jwt/JwtProviderImpl.kt b/core/jwt/src/main/java/team/aliens/dms/android/core/jwt/JwtProviderImpl.kt index bc42c32f7..5b6190a05 100644 --- a/core/jwt/src/main/java/team/aliens/dms/android/core/jwt/JwtProviderImpl.kt +++ b/core/jwt/src/main/java/team/aliens/dms/android/core/jwt/JwtProviderImpl.kt @@ -90,14 +90,16 @@ internal class JwtProviderImpl @Inject constructor( override suspend fun resolveSession(): Boolean { tokenMutex.withLock { val accessToken = _cachedAccessToken + if (accessToken != null && !accessToken.isExpired()) { refreshTokenAbility() return true } - reissueTokensLocked() + val reissued = reissueTokensLocked() refreshTokenAbility() - return checkIsAccessTokenAvailable() || checkIsRefreshTokenAvailable() + + return reissued && checkIsAccessTokenAvailable() } } From 06ed34a2f4f766953d3bc5ce2fc63f33211c2269 Mon Sep 17 00:00:00 2001 From: ashxom Date: Fri, 19 Jun 2026 09:47:45 +0900 Subject: [PATCH 3/9] =?UTF-8?q?fix=20::=20=ED=86=A0=ED=81=B0=20=EC=9E=AC?= =?UTF-8?q?=EB=B0=9C=EA=B8=89=20=EC=84=B1=EA=B3=B5=20=EC=97=AC=EB=B6=80=20?= =?UTF-8?q?=ED=8C=90=EB=8B=A8=20=EB=A1=9C=EC=A7=81=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/team/aliens/dms/android/core/jwt/JwtProviderImpl.kt | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/core/jwt/src/main/java/team/aliens/dms/android/core/jwt/JwtProviderImpl.kt b/core/jwt/src/main/java/team/aliens/dms/android/core/jwt/JwtProviderImpl.kt index 5b6190a05..1c366fc69 100644 --- a/core/jwt/src/main/java/team/aliens/dms/android/core/jwt/JwtProviderImpl.kt +++ b/core/jwt/src/main/java/team/aliens/dms/android/core/jwt/JwtProviderImpl.kt @@ -105,9 +105,10 @@ internal class JwtProviderImpl @Inject constructor( override suspend fun refreshSession(): Boolean { tokenMutex.withLock { - reissueTokensLocked() + val reissued = reissueTokensLocked() refreshTokenAbility() - return checkIsAccessTokenAvailable() || checkIsRefreshTokenAvailable() + + return reissued && checkIsAccessTokenAvailable() } } From 1ab07c7a0829b4a93b1dc405bc267ad1dafa10e9 Mon Sep 17 00:00:00 2001 From: ashxom Date: Fri, 19 Jun 2026 09:48:44 +0900 Subject: [PATCH 4/9] =?UTF-8?q?fix=20::=20=20JWT=20=EC=84=B8=EC=85=98=20?= =?UTF-8?q?=EA=B0=B1=EC=8B=A0=20=EC=84=B1=EA=B3=B5=20=EC=A1=B0=EA=B1=B4=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dms/android/core/jwt/JwtProviderImpl.kt | 128 +++++++++++------- 1 file changed, 77 insertions(+), 51 deletions(-) diff --git a/core/jwt/src/main/java/team/aliens/dms/android/core/jwt/JwtProviderImpl.kt b/core/jwt/src/main/java/team/aliens/dms/android/core/jwt/JwtProviderImpl.kt index 1c366fc69..6227b7a1e 100644 --- a/core/jwt/src/main/java/team/aliens/dms/android/core/jwt/JwtProviderImpl.kt +++ b/core/jwt/src/main/java/team/aliens/dms/android/core/jwt/JwtProviderImpl.kt @@ -22,9 +22,11 @@ internal class JwtProviderImpl @Inject constructor( private val tokenMutex = Mutex() private var _cachedAccessToken: AccessToken? = null + override val cachedAccessToken: AccessToken get() { - val accessToken = _cachedAccessToken ?: throw CannotUseAccessTokenException() + val accessToken = + _cachedAccessToken ?: throw CannotUseAccessTokenException() if (accessToken.isExpired()) { throw CannotUseAccessTokenException() @@ -33,25 +35,29 @@ internal class JwtProviderImpl @Inject constructor( return accessToken } - private val _isCachedAccessTokenAvailable: MutableStateFlow = + private val _isCachedAccessTokenAvailable = MutableStateFlow(checkIsAccessTokenAvailable()) + override val isCachedAccessTokenAvailable: StateFlow = _isCachedAccessTokenAvailable.asStateFlow() private var _cachedRefreshToken: RefreshToken? = null + override val cachedRefreshToken: RefreshToken get() { - if (_cachedRefreshToken == null) { - throw CannotUseRefreshTokenException() - } - if (_cachedRefreshToken!!.isExpired()) { + val refreshToken = + _cachedRefreshToken ?: throw CannotUseRefreshTokenException() + + if (refreshToken.isExpired()) { throw CannotUseRefreshTokenException() } - return _cachedRefreshToken!! + + return refreshToken } - private val _isCachedRefreshTokenAvailable: MutableStateFlow = + private val _isCachedRefreshTokenAvailable = MutableStateFlow(checkIsRefreshTokenAvailable()) + override val isCachedRefreshTokenAvailable: StateFlow = _isCachedRefreshTokenAvailable.asStateFlow() @@ -63,12 +69,13 @@ internal class JwtProviderImpl @Inject constructor( runCatching { jwtDataStoreDataSource.loadTokens() }.onSuccess { tokens -> - this@JwtProviderImpl._cachedAccessToken = tokens.accessToken - this@JwtProviderImpl._cachedRefreshToken = tokens.refreshToken + _cachedAccessToken = tokens.accessToken + _cachedRefreshToken = tokens.refreshToken }.onFailure { exception -> - Log.e("JwtProvider", "Failed to persist tokens", exception) + Log.e("JwtProvider", "Failed to load tokens", exception) } - this.refreshTokenAbility() + + refreshTokenAbility() } override fun updateTokens(tokens: Tokens) { @@ -87,49 +94,45 @@ internal class JwtProviderImpl @Inject constructor( } } - override suspend fun resolveSession(): Boolean { + override suspend fun resolveSession(): Boolean = tokenMutex.withLock { val accessToken = _cachedAccessToken if (accessToken != null && !accessToken.isExpired()) { refreshTokenAbility() - return true + return@withLock true } val reissued = reissueTokensLocked() refreshTokenAbility() - return reissued && checkIsAccessTokenAvailable() + reissued && checkIsAccessTokenAvailable() } - } - override suspend fun refreshSession(): Boolean { + override suspend fun refreshSession(): Boolean = tokenMutex.withLock { val reissued = reissueTokensLocked() refreshTokenAbility() - return reissued && checkIsAccessTokenAvailable() + reissued && checkIsAccessTokenAvailable() } - } private fun refreshTokenAbility() { - _isCachedAccessTokenAvailable.value = checkIsAccessTokenAvailable() - _isCachedRefreshTokenAvailable.value = checkIsRefreshTokenAvailable() + _isCachedAccessTokenAvailable.value = + checkIsAccessTokenAvailable() + _isCachedRefreshTokenAvailable.value = + checkIsRefreshTokenAvailable() } - private fun checkIsAccessTokenAvailable(): Boolean { - if (this._cachedAccessToken == null) { - return false - } - return !_cachedAccessToken!!.isExpired() - } + private fun checkIsAccessTokenAvailable(): Boolean = + _cachedAccessToken?.let { accessToken -> + !accessToken.isExpired() + } ?: false - private fun checkIsRefreshTokenAvailable(): Boolean { - if (this._cachedRefreshToken == null) { - return false - } - return !_cachedRefreshToken!!.isExpired() - } + private fun checkIsRefreshTokenAvailable(): Boolean = + _cachedRefreshToken?.let { refreshToken -> + !refreshToken.isExpired() + } ?: false private suspend fun reissueTokensLocked(): Boolean { val refreshToken = _cachedRefreshToken @@ -141,13 +144,20 @@ internal class JwtProviderImpl @Inject constructor( } return try { - val tokens = jwtReissueManager(refreshToken = refreshToken.value) + val tokens = jwtReissueManager( + refreshToken = refreshToken.value, + ) + updateTokensLocked(tokens = tokens) true } catch (exception: CannotReissueTokenException) { - if (exception.statusCode == 401 || exception.statusCode == 404) { + if ( + exception.statusCode == 401 || + exception.statusCode == 404 + ) { clearCachesLocked() } + false } } @@ -156,19 +166,27 @@ internal class JwtProviderImpl @Inject constructor( val previousAccessToken = _cachedAccessToken val previousRefreshToken = _cachedRefreshToken - this._cachedAccessToken = tokens.accessToken - this._cachedRefreshToken = tokens.refreshToken - this.refreshTokenAbility() + _cachedAccessToken = tokens.accessToken + _cachedRefreshToken = tokens.refreshToken + refreshTokenAbility() runCatchingCancellable { jwtDataStoreDataSource.storeTokens(tokens = tokens) }.onFailure { exception -> - this._cachedAccessToken = previousAccessToken - this._cachedRefreshToken = previousRefreshToken - this.refreshTokenAbility() + _cachedAccessToken = previousAccessToken + _cachedRefreshToken = previousRefreshToken + refreshTokenAbility() + + Log.e( + "JwtProvider", + "Failed to store tokens", + exception, + ) - Log.e("JwtProvider", "Failed to store tokens", exception) - throw IllegalStateException("Failed to persist tokens", exception) + throw IllegalStateException( + "Failed to persist tokens", + exception, + ) } } @@ -176,19 +194,27 @@ internal class JwtProviderImpl @Inject constructor( val previousAccessToken = _cachedAccessToken val previousRefreshToken = _cachedRefreshToken - this._cachedAccessToken = null - this._cachedRefreshToken = null - this.refreshTokenAbility() + _cachedAccessToken = null + _cachedRefreshToken = null + refreshTokenAbility() runCatchingCancellable { jwtDataStoreDataSource.clearTokens() }.onFailure { exception -> - this._cachedAccessToken = previousAccessToken - this._cachedRefreshToken = previousRefreshToken - this.refreshTokenAbility() + _cachedAccessToken = previousAccessToken + _cachedRefreshToken = previousRefreshToken + refreshTokenAbility() + + Log.e( + "JwtProvider", + "Failed to clear tokens", + exception, + ) - Log.e("JwtProvider", "Failed to clear tokens", exception) - throw IllegalStateException("Failed to clear persisted tokens", exception) + throw IllegalStateException( + "Failed to clear persisted tokens", + exception, + ) } } } From eb71c5dd07ecf968a323b804311fc6b1f131ad44 Mon Sep 17 00:00:00 2001 From: ashxom Date: Fri, 19 Jun 2026 09:50:06 +0900 Subject: [PATCH 5/9] =?UTF-8?q?fix=20::=20=ED=86=A0=ED=81=B0=20=EC=9E=AC?= =?UTF-8?q?=EB=B0=9C=EA=B8=89=20=EC=9D=91=EB=8B=B5=20=EB=A6=AC=EC=86=8C?= =?UTF-8?q?=EC=8A=A4=20=EB=88=84=EC=88=98=20=EB=B0=A9=EC=A7=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/jwt/network/JwtReissueManager.kt | 44 ++++++++++++------- 1 file changed, 29 insertions(+), 15 deletions(-) diff --git a/core/jwt/src/main/java/team/aliens/dms/android/core/jwt/network/JwtReissueManager.kt b/core/jwt/src/main/java/team/aliens/dms/android/core/jwt/network/JwtReissueManager.kt index dff698ddb..07dc61816 100644 --- a/core/jwt/src/main/java/team/aliens/dms/android/core/jwt/network/JwtReissueManager.kt +++ b/core/jwt/src/main/java/team/aliens/dms/android/core/jwt/network/JwtReissueManager.kt @@ -10,6 +10,7 @@ import okhttp3.RequestBody.Companion.toRequestBody import okhttp3.ResponseBody import okhttp3.logging.HttpLoggingInterceptor import team.aliens.dms.android.core.jwt.Tokens +import team.aliens.dms.android.core.jwt.di.TokenReissueUrl import team.aliens.dms.android.core.jwt.network.exception.CannotReissueTokenException import team.aliens.dms.android.core.jwt.network.model.TokensResponse import team.aliens.dms.android.core.jwt.toModel @@ -17,7 +18,7 @@ import team.aliens.dms.android.core.network.di.DefaultHttpLoggingInterceptor import javax.inject.Inject class JwtReissueManager @Inject constructor( - private val reissueUrl: String, + @TokenReissueUrl private val reissueUrl: String, @DefaultHttpLoggingInterceptor private val httpLoggingInterceptor: HttpLoggingInterceptor, baseHttpClient: OkHttpClient, ) { @@ -27,27 +28,40 @@ class JwtReissueManager @Inject constructor( }.build() } - suspend operator fun invoke(refreshToken: String): Tokens = withContext(Dispatchers.IO) { + suspend operator fun invoke( + refreshToken: String, + ): Tokens = withContext(Dispatchers.IO) { val request = buildTokenReissueRequest(refreshToken) - val response = client.newCall(request).execute() - if (response.isSuccessful) { - response.body.toTokensResponse().toModel() - } else { - throw CannotReissueTokenException(statusCode = response.code) + client.newCall(request).execute().use { response -> + if (response.isSuccessful) { + response.body.toTokensResponse().toModel() + } else { + throw CannotReissueTokenException( + statusCode = response.code, + ) + } } } private fun ResponseBody?.toTokensResponse(): TokensResponse { requireNotNull(this) - return Gson().fromJson(this.string(), TokensResponse::class.java) + return Gson().fromJson(string(), TokensResponse::class.java) } - private fun buildTokenReissueRequest(refreshToken: String): Request = - Request.Builder().url(reissueUrl).put( - body = String().toRequestBody("application/json".toMediaType()), - ).addHeader( - name = "refresh-token", - value = refreshToken, - ).build() + private fun buildTokenReissueRequest( + refreshToken: String, + ): Request = + Request.Builder() + .url(reissueUrl) + .put( + body = String().toRequestBody( + "application/json".toMediaType(), + ), + ) + .addHeader( + name = "refresh-token", + value = refreshToken, + ) + .build() } From d1238f8de2048a04b1725a5c9ceb475e51ecfcae Mon Sep 17 00:00:00 2001 From: ashxom Date: Fri, 10 Apr 2026 09:15:08 +0900 Subject: [PATCH 6/9] =?UTF-8?q?refactor=20::=20ktlint=20=EC=A0=81=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../android/core/jwt/network/authenticator/JwtAuthenticator.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/jwt/src/main/java/team/aliens/dms/android/core/jwt/network/authenticator/JwtAuthenticator.kt b/core/jwt/src/main/java/team/aliens/dms/android/core/jwt/network/authenticator/JwtAuthenticator.kt index 4d9c5b836..f49b2ea77 100644 --- a/core/jwt/src/main/java/team/aliens/dms/android/core/jwt/network/authenticator/JwtAuthenticator.kt +++ b/core/jwt/src/main/java/team/aliens/dms/android/core/jwt/network/authenticator/JwtAuthenticator.kt @@ -80,7 +80,7 @@ class JwtAuthenticator @Inject constructor( val method = method.toHttpMethod() val isIgnoredRequest = path.contains(ignoreRequest.path) && - method == ignoreRequest.method + method == ignoreRequest.method isIgnoredRequest || checkS3Request(url.toString()) } From 8488a7757320ae9eb619a6d71c9b26d7596da8c4 Mon Sep 17 00:00:00 2001 From: ashxom Date: Fri, 19 Jun 2026 21:47:47 +0900 Subject: [PATCH 7/9] =?UTF-8?q?fix=20::=20Authenticator=20S3=20=EC=9A=94?= =?UTF-8?q?=EC=B2=AD=20=EC=98=88=EC=99=B8=20=EC=B2=98=EB=A6=AC=20=EC=A1=B0?= =?UTF-8?q?=EA=B1=B4=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../network/authenticator/JwtAuthenticator.kt | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/core/jwt/src/main/java/team/aliens/dms/android/core/jwt/network/authenticator/JwtAuthenticator.kt b/core/jwt/src/main/java/team/aliens/dms/android/core/jwt/network/authenticator/JwtAuthenticator.kt index f49b2ea77..3f8f9bdfa 100644 --- a/core/jwt/src/main/java/team/aliens/dms/android/core/jwt/network/authenticator/JwtAuthenticator.kt +++ b/core/jwt/src/main/java/team/aliens/dms/android/core/jwt/network/authenticator/JwtAuthenticator.kt @@ -75,15 +75,14 @@ class JwtAuthenticator @Inject constructor( } private fun Request.shouldBeIgnored(): Boolean = - ignoreRequests.requests.any { ignoreRequest -> - val path = url.encodedPath - val method = method.toHttpMethod() - val isIgnoredRequest = - path.contains(ignoreRequest.path) && - method == ignoreRequest.method - - isIgnoredRequest || checkS3Request(url.toString()) - } + checkS3Request(url.toString()) || + ignoreRequests.requests.any { ignoreRequest -> + val path = url.encodedPath + val requestMethod = method.toHttpMethod() + + path.contains(ignoreRequest.path) && + requestMethod == ignoreRequest.method + } private val Response.retryCount: Int get() { From 372802ae6aa55c1ef49119b40d9ad544e6dc8b1b Mon Sep 17 00:00:00 2001 From: ashxom Date: Fri, 19 Jun 2026 21:48:13 +0900 Subject: [PATCH 8/9] =?UTF-8?q?fix=20::=20Interceptor=20S3=20=EC=9A=94?= =?UTF-8?q?=EC=B2=AD=20=ED=86=A0=ED=81=B0=20=EC=B2=98=EB=A6=AC=20=EC=A0=9C?= =?UTF-8?q?=EC=99=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../jwt/network/interceptor/JwtInterceptor.kt | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/core/jwt/src/main/java/team/aliens/dms/android/core/jwt/network/interceptor/JwtInterceptor.kt b/core/jwt/src/main/java/team/aliens/dms/android/core/jwt/network/interceptor/JwtInterceptor.kt index f9f3c5271..3dd8989a4 100644 --- a/core/jwt/src/main/java/team/aliens/dms/android/core/jwt/network/interceptor/JwtInterceptor.kt +++ b/core/jwt/src/main/java/team/aliens/dms/android/core/jwt/network/interceptor/JwtInterceptor.kt @@ -39,11 +39,18 @@ class JwtInterceptor @Inject constructor( value = "Bearer ${jwtProvider.cachedAccessToken.value}", ) - private fun Request.shouldBeIgnored(): Boolean = ignoreRequests.requests.any { ignoreRequest -> - val path = this@shouldBeIgnored.url.encodedPath - val method = this@shouldBeIgnored.method.toHttpMethod() + private fun Request.shouldBeIgnored(): Boolean { + if (checkS3Request(url.toString())) { + return true + } - path.contains(ignoreRequest.path) && method == ignoreRequest.method || checkS3Request(url = this@shouldBeIgnored.url.toString()) + return ignoreRequests.requests.any { ignoreRequest -> + val path = url.encodedPath + val requestMethod = method.toHttpMethod() + + path.contains(ignoreRequest.path) && + requestMethod == ignoreRequest.method + } } private fun checkS3Request(url: String): Boolean { From d87499548edfaac70fb7392e31d363909e3f2584 Mon Sep 17 00:00:00 2001 From: ashxom Date: Fri, 19 Jun 2026 21:48:47 +0900 Subject: [PATCH 9/9] =?UTF-8?q?refactor=20::=20ktlint=20format=20=EC=A0=81?= =?UTF-8?q?=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../jwt/network/authenticator/JwtAuthenticator.kt | 12 ++++++------ .../core/jwt/network/interceptor/JwtInterceptor.kt | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/core/jwt/src/main/java/team/aliens/dms/android/core/jwt/network/authenticator/JwtAuthenticator.kt b/core/jwt/src/main/java/team/aliens/dms/android/core/jwt/network/authenticator/JwtAuthenticator.kt index 3f8f9bdfa..6c5cdfc60 100644 --- a/core/jwt/src/main/java/team/aliens/dms/android/core/jwt/network/authenticator/JwtAuthenticator.kt +++ b/core/jwt/src/main/java/team/aliens/dms/android/core/jwt/network/authenticator/JwtAuthenticator.kt @@ -76,13 +76,13 @@ class JwtAuthenticator @Inject constructor( private fun Request.shouldBeIgnored(): Boolean = checkS3Request(url.toString()) || - ignoreRequests.requests.any { ignoreRequest -> - val path = url.encodedPath - val requestMethod = method.toHttpMethod() + ignoreRequests.requests.any { ignoreRequest -> + val path = url.encodedPath + val requestMethod = method.toHttpMethod() - path.contains(ignoreRequest.path) && - requestMethod == ignoreRequest.method - } + path.contains(ignoreRequest.path) && + requestMethod == ignoreRequest.method + } private val Response.retryCount: Int get() { diff --git a/core/jwt/src/main/java/team/aliens/dms/android/core/jwt/network/interceptor/JwtInterceptor.kt b/core/jwt/src/main/java/team/aliens/dms/android/core/jwt/network/interceptor/JwtInterceptor.kt index 3dd8989a4..f39b9a4cf 100644 --- a/core/jwt/src/main/java/team/aliens/dms/android/core/jwt/network/interceptor/JwtInterceptor.kt +++ b/core/jwt/src/main/java/team/aliens/dms/android/core/jwt/network/interceptor/JwtInterceptor.kt @@ -49,7 +49,7 @@ class JwtInterceptor @Inject constructor( val requestMethod = method.toHttpMethod() path.contains(ignoreRequest.path) && - requestMethod == ignoreRequest.method + requestMethod == ignoreRequest.method } }