Ensure authentication token is always sent when it exists (#193)
* Ensure auth token is sent if it is present * Allow using login token for other requests while API token is created * Update version code
This commit is contained in:
@@ -1,6 +0,0 @@
|
||||
package gq.kirmanak.mealient.datasource
|
||||
|
||||
interface SignOutHandler {
|
||||
|
||||
fun signOut()
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
package gq.kirmanak.mealient.datasource
|
||||
|
||||
fun interface TokenChangeListener {
|
||||
|
||||
fun onTokenChange()
|
||||
}
|
||||
@@ -6,7 +6,7 @@ import dagger.Provides
|
||||
import dagger.hilt.InstallIn
|
||||
import dagger.hilt.components.SingletonComponent
|
||||
import dagger.multibindings.IntoSet
|
||||
import gq.kirmanak.mealient.datasource.SignOutHandler
|
||||
import gq.kirmanak.mealient.datasource.TokenChangeListener
|
||||
import io.ktor.client.HttpClient
|
||||
import javax.inject.Singleton
|
||||
|
||||
@@ -37,5 +37,5 @@ internal interface KtorModule {
|
||||
fun bindKtorClientBuilder(impl: KtorClientBuilderImpl) : KtorClientBuilder
|
||||
|
||||
@Binds
|
||||
fun bindSignOutHandler(impl: SignOutHandlerKtor) : SignOutHandler
|
||||
fun bindSignOutHandler(impl: TokenChangeListenerKtor): TokenChangeListener
|
||||
}
|
||||
@@ -1,20 +0,0 @@
|
||||
package gq.kirmanak.mealient.datasource.ktor
|
||||
|
||||
import gq.kirmanak.mealient.datasource.SignOutHandler
|
||||
import io.ktor.client.HttpClient
|
||||
import io.ktor.client.plugins.auth.Auth
|
||||
import io.ktor.client.plugins.auth.providers.BearerAuthProvider
|
||||
import io.ktor.client.plugins.plugin
|
||||
import javax.inject.Inject
|
||||
|
||||
internal class SignOutHandlerKtor @Inject constructor(
|
||||
private val httpClient: HttpClient,
|
||||
) : SignOutHandler {
|
||||
|
||||
override fun signOut() {
|
||||
httpClient.plugin(Auth)
|
||||
.providers
|
||||
.filterIsInstance<BearerAuthProvider>()
|
||||
.forEach { it.clearToken() }
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
package gq.kirmanak.mealient.datasource.ktor
|
||||
|
||||
import gq.kirmanak.mealient.datasource.TokenChangeListener
|
||||
import gq.kirmanak.mealient.logging.Logger
|
||||
import io.ktor.client.HttpClient
|
||||
import io.ktor.client.plugins.auth.Auth
|
||||
import io.ktor.client.plugins.auth.providers.BearerAuthProvider
|
||||
import io.ktor.client.plugins.plugin
|
||||
import javax.inject.Inject
|
||||
|
||||
internal class TokenChangeListenerKtor @Inject constructor(
|
||||
private val httpClient: HttpClient,
|
||||
private val logger: Logger,
|
||||
) : TokenChangeListener {
|
||||
|
||||
override fun onTokenChange() {
|
||||
logger.v { "onTokenChange() called" }
|
||||
httpClient.plugin(Auth)
|
||||
.providers
|
||||
.filterIsInstance<BearerAuthProvider>()
|
||||
.forEach {
|
||||
logger.d { "onTokenChange(): removing the token" }
|
||||
it.clearToken()
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user