diff options
| -rw-r--r-- | src/leap/soledad/server/_blobs.py | 20 | ||||
| -rw-r--r-- | testing/tests/blobs/test_fs_backend.py | 6 | ||||
| -rw-r--r-- | testing/tests/server/test_blobs_server.py | 3 | 
3 files changed, 18 insertions, 11 deletions
diff --git a/src/leap/soledad/server/_blobs.py b/src/leap/soledad/server/_blobs.py index 7d51e1b5..dc2c204c 100644 --- a/src/leap/soledad/server/_blobs.py +++ b/src/leap/soledad/server/_blobs.py @@ -135,7 +135,7 @@ class FilesystemBlobsBackend(object):          raise NotImplementedError      def count(self, user, request, namespace=''): -        base_path = self._get_path(user, custom_preffix=namespace) +        base_path = self._get_path(user, namespace=namespace)          count = 0          for _, _, filenames in os.walk(base_path):              count += len(filter(lambda i: not i.endswith('.flags'), filenames)) @@ -144,7 +144,7 @@ class FilesystemBlobsBackend(object):      def list_blobs(self, user, request, namespace='', order_by=None,                     filter_flag=False):          blob_ids = [] -        base_path = self._get_path(user, custom_preffix=namespace) +        base_path = self._get_path(user, namespace=namespace)          for root, dirs, filenames in os.walk(base_path):              blob_ids += [os.path.join(root, name) for name in filenames                           if not name.endswith('.flags')] @@ -200,18 +200,22 @@ class FilesystemBlobsBackend(object):              raise Exception(err)          return desired_path -    def _get_path(self, user, blob_id='', custom_preffix=''): +    def _get_path(self, user, blob_id='', namespace=''):          parts = [user] -        parts += self._get_preffix(blob_id, custom_preffix)          if blob_id: -            parts += [blob_id] +            namespace = namespace or 'default' +            parts += self._get_path_parts(blob_id, namespace) +        elif namespace and not blob_id: +            parts += [namespace]  # namespace path +        else: +            pass  # root path          path = os.path.join(self.path, *parts)          return self._validate_path(path, user, blob_id) -    def _get_preffix(self, blob_id, custom=''): -        if custom or not blob_id: +    def _get_path_parts(self, blob_id, custom): +        if custom and not blob_id:              return [custom] -        return [blob_id[0], blob_id[0:3], blob_id[0:6]] +        return [custom] + [blob_id[0], blob_id[0:3], blob_id[0:6]] + [blob_id]  class ImproperlyConfiguredException(Exception): diff --git a/testing/tests/blobs/test_fs_backend.py b/testing/tests/blobs/test_fs_backend.py index f742f702..53f3127d 100644 --- a/testing/tests/blobs/test_fs_backend.py +++ b/testing/tests/blobs/test_fs_backend.py @@ -88,13 +88,15 @@ class FilesystemBackendTestCase(unittest.TestCase):          backend = _blobs.FilesystemBlobsBackend()          backend.path = '/somewhere/'          path = backend._get_path('user', 'blob_id', '') -        self.assertEquals(path, '/somewhere/user/b/blo/blob_i/blob_id') +        expected = '/somewhere/user/default/b/blo/blob_i/blob_id' +        self.assertEquals(path, expected)      def test_get_path_custom(self):          backend = _blobs.FilesystemBlobsBackend()          backend.path = '/somewhere/'          path = backend._get_path('user', 'blob_id', 'wonderland') -        self.assertEquals(path, '/somewhere/user/wonderland/blob_id') +        expected = '/somewhere/user/wonderland/b/blo/blob_i/blob_id' +        self.assertEquals(expected, path)      def test_get_path_namespace_traversal_raises(self):          backend = _blobs.FilesystemBlobsBackend() diff --git a/testing/tests/server/test_blobs_server.py b/testing/tests/server/test_blobs_server.py index cf370147..f57a1d2d 100644 --- a/testing/tests/server/test_blobs_server.py +++ b/testing/tests/server/test_blobs_server.py @@ -161,7 +161,8 @@ class BlobServerTestCase(unittest.TestCase):          yield manager._encrypt_and_upload('blob_id2', BytesIO("2"))          blobs_list = yield manager.remote_list(order_by='date')          self.assertEquals(['blob_id1', 'blob_id2'], blobs_list) -        self.__touch(self.tempdir, 'user', 'b', 'blo', 'blob_i', 'blob_id1') +        parts = ['user', 'default', 'b', 'blo', 'blob_i', 'blob_id1'] +        self.__touch(self.tempdir, *parts)          blobs_list = yield manager.remote_list(order_by='+date')          self.assertEquals(['blob_id2', 'blob_id1'], blobs_list)          blobs_list = yield manager.remote_list(order_by='-date')  | 
