summaryrefslogtreecommitdiff
path: root/service
diff options
context:
space:
mode:
Diffstat (limited to 'service')
-rw-r--r--service/pixelated/application.py14
-rw-r--r--service/pixelated/resources/__init__.py4
-rw-r--r--service/test/unit/resources/test_helpers.py30
3 files changed, 44 insertions, 4 deletions
diff --git a/service/pixelated/application.py b/service/pixelated/application.py
index af29bc5f..ce1e0258 100644
--- a/service/pixelated/application.py
+++ b/service/pixelated/application.py
@@ -14,12 +14,14 @@
# You should have received a copy of the GNU Affero General Public License
# along with Pixelated. If not, see <http://www.gnu.org/licenses/>.
+import os
import logging
from OpenSSL import SSL
from OpenSSL import crypto
from leap.common.events import (server as events_server,
register, catalog as events)
+from leap.soledad.common.errors import InvalidAuthTokenError
from twisted.cred import portal
from twisted.cred.checkers import AllowAnonymousAccess
from twisted.internet import defer
@@ -210,12 +212,20 @@ def _start_in_single_user_mode(args, resource, services_factory):
args.leap_provider_cert_fingerprint,
args.credentials_file,
args.leap_home)
- deferred.addCallback(
+
+ def _handle_error(exception):
+ if(exception.type is InvalidAuthTokenError):
+ log.critical('Got an invalid soledad token, the user agent can\'t synchronize data, exiting')
+ os._exit(1)
+ else:
+ exception.raiseException()
+
+ deferred.addCallbacks(
lambda leap_session: start_user_agent_in_single_user_mode(
resource,
services_factory,
args.leap_home,
- leap_session))
+ leap_session), _handle_error)
return deferred
diff --git a/service/pixelated/resources/__init__.py b/service/pixelated/resources/__init__.py
index 9ccca7ee..cd27fab0 100644
--- a/service/pixelated/resources/__init__.py
+++ b/service/pixelated/resources/__init__.py
@@ -36,14 +36,14 @@ class SetEncoder(json.JSONEncoder):
def respond_json(entity, request, status_code=200):
json_response = json.dumps(entity, cls=SetEncoder)
- request.responseHeaders.addRawHeader(b"content-type", [b"application/json"])
+ request.responseHeaders.setRawHeaders(b"content-type", [b"application/json"])
request.code = status_code
return json_response
def respond_json_deferred(entity, request, status_code=200):
json_response = json.dumps(entity, cls=SetEncoder)
- request.responseHeaders.addRawHeader(b"content-type", [b"application/json"])
+ request.responseHeaders.setRawHeaders(b"content-type", [b"application/json"])
request.code = status_code
request.write(json_response)
request.finish()
diff --git a/service/test/unit/resources/test_helpers.py b/service/test/unit/resources/test_helpers.py
new file mode 100644
index 00000000..a17ce755
--- /dev/null
+++ b/service/test/unit/resources/test_helpers.py
@@ -0,0 +1,30 @@
+import unittest
+import re
+
+from pixelated.resources import respond_json, respond_json_deferred
+from test.unit.resources import DummySite
+from twisted.web.test.requesthelper import DummyRequest
+
+
+class TestHelpers(unittest.TestCase):
+
+ def setUp(self):
+ pass
+
+ def test_respond_json_should_populate_response(self):
+ request = DummyRequest([''])
+ body = respond_json({"test": "yep"}, request)
+
+ self.assertEqual(200, request.code)
+ self.assertEqual(b"{\"test\": \"yep\"}", body)
+ self.assertEqual([b"application/json"],
+ request.responseHeaders.getRawHeaders("Content-Type"))
+
+ def test_respond_json_deferred_should_populate_response(self):
+ request = DummyRequest([''])
+ body = respond_json_deferred({"test": "yep"}, request)
+
+ self.assertEqual(200, request.code)
+ self.assertEqual(b"{\"test\": \"yep\"}", request.written[0])
+ self.assertEqual([b"application/json"],
+ request.responseHeaders.getRawHeaders("Content-Type"))