From a23d564ad1543d20c2ad2bf0be2ca058dc0cba7d Mon Sep 17 00:00:00 2001
From: drebs <drebs@leap.se>
Date: Sat, 2 Jun 2018 09:56:37 -0300
Subject: [PATCH] Allow passing empty server url for testing purposes

---
 src/leap/soledad/client/_secrets/storage.py |  2 ++
 src/leap/soledad/client/api.py              | 20 +++++++++++++++-----
 2 files changed, 17 insertions(+), 5 deletions(-)

diff --git a/src/leap/soledad/client/_secrets/storage.py b/src/leap/soledad/client/_secrets/storage.py
index 85713a48..8767c1e6 100644
--- a/src/leap/soledad/client/_secrets/storage.py
+++ b/src/leap/soledad/client/_secrets/storage.py
@@ -71,6 +71,8 @@ class SecretsStorage(UserDataMixin):
     #
 
     def _init_shared_db(self):
+        if not self._soledad.server_url:
+            return None
         url = urlparse.urljoin(self._soledad.server_url, SHARED_DB_NAME)
         creds = self._creds
         db = SoledadSharedDatabase.open_database(url, creds)
diff --git a/src/leap/soledad/client/api.py b/src/leap/soledad/client/api.py
index 7171761d..16bacf78 100644
--- a/src/leap/soledad/client/api.py
+++ b/src/leap/soledad/client/api.py
@@ -129,8 +129,17 @@ class Soledad(object):
         :type local_db_path: str
 
         :param server_url:
-            URL for Soledad server. This is used either to sync with the user's
-            remote db and to interact with the shared recovery database.
+            URL for Soledad server. This is used to fetch and store user's
+            secrets and to sync with the user's remote db.
+
+            For the LEAP Platform/Bitmask use case, it is mandatory to check
+            for user secrets previously stored in remote storage during the
+            first initialization, because Soledad needs to encrypt/decrypt to
+            using the same secret as before.
+
+            For testing purposes, a value of None can be passed. If None is
+            passed, verification for a remote secret on first initialization is
+            bypassed and that might lead to unintented consequences.
         :type server_url: str
 
         :param cert_file:
@@ -216,9 +225,6 @@ class Soledad(object):
             self.default_prefix, self.secrets_file_name))
         initialize("_local_db_path", os.path.join(
             self.default_prefix, self.local_db_file_name))
-        # initialize server_url
-        soledad_assert(self.server_url is not None,
-                       'Missing URL for Soledad server.')
 
     def _init_working_dirs(self):
         """
@@ -276,6 +282,8 @@ class Soledad(object):
 
     def _init_blobmanager(self):
         path = os.path.dirname(self._local_db_path)
+        if not self.server_url:
+            return
         url = urlparse.urljoin(self.server_url, 'blobs/%s' % self.uuid)
         key = self._secrets.local_key
         self.blobmanager = blobs.BlobManager(
@@ -667,6 +675,8 @@ class Soledad(object):
             generation before the synchronization was performed.
         :rtype: twisted.internet.defer.Deferred
         """
+        if not self.server_url:
+            return
         sync_url = urlparse.urljoin(self.server_url, 'user-%s' % self.uuid)
         if not self._dbsyncer:
             return
-- 
GitLab