Implement token invalidation

This commit is contained in:
Kirill Kamakin
2022-04-05 18:29:09 +05:00
parent 57f4ec4e22
commit 76a49a41a1
10 changed files with 91 additions and 86 deletions

View File

@@ -13,4 +13,6 @@ interface AuthRepo {
suspend fun requireAuthHeader(): String
suspend fun logout()
fun invalidateAuthHeader(header: String)
}

View File

@@ -37,12 +37,14 @@ class AuthRepoImpl @Inject constructor(
}.getOrThrow() // Throw error to show it to user
}
override suspend fun getAuthHeader(): String? {
override suspend fun getAuthHeader(): String? = runCatchingExceptCancel {
Timber.v("getAuthHeader() called")
return currentAccount()
currentAccount()
?.let { getAuthToken(it) }
?.let { AUTH_HEADER_FORMAT.format(it) }
}
}.onFailure {
Timber.e(it, "getAuthHeader: can't request auth header")
}.getOrNull()
private suspend fun getAuthToken(account: Account?): String? {
return account?.let { accountManagerInteractor.getAuthToken(it) }
@@ -67,6 +69,16 @@ class AuthRepoImpl @Inject constructor(
accountManagerInteractor.removeAccount(account)
}
override fun invalidateAuthHeader(header: String) {
Timber.v("invalidateAuthHeader() called with: header = $header")
val token = header.substringAfter("Bearer ")
if (token == header) {
Timber.w("invalidateAuthHeader: can't find token in $header")
} else {
accountManagerInteractor.invalidateAuthToken(token)
}
}
companion object {
private const val AUTH_HEADER_FORMAT = "Bearer %s"
}