summaryrefslogtreecommitdiffhomepage
path: root/android/src
diff options
context:
space:
mode:
Diffstat (limited to 'android/src')
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/service/endpoint/AuthTokenCache.kt46
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
+ }
+ }
+ }
+}