Skip to content

Instantly share code, notes, and snippets.

@Thelouras58
Created February 5, 2023 17:39
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Thelouras58/c90ff909f75bb2046201618d15d20061 to your computer and use it in GitHub Desktop.
Save Thelouras58/c90ff909f75bb2046201618d15d20061 to your computer and use it in GitHub Desktop.
Android: Auth2Interceptor
class AuthInterceptorImpl @Inject constructor(
private val sessionManager: SessionManager
) : Interceptor {
override fun intercept(chain: Interceptor.Chain): Response {
val request = chain.request()
var accessToken = sessionManager.getAccessToken()
val response = chain.proceed(newRequestWithAccessToken(accessToken, request))
if (response.code == HttpURLConnection.HTTP_UNAUTHORIZED) {
val newAccessToken = sessionManager.getAccessToken()
if (newAccessToken != accessToken) {
return chain.proceed(newRequestWithAccessToken(accessToken, request))
} else {
accessToken = refreshToken()
if (accessToken.isNullOrBlank()) {
sessionManager.logout()
return response
}
return chain.proceed(newRequestWithAccessToken(accessToken, request))
}
}
return response
}
private fun newRequestWithAccessToken(accessToken: String?, request: Request): Request =
request.newBuilder()
.header("Authorization", "Bearer $accessToken")
.build()
private fun refreshToken(): String? {
synchronized(this) {
val refreshToken = sessionManager.getRefreshToken()
refreshToken?.let {
return sessionManager.refreshToken(refreshToken)
} ?: return null
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment