From 0fc3ba496214275c0402618594f8cfd4e2f7eaa2 Mon Sep 17 00:00:00 2001
From: Torsten Grote <t@grobox.de>
Date: Wed, 3 Nov 2021 08:44:23 -0300
Subject: [PATCH] Move the ability to null Settings strings into Settings

---
 .../mailbox/core/settings/Settings.kt         | 11 ++++++++
 .../mailbox/core/setup/SetupManager.kt        | 28 ++++---------------
 .../mailbox/core/setup/SetupManagerTest.kt    |  9 ++++++
 3 files changed, 26 insertions(+), 22 deletions(-)

diff --git a/mailbox-core/src/main/java/org/briarproject/mailbox/core/settings/Settings.kt b/mailbox-core/src/main/java/org/briarproject/mailbox/core/settings/Settings.kt
index 8e988a44..01ace732 100644
--- a/mailbox-core/src/main/java/org/briarproject/mailbox/core/settings/Settings.kt
+++ b/mailbox-core/src/main/java/org/briarproject/mailbox/core/settings/Settings.kt
@@ -4,6 +4,17 @@ import java.util.Hashtable
 
 class Settings : Hashtable<String, String>() {
 
+    override fun put(key: String, value: String?): String? {
+        return if (value == null) super.put(key, "")
+        else super.put(key, value)
+    }
+
+    override fun get(key: String): String? {
+        val value = super.get(key)
+        return if (value.isNullOrEmpty()) null
+        else value
+    }
+
     fun getBoolean(key: String, defaultValue: Boolean): Boolean {
         val s = get(key) ?: return defaultValue
         if ("true" == s) return true
diff --git a/mailbox-core/src/main/java/org/briarproject/mailbox/core/setup/SetupManager.kt b/mailbox-core/src/main/java/org/briarproject/mailbox/core/setup/SetupManager.kt
index 611dccf6..37e4f518 100644
--- a/mailbox-core/src/main/java/org/briarproject/mailbox/core/setup/SetupManager.kt
+++ b/mailbox-core/src/main/java/org/briarproject/mailbox/core/setup/SetupManager.kt
@@ -57,38 +57,22 @@ class SetupManager @Inject constructor(
     @Throws(DbException::class)
     internal fun setToken(setupToken: String?, ownerToken: String?) {
         val settings = Settings()
-        if (setupToken == null) {
-            settings[SETTINGS_SETUP_TOKEN] = ""
-        } else {
-            randomIdManager.assertIsRandomId(setupToken)
-            settings[SETTINGS_SETUP_TOKEN] = setupToken
-        }
-        if (ownerToken == null) {
-            settings[SETTINGS_OWNER_TOKEN] = ""
-        } else {
-            randomIdManager.assertIsRandomId(ownerToken)
-            settings[SETTINGS_OWNER_TOKEN] = ownerToken
-        }
+        if (setupToken != null) randomIdManager.assertIsRandomId(setupToken)
+        settings[SETTINGS_SETUP_TOKEN] = setupToken
+        if (ownerToken != null) randomIdManager.assertIsRandomId(ownerToken)
+        settings[SETTINGS_OWNER_TOKEN] = ownerToken
         settingsManager.mergeSettings(settings, SETTINGS_NAMESPACE_OWNER)
     }
 
     fun getSetupToken(txn: Transaction): String? {
         val settings = settingsManager.getSettings(txn, SETTINGS_NAMESPACE_OWNER)
-        return settings[SETTINGS_SETUP_TOKEN].nullify()
+        return settings[SETTINGS_SETUP_TOKEN]
     }
 
     @Throws(DbException::class)
     fun getOwnerToken(txn: Transaction): String? {
         val settings = settingsManager.getSettings(txn, SETTINGS_NAMESPACE_OWNER)
-        return settings[SETTINGS_OWNER_TOKEN].nullify()
-    }
-
-    /**
-     * @return the same string or null if it is empty
-     */
-    private fun String?.nullify(): String? {
-        return if (isNullOrEmpty()) null
-        else this
+        return settings[SETTINGS_OWNER_TOKEN]
     }
 
 }
diff --git a/mailbox-core/src/test/java/org/briarproject/mailbox/core/setup/SetupManagerTest.kt b/mailbox-core/src/test/java/org/briarproject/mailbox/core/setup/SetupManagerTest.kt
index 167cd18b..9ee9c88e 100644
--- a/mailbox-core/src/test/java/org/briarproject/mailbox/core/setup/SetupManagerTest.kt
+++ b/mailbox-core/src/test/java/org/briarproject/mailbox/core/setup/SetupManagerTest.kt
@@ -97,4 +97,13 @@ class SetupManagerTest : IntegrationTest() {
         }
     }
 
+    @Test
+    fun `authentication doesn't work with empty string`() = runBlocking {
+        // use it for setup PUT request
+        val response: HttpResponse = httpClient.put("$baseUrl/setup") {
+            authenticateWithToken("")
+        }
+        assertEquals(HttpStatusCode.Unauthorized, response.status)
+    }
+
 }
-- 
GitLab