diff options
Diffstat (limited to 'android/src')
| -rw-r--r-- | android/src/main/kotlin/net/mullvad/mullvadvpn/service/endpoint/AuthTokenCache.kt | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/service/endpoint/AuthTokenCache.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/service/endpoint/AuthTokenCache.kt new file mode 100644 index 0000000000..3d0c4299ec --- /dev/null +++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/service/endpoint/AuthTokenCache.kt @@ -0,0 +1,46 @@ +package net.mullvad.mullvadvpn.service.endpoint + +import kotlin.properties.Delegates.observable +import net.mullvad.mullvadvpn.ipc.Event +import net.mullvad.mullvadvpn.ipc.Request +import net.mullvad.mullvadvpn.service.MullvadDaemon + +class AuthTokenCache(endpoint: ServiceEndpoint) { + private var waitingForDaemon = false + + var authToken by observable<String?>(null) { _, _, token -> + endpoint.sendEvent(Event.AuthToken(token)) + } + private set + + var daemon by observable<MullvadDaemon?>(null) { _, _, _ -> + synchronized(this@AuthTokenCache) { + if (waitingForDaemon) { + fetchNewToken() + } + } + } + + init { + endpoint.dispatcher.registerHandler(Request.FetchAuthToken::class) { _ -> + fetchNewToken() + } + } + + fun onDestroy() { + daemon = null + } + + private fun fetchNewToken() { + synchronized(this) { + val daemon = this.daemon + + if (daemon != null) { + authToken = daemon.getWwwAuthToken() + waitingForDaemon = false + } else { + waitingForDaemon = true + } + } + } +} |
