summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKali Kaneko <kali@leap.se>2015-12-07 12:06:51 -0400
committerKali Kaneko <kali@leap.se>2015-12-10 03:30:39 -0400
commit402e00bbd3dd98363ce7ffa31cb9aeae1490095e (patch)
tree78ada39c2305ad77c99746823388bb5f280e2721
parent2ed8f2b64f3093255d03f282917eb88aac9ab124 (diff)
[feat] use userid in soledad events too
for the moment, userid has to be passed to constructor. eventually, we might drop support for passing uuid, since it will be mapped in the service tree
-rw-r--r--client/src/leap/soledad/client/api.py11
-rw-r--r--client/src/leap/soledad/client/http_target/fetch.py8
-rw-r--r--client/src/leap/soledad/client/http_target/send.py6
-rw-r--r--client/src/leap/soledad/client/secrets.py19
4 files changed, 31 insertions, 13 deletions
diff --git a/client/src/leap/soledad/client/api.py b/client/src/leap/soledad/client/api.py
index 0d0d636c..02d9c735 100644
--- a/client/src/leap/soledad/client/api.py
+++ b/client/src/leap/soledad/client/api.py
@@ -125,7 +125,8 @@ class Soledad(object):
def __init__(self, uuid, passphrase, secrets_path, local_db_path,
server_url, cert_file, shared_db=None,
- auth_token=None, defer_encryption=False, syncable=True):
+ auth_token=None, defer_encryption=False, syncable=True,
+ userid=None):
"""
Initialize configuration, cryptographic keys and dbs.
@@ -179,6 +180,7 @@ class Soledad(object):
"""
# store config params
self._uuid = uuid
+ self._userid = userid
self._passphrase = passphrase
self._local_db_path = local_db_path
self._server_url = server_url
@@ -648,6 +650,10 @@ class Soledad(object):
def uuid(self):
return self._uuid
+ @property
+ def userid(self):
+ return self._userid
+
#
# ISyncableStorage
#
@@ -718,8 +724,9 @@ class Soledad(object):
return failure
def _emit_done_data_sync(passthrough):
+ user_data = {'uuid': self.uuid, 'userid': self.userid}
soledad_events.emit_async(
- soledad_events.SOLEDAD_DONE_DATA_SYNC, self.uuid)
+ soledad_events.SOLEDAD_DONE_DATA_SYNC, user_data)
return passthrough
d.addCallbacks(_sync_callback, _sync_errback)
diff --git a/client/src/leap/soledad/client/http_target/fetch.py b/client/src/leap/soledad/client/http_target/fetch.py
index 087da3a3..9f7a4193 100644
--- a/client/src/leap/soledad/client/http_target/fetch.py
+++ b/client/src/leap/soledad/client/http_target/fetch.py
@@ -44,6 +44,7 @@ class HTTPDocFetcher(object):
# if the sync status event is meant to be used somewhere else.
uuid = 'undefined'
+ userid = 'undefined'
@defer.inlineCallbacks
def _receive_docs(self, last_known_generation, last_known_trans_id,
@@ -182,7 +183,8 @@ class HTTPDocFetcher(object):
# end of symmetric decryption
# -------------------------------------------------------------
self._received_docs += 1
- _emit_receive_status(self.uuid, self._received_docs, total)
+ user_data = {'uuid': self.uuid, 'userid': self.userid}
+ _emit_receive_status(user_data, self._received_docs, total)
return number_of_changes, new_generation, new_transaction_id
def _parse_received_doc_response(self, response):
@@ -249,9 +251,9 @@ class HTTPDocFetcher(object):
source_replica_uid=self.source_replica_uid)
-def _emit_receive_status(uuid, received_docs, total):
+def _emit_receive_status(user_data, received_docs, total):
content = {'received': received_docs, 'total': total}
- emit_async(SOLEDAD_SYNC_RECEIVE_STATUS, uuid, content)
+ emit_async(SOLEDAD_SYNC_RECEIVE_STATUS, user_data, content)
if received_docs % 20 == 0:
msg = "%d/%d" % (received_docs, total)
diff --git a/client/src/leap/soledad/client/http_target/send.py b/client/src/leap/soledad/client/http_target/send.py
index 3fc5a171..89288779 100644
--- a/client/src/leap/soledad/client/http_target/send.py
+++ b/client/src/leap/soledad/client/http_target/send.py
@@ -36,6 +36,7 @@ class HTTPDocSender(object):
# if the sync status event is meant to be used somewhere else.
uuid = 'undefined'
+ userid = 'undefined'
@defer.inlineCallbacks
def _send_docs(self, docs_by_generation, last_known_generation,
@@ -78,6 +79,7 @@ class HTTPDocSender(object):
if self._defer_encryption:
self._delete_sent(sent)
+ user_data = {'uuid': self.uuid, 'userid': self.userid}
_emit_send_status(self.uuid, body.consumed, total)
defer.returnValue(result)
@@ -119,9 +121,9 @@ class HTTPDocSender(object):
return d
-def _emit_send_status(uuid, idx, total):
+def _emit_send_status(user_data, idx, total):
content = {'sent': idx, 'total': total}
- emit_async(SOLEDAD_SYNC_SEND_STATUS, uuid, content)
+ emit_async(SOLEDAD_SYNC_SEND_STATUS, user_data, content)
msg = "%d/%d" % (idx, total)
logger.debug("Sync send status: %s" % msg)
diff --git a/client/src/leap/soledad/client/secrets.py b/client/src/leap/soledad/client/secrets.py
index c3c3dff5..90e73bd5 100644
--- a/client/src/leap/soledad/client/secrets.py
+++ b/client/src/leap/soledad/client/secrets.py
@@ -147,7 +147,7 @@ class SoledadSecrets(object):
Keys used to access storage secrets in recovery documents.
"""
- def __init__(self, uuid, passphrase, secrets_path, shared_db):
+ def __init__(self, uuid, passphrase, secrets_path, shared_db, userid=None):
"""
Initialize the secrets manager.
@@ -167,6 +167,7 @@ class SoledadSecrets(object):
# param secret_id: The id of the storage secret to be used.
self._uuid = uuid
+ self._userid = userid
self._passphrase = passphrase
self._secrets_path = secrets_path
self._shared_db = shared_db
@@ -433,7 +434,8 @@ class SoledadSecrets(object):
:return: a document with encrypted key material in its contents
:rtype: document.SoledadDocument
"""
- events.emit_async(events.SOLEDAD_DOWNLOADING_KEYS, self._uuid)
+ user_data = self._get_user_data()
+ events.emit_async(events.SOLEDAD_DOWNLOADING_KEYS, user_data)
db = self._shared_db
if not db:
logger.warning('No shared db found')
@@ -462,13 +464,14 @@ class SoledadSecrets(object):
# fill doc with encrypted secrets
doc.content = self._export_recovery_document()
# upload secrets to server
- events.emit_async(events.SOLEDAD_UPLOADING_KEYS, self._uuid)
+ user_data = self._get_user_data()
+ events.emit_async(events.SOLEDAD_UPLOADING_KEYS, user_data)
db = self._shared_db
if not db:
logger.warning('No shared db found')
return
db.put_doc(doc)
- events.emit_async(events.SOLEDAD_DONE_UPLOADING_KEYS, self._uuid)
+ events.emit_async(events.SOLEDAD_DONE_UPLOADING_KEYS, user_data)
#
# Management of secret for symmetric encryption.
@@ -588,13 +591,14 @@ class SoledadSecrets(object):
:return: The id of the generated secret.
:rtype: str
"""
- events.emit_async(events.SOLEDAD_CREATING_KEYS, self._uuid)
+ user_data = self._get_user_data()
+ events.emit_async(events.SOLEDAD_CREATING_KEYS, user_data)
# generate random secret
secret = os.urandom(self.GEN_SECRET_LENGTH)
secret_id = sha256(secret).hexdigest()
self._secrets[secret_id] = secret
self._store_secrets()
- events.emit_async(events.SOLEDAD_DONE_CREATING_KEYS, self._uuid)
+ events.emit_async(events.SOLEDAD_DONE_CREATING_KEYS, user_data)
return secret_id
def _store_secrets(self):
@@ -738,3 +742,6 @@ class SoledadSecrets(object):
salt=self._get_sync_db_salt(),
buflen=32, # we need a key with 256 bits (32 bytes)
)
+
+ def _get_user_data(self):
+ return {'uuid': self._uuid, 'userid': self._userid}