diff options
| author | Janito Vaqueiro Ferreira Filho <janito@mullvad.net> | 2021-01-07 21:17:53 +0000 |
|---|---|---|
| committer | Janito Vaqueiro Ferreira Filho <janito@mullvad.net> | 2021-04-20 13:55:40 +0000 |
| commit | b3650a7b6a3d5f49090430422ca0710a2322a76c (patch) | |
| tree | f9d879570348d036d102aae8af090f911e0d67bd /android/src | |
| parent | ed22f883ed1f5843b149e063997fd466f166493b (diff) | |
| download | mullvadvpn-b3650a7b6a3d5f49090430422ca0710a2322a76c.tar.xz mullvadvpn-b3650a7b6a3d5f49090430422ca0710a2322a76c.zip | |
Create service side `AuthTokenCache` helper class
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 + } + } + } +} |
