From a23d564ad1543d20c2ad2bf0be2ca058dc0cba7d Mon Sep 17 00:00:00 2001 From: drebs Date: Sat, 2 Jun 2018 09:56:37 -0300 Subject: 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 -- cgit v1.2.3