diff options
-rw-r--r-- | server/src/leap/soledad/server/_blobs.py | 11 | ||||
-rw-r--r-- | server/src/leap/soledad/server/_resource.py | 11 | ||||
-rw-r--r-- | server/src/leap/soledad/server/auth.py | 4 | ||||
-rw-r--r-- | testing/tests/server/test__resource.py | 20 |
4 files changed, 22 insertions, 24 deletions
diff --git a/server/src/leap/soledad/server/_blobs.py b/server/src/leap/soledad/server/_blobs.py index d5476aae..f50e3da8 100644 --- a/server/src/leap/soledad/server/_blobs.py +++ b/server/src/leap/soledad/server/_blobs.py @@ -35,10 +35,9 @@ from twisted.web.client import FileBodyProducer from twisted.web.server import NOT_DONE_YET from zope.interface import Interface, implementer -from leap.soledad.server._config import get_config -__all__ = ['BlobsResource', 'blobs_resource'] +__all__ = ['BlobsResource'] logger = Logger() @@ -199,12 +198,6 @@ class BlobsResource(resource.Resource): return self._handler.write_blob(user, blob_id, request) -# provide a configured instance of the resource -_config = get_config() -_path = _config['blobs_path'] -blobs_resource = BlobsResource(_path) - - if __name__ == '__main__': # A dummy blob server # curl -X PUT --data-binary @/tmp/book.pdf localhost:9000/user/someid @@ -220,7 +213,7 @@ if __name__ == '__main__': import argparse parser = argparse.ArgumentParser() - parser.add_argument('--port', default=9000) + parser.add_argument('--port', default=9000, type=int) parser.add_argument('--path', default='/tmp/blobs/user') args = parser.parse_args() diff --git a/server/src/leap/soledad/server/_resource.py b/server/src/leap/soledad/server/_resource.py index 7a00ad9a..49c4b742 100644 --- a/server/src/leap/soledad/server/_resource.py +++ b/server/src/leap/soledad/server/_resource.py @@ -19,7 +19,6 @@ A twisted resource that serves the Soledad Server. """ from twisted.web.resource import Resource -from ._blobs import blobs_resource from ._server_info import ServerInfo from ._wsgi import get_sync_resource @@ -56,12 +55,12 @@ class SoledadResource(Resource): for the Soledad Server. """ - def __init__(self, enable_blobs=False, sync_pool=None): + def __init__(self, blobs_resource=None, sync_pool=None): """ Initialize the Soledad resource. - :param enable_blobs: Whether the blobs feature should be enabled. - :type enable_blobs: bool + :param blobs_resource: a resource to serve blobs, if enabled. + :type blobs_resource: _blobs.BlobsResource :param sync_pool: A pool to pass to the WSGI sync resource. :type sync_pool: twisted.python.threadpool.ThreadPool @@ -69,11 +68,11 @@ class SoledadResource(Resource): Resource.__init__(self) # requests to / return server information - server_info = ServerInfo(enable_blobs) + server_info = ServerInfo(bool(blobs_resource)) self.putChild('', server_info) # requests to /blobs will serve blobs if enabled - if enable_blobs: + if blobs_resource: self.putChild('blobs', blobs_resource) # other requests are routed to legacy sync resource diff --git a/server/src/leap/soledad/server/auth.py b/server/src/leap/soledad/server/auth.py index b5744fe9..7f99e23d 100644 --- a/server/src/leap/soledad/server/auth.py +++ b/server/src/leap/soledad/server/auth.py @@ -39,6 +39,7 @@ from twisted.web.resource import IResource from leap.soledad.common.couch import couch_server from ._resource import SoledadResource, SoledadAnonResource +from ._blobs import BlobsResource from ._config import get_config @@ -53,10 +54,11 @@ class SoledadRealm(object): if conf is None: conf = get_config() blobs = conf['blobs'] + blobs_resource = BlobsResource(conf['blobs_path']) if blobs else None self.anon_resource = SoledadAnonResource( enable_blobs=blobs) self.auth_resource = SoledadResource( - enable_blobs=blobs, + blobs_resource=blobs_resource, sync_pool=sync_pool) def requestAvatar(self, avatarId, mind, *interfaces): diff --git a/testing/tests/server/test__resource.py b/testing/tests/server/test__resource.py index c066435e..be02b5a1 100644 --- a/testing/tests/server/test__resource.py +++ b/testing/tests/server/test__resource.py @@ -35,22 +35,25 @@ _pool = reactor.getThreadPool() class SoledadResourceTestCase(unittest.TestCase): def test_get_root(self): - enable_blobs = None # doesn't matter - resource = SoledadResource(enable_blobs=enable_blobs, sync_pool=_pool) + blobs_resource = None # doesn't matter + resource = SoledadResource( + blobs_resource=blobs_resource, sync_pool=_pool) request = DummyRequest(['']) child = getChildForRequest(resource, request) self.assertIsInstance(child, ServerInfo) def test_get_blobs_enabled(self): - enable_blobs = True - resource = SoledadResource(enable_blobs=enable_blobs, sync_pool=_pool) + blobs_resource = BlobsResource('/tmp') + resource = SoledadResource( + blobs_resource=blobs_resource, sync_pool=_pool) request = DummyRequest(['blobs']) child = getChildForRequest(resource, request) self.assertIsInstance(child, BlobsResource) def test_get_blobs_disabled(self): - enable_blobs = False - resource = SoledadResource(enable_blobs=enable_blobs, sync_pool=_pool) + blobs_resource = None + resource = SoledadResource( + blobs_resource=blobs_resource, sync_pool=_pool) request = DummyRequest(['blobs']) child = getChildForRequest(resource, request) # if blobs is disabled, the request should be routed to sync @@ -58,8 +61,9 @@ class SoledadResourceTestCase(unittest.TestCase): self.assertIsInstance(child._application, GzipMiddleware) def test_get_sync(self): - enable_blobs = None # doesn't matter - resource = SoledadResource(enable_blobs=enable_blobs, sync_pool=_pool) + blobs_resource = None # doesn't matter + resource = SoledadResource( + blobs_resource=blobs_resource, sync_pool=_pool) request = DummyRequest(['user-db', 'sync-from', 'source-id']) child = getChildForRequest(resource, request) self.assertIsInstance(child, WSGIResource) |