From 4d098c832c3a69f2019da3c46a76ff417239a074 Mon Sep 17 00:00:00 2001
From: Torsten Grote <t@grobox.de>
Date: Fri, 7 Jan 2022 11:43:50 -0300
Subject: [PATCH] Allow cli app to set a custom setup token

For testing purposes only!
---
 .../src/main/java/org/briarproject/mailbox/cli/Main.kt | 10 ++++++++++
 .../briarproject/mailbox/core/setup/SetupManager.kt    |  5 +----
 2 files changed, 11 insertions(+), 4 deletions(-)

diff --git a/mailbox-cli/src/main/java/org/briarproject/mailbox/cli/Main.kt b/mailbox-cli/src/main/java/org/briarproject/mailbox/cli/Main.kt
index a0019fd5..44cf1c5e 100644
--- a/mailbox-cli/src/main/java/org/briarproject/mailbox/cli/Main.kt
+++ b/mailbox-cli/src/main/java/org/briarproject/mailbox/cli/Main.kt
@@ -31,12 +31,14 @@ import org.briarproject.mailbox.core.db.TransactionManager
 import org.briarproject.mailbox.core.lifecycle.LifecycleManager
 import org.briarproject.mailbox.core.setup.QrCodeEncoder
 import org.briarproject.mailbox.core.setup.SetupManager
+import org.briarproject.mailbox.core.system.InvalidIdException
 import org.slf4j.LoggerFactory.getLogger
 import java.util.logging.Level.ALL
 import java.util.logging.Level.INFO
 import java.util.logging.Level.WARNING
 import java.util.logging.LogManager
 import javax.inject.Inject
+import kotlin.system.exitProcess
 
 class Main : CliktCommand(
     name = "briar-mailbox",
@@ -50,6 +52,7 @@ class Main : CliktCommand(
         "-v",
         help = "Print verbose log messages"
     ).counted()
+    private val setupToken: String? by option("--setup-token", hidden = true)
 
     @Inject
     internal lateinit var coreEagerSingletons: CoreEagerSingletons
@@ -100,6 +103,13 @@ class Main : CliktCommand(
         lifecycleManager.startServices()
         lifecycleManager.waitForStartup()
 
+        if (setupToken != null) try {
+            setupManager.setToken(setupToken, null)
+        } catch (e: InvalidIdException) {
+            System.err.println("Invalid setup token")
+            exitProcess(1)
+        }
+
         // TODO this is obviously not the final code, just a stub to get us started
         val setupTokenExists = db.read { txn ->
             setupManager.getSetupToken(txn) != null
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 72ed35ab..c74d1fac 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
@@ -51,11 +51,8 @@ class SetupManager @Inject constructor(
         settingsManager.mergeSettings(settings, SETTINGS_NAMESPACE_OWNER)
     }
 
-    /**
-     * Visible for testing, consider private.
-     */
     @Throws(DbException::class)
-    internal fun setToken(setupToken: String?, ownerToken: String?) {
+    fun setToken(setupToken: String?, ownerToken: String?) {
         val settings = Settings()
         if (setupToken != null) randomIdManager.assertIsRandomId(setupToken)
         settings[SETTINGS_SETUP_TOKEN] = setupToken
-- 
GitLab