summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVictor Shyba <victor1984@riseup.net>2017-07-25 04:36:04 -0300
committerVictor Shyba <victor1984@riseup.net>2017-08-03 05:33:01 -0300
commit639d86626b8e519a966578b48b77c68f7076be35 (patch)
tree5d59b3fdb3b2251e35fa5d1655396623cba9be37
parent2e490bf0887bbbd440497111981d7cb48bb6dae6 (diff)
[bug] flag as PENDING during incoming creation
Clients will query for blobs flagged PENDING so they can start processing. This commit adds flagging, but still in a hacky way as the backend requires the flags as a json string inside a request. A refactor to separate request handling from the backend itself will solve it in the near future. -- Related: #8874
-rw-r--r--src/leap/soledad/server/_incoming.py9
-rw-r--r--testing/tests/server/test_incoming_server.py5
2 files changed, 14 insertions, 0 deletions
diff --git a/src/leap/soledad/server/_incoming.py b/src/leap/soledad/server/_incoming.py
index 187b6973..1d34f4f3 100644
--- a/src/leap/soledad/server/_incoming.py
+++ b/src/leap/soledad/server/_incoming.py
@@ -17,13 +17,16 @@
"""
A twisted resource that saves externally delivered documents into user's db.
"""
+import json
from twisted.web.server import NOT_DONE_YET
from twisted.web.resource import Resource
+from twisted.web.test.test_web import DummyRequest
from ._config import get_config
from io import BytesIO
from leap.soledad.server._blobs import BlobsServerState
from leap.soledad.common.couch.state import CouchServerState
from leap.soledad.common.document import ServerDocument
+from leap.soledad.common.blobs import Flags
from leap.soledad.common.crypto import ENC_JSON_KEY
from leap.soledad.common.crypto import ENC_SCHEME_KEY
from leap.soledad.common.crypto import EncryptionSchemes
@@ -65,6 +68,12 @@ class IncomingResource(Resource):
preamble = self.formatter.preamble(raw_content, doc_id)
request.content = BytesIO(preamble + raw_content)
d = db.write_blob(uuid, doc_id, request, namespace='MX')
+ # FIXME: We really need to decouple request handling from the
+ # backend! This is very ugly, but will change when this refactor
+ # is done.
+ flagsReq = DummyRequest([''])
+ flagsReq.content = BytesIO(json.dumps([Flags.PENDING]))
+ d.addCallback(lambda _: db.set_flags(uuid, doc_id, flagsReq, 'MX'))
d.addCallback(lambda _: self._finish(request))
return NOT_DONE_YET
diff --git a/testing/tests/server/test_incoming_server.py b/testing/tests/server/test_incoming_server.py
index 8886a721..55eb8931 100644
--- a/testing/tests/server/test_incoming_server.py
+++ b/testing/tests/server/test_incoming_server.py
@@ -18,6 +18,7 @@
Integration tests for incoming API
"""
import pytest
+import json
from io import BytesIO
from uuid import uuid4
from twisted.web.test.test_web import DummyRequest
@@ -30,6 +31,7 @@ from leap.soledad.server._incoming import IncomingResource
from leap.soledad.server._blobs import BlobsServerState
from leap.soledad.server._incoming import IncomingFormatter
from leap.soledad.common.crypto import EncryptionSchemes
+from leap.soledad.common.blobs import Flags
from test_soledad.util import CouchServerStateForTests
from test_soledad.util import CouchDBTestCase
@@ -83,5 +85,8 @@ class IncomingOnCouchServerTestCase(CouchDBTestCase):
db = self.state.open_database(user_id)
request = DummyRequest([user_id, doc_id])
yield db.read_blob(user_id, doc_id, request, 'MX')
+ flags = db.get_flags(user_id, doc_id, request, 'MX')
+ flags = json.loads(flags)
expected = formatter.preamble(content, doc_id) + content
self.assertEquals(expected, request.written[0])
+ self.assertIn(Flags.PENDING, flags)