diff options
| -rw-r--r-- | client/src/leap/soledad/client/encdecpool.py | 22 | ||||
| -rw-r--r-- | client/src/leap/soledad/client/http_target.py | 31 | 
2 files changed, 13 insertions, 40 deletions
| diff --git a/client/src/leap/soledad/client/encdecpool.py b/client/src/leap/soledad/client/encdecpool.py index d9f3d28c..2f58d06c 100644 --- a/client/src/leap/soledad/client/encdecpool.py +++ b/client/src/leap/soledad/client/encdecpool.py @@ -28,8 +28,6 @@ import time  import json  import logging -from zope.proxy import sameProxiedObjects -  from twisted.internet import defer  from twisted.internet.threads import deferToThread  from twisted.python.failure import Failure @@ -535,16 +533,6 @@ class SyncDecrypterPool(SyncEncryptDecryptPool):                   decrypted and inserted in the sync db.          :rtype: twisted.internet.defer.Deferred          """ -        # insert_doc_cb is a proxy object that gets updated with the right -        # insert function only when the sync_target invokes the sync_exchange -        # method. so, if we don't still have a non-empty callback, we refuse -        # to proceed. -        if sameProxiedObjects( -                self._insert_doc_cb.get(self.source_replica_uid), -                None): -            logger.debug("Sync decrypter pool: no insert_doc_cb() yet.") -            return -          soledad_assert(self._crypto is not None, "need a crypto object")          content = json.loads(content) @@ -713,7 +701,7 @@ class SyncDecrypterPool(SyncEncryptDecryptPool):                                      gen, trans_id, idx):          """          Insert the decrypted document into the local sqlcipher database. -        Makes use of the passed callback `return_doc_cb` passed to the caller +        Makes use of the passed callback `insert_doc_cb` passed to the caller          by u1db sync.          :param doc_id: The document id. @@ -730,7 +718,6 @@ class SyncDecrypterPool(SyncEncryptDecryptPool):          :type trans_id: str          """          # could pass source_replica in params for callback chain -        insert_fun = self._insert_doc_cb[self.source_replica_uid]          logger.debug("Sync decrypter pool: inserting doc in local db: "                       "%s:%s %s" % (doc_id, doc_rev, gen)) @@ -739,7 +726,7 @@ class SyncDecrypterPool(SyncEncryptDecryptPool):              content = None          doc = SoledadDocument(doc_id, doc_rev, content)          gen = int(gen) -        insert_fun(doc, gen, trans_id) +        self._insert_doc_cb(doc, gen, trans_id)          # store info about processed docs          self._last_inserted_idx = idx @@ -793,11 +780,6 @@ class SyncDecrypterPool(SyncEncryptDecryptPool):          # changes          while self._processed_docs < self._docs_to_process: -            if sameProxiedObjects( -                    self._insert_doc_cb.get(self.source_replica_uid), -                    None): -                continue -              event.clear()              d = self._decrypt_received_docs() diff --git a/client/src/leap/soledad/client/http_target.py b/client/src/leap/soledad/client/http_target.py index bf397cfe..bf563b34 100644 --- a/client/src/leap/soledad/client/http_target.py +++ b/client/src/leap/soledad/client/http_target.py @@ -25,11 +25,8 @@ import json  import base64  import logging -from zope.proxy import setProxiedObject -from zope.proxy import ProxyBase  from uuid import uuid4  from functools import partial -from collections import defaultdict  from twisted.internet import defer  from twisted.internet import reactor @@ -79,10 +76,6 @@ class SoledadHTTPSyncTarget(SyncTarget):      written to the main database.      """ -    # will later keep a reference to the insert-doc callback -    # passed to sync_exchange -    _insert_doc_cb = defaultdict(lambda: ProxyBase(None)) -      def __init__(self, url, source_replica_uid, creds, crypto,                   sync_db=None, sync_enc_pool=None):          """ @@ -116,6 +109,7 @@ class SoledadHTTPSyncTarget(SyncTarget):          self._crypto = crypto          self._sync_db = sync_db          self._sync_enc_pool = sync_enc_pool +        self._insert_doc_cb = None          # asynchronous encryption/decryption attributes          self._decryption_callback = None          self._sync_decr_pool = None @@ -213,7 +207,7 @@ class SoledadHTTPSyncTarget(SyncTarget):      @defer.inlineCallbacks      def sync_exchange(self, docs_by_generation, source_replica_uid,                        last_known_generation, last_known_trans_id, -                      return_doc_cb, ensure_callback=None, +                      insert_doc_cb, ensure_callback=None,                        defer_decryption=True, sync_id=None):          """          Find out which documents the remote database does not know about, @@ -235,11 +229,11 @@ class SoledadHTTPSyncTarget(SyncTarget):          :param last_known_trans_id: Target's last known transaction id.          :type last_known_trans_id: str -        :param return_doc_cb: A callback for inserting received documents from +        :param insert_doc_cb: A callback for inserting received documents from                                target. If not overriden, this will call u1db                                insert_doc_from_target in synchronizer, which                                implements the TAKE OTHER semantics. -        :type return_doc_cb: function +        :type insert_doc_cb: function          :param ensure_callback: A callback that ensures we know the target                                  replica uid if the target replica was just @@ -262,9 +256,8 @@ class SoledadHTTPSyncTarget(SyncTarget):              sync_id = str(uuid4())          self.source_replica_uid = source_replica_uid -        # let the decrypter pool access the passed callback to insert docs -        setProxiedObject(self._insert_doc_cb[source_replica_uid], -                         return_doc_cb) +        # save a reference to the callback so we can use it after decrypting +        self._insert_doc_cb = insert_doc_cb          gen_after_send, trans_id_after_send = yield self._send_docs(              docs_by_generation, @@ -274,7 +267,7 @@ class SoledadHTTPSyncTarget(SyncTarget):          cur_target_gen, cur_target_trans_id = yield self._receive_docs(              last_known_generation, last_known_trans_id, -            return_doc_cb, ensure_callback, sync_id, +            ensure_callback, sync_id,              defer_decryption=defer_decryption)          # update gen and trans id info in case we just sent and did not @@ -376,10 +369,8 @@ class SoledadHTTPSyncTarget(SyncTarget):      @defer.inlineCallbacks      def _receive_docs(self, last_known_generation, last_known_trans_id, -                      return_doc_cb, ensure_callback, sync_id, -                      defer_decryption): -        # we keep a reference to the callback in case we defer the decryption -        self._return_doc_cb = return_doc_cb +                      ensure_callback, sync_id, defer_decryption): +          self._queue_for_decrypt = defer_decryption \              and self._sync_db is not None @@ -534,7 +525,7 @@ class SoledadHTTPSyncTarget(SyncTarget):                  else:                      # defer_decryption is False or no-sync-db fallback                      doc.set_json(decrypt_doc(self._crypto, doc)) -                    self._return_doc_cb(doc, gen, trans_id) +                    self._insert_doc_cb(doc, gen, trans_id)              else:                  # not symmetrically encrypted doc, insert it directly                  # or save it in the decrypted stage. @@ -543,7 +534,7 @@ class SoledadHTTPSyncTarget(SyncTarget):                          doc.doc_id, doc.rev, doc.content, gen, trans_id,                          idx)                  else: -                    self._return_doc_cb(doc, gen, trans_id) +                    self._insert_doc_cb(doc, gen, trans_id)              # -------------------------------------------------------------              # end of symmetric decryption              # ------------------------------------------------------------- | 
