summaryrefslogtreecommitdiff
path: root/__init__.py
diff options
context:
space:
mode:
authordrebs <drebs@leap.se>2013-03-05 19:31:15 -0300
committerdrebs <drebs@leap.se>2013-03-05 19:31:15 -0300
commite41f287e9e44bd9f8cc3386e83912607223274af (patch)
treeafaa145f7946d7feeb709bde380d2939aad92452 /__init__.py
parentbf097914f492a2f3973d0b051324d121353fa5fa (diff)
Refactor Soledad shared db to another file.
Diffstat (limited to '__init__.py')
-rw-r--r--__init__.py107
1 files changed, 3 insertions, 104 deletions
diff --git a/__init__.py b/__init__.py
index 78cf27ef..97130cde 100644
--- a/__init__.py
+++ b/__init__.py
@@ -1,3 +1,4 @@
+# -*- coding: utf-8 -*-
"""
Soledad - Synchronization Of Locally Encrypted Data Among Devices.
@@ -18,17 +19,13 @@ try:
import simplejson as json
except ImportError:
import json # noqa
-from u1db import errors
-from u1db.remote import (
- http_client,
- http_database,
-)
from leap.soledad.backends import sqlcipher
from leap.soledad.util import GPGWrapper
from leap.soledad.backends.leap_backend import (
LeapDocument,
DocumentNotEncrypted,
)
+from leap.soledad.shared_db import SoledadSharedDatabase
class KeyDoesNotExist(Exception):
@@ -438,102 +435,4 @@ class Soledad(object):
return self._db.sync(url, creds=None, autocreate=True)
-#-----------------------------------------------------------------------------
-# Soledad shared database
-#-----------------------------------------------------------------------------
-
-class NoTokenForAuth(Exception):
- """
- No token was found for token-based authentication.
- """
-
-
-class Unauthorized(Exception):
- """
- User does not have authorization to perform task.
- """
-
-
-class SoledadSharedDatabase(http_database.HTTPDatabase):
- """
- This is a shared HTTP database that holds users' encrypted keys.
- """
- # TODO: prevent client from messing with the shared DB.
- # TODO: define and document API.
-
- @staticmethod
- def open_database(url, create, token=None, soledad=None):
- db = SoledadSharedDatabase(url, token=token, soledad=soledad)
- db.open(create)
- return db
-
- def delete_database(url):
- raise Unauthorized("Can't delete shared database.")
-
- def __init__(self, url, document_factory=None, creds=None, token=None,
- soledad=None):
- self._set_token(token)
- self._soledad = soledad
- super(SoledadSharedDatabase, self).__init__(url, document_factory,
- creds)
-
- def _set_token(self, token):
- self._token = token
-
- def _get_token(self):
- return self._token
-
- token = property(_get_token, _set_token,
- doc='Token for token-based authentication.')
-
- def _request(self, method, url_parts, params=None, body=None,
- content_type=None, auth=True):
- """
- Perform token-based http request.
- """
- if auth:
- if not self.token:
- raise NoTokenForAuth()
- if not params:
- params = {}
- params['auth_token'] = self.token
- return super(SoledadSharedDatabase, self)._request(
- method, url_parts,
- params,
- body,
- content_type)
-
- def _request_json(self, method, url_parts, params=None, body=None,
- content_type=None, auth=True):
- """
- Perform token-based http request.
- """
- res, headers = self._request(method, url_parts,
- params=params, body=body,
- content_type=content_type, auth=auth)
- return json.loads(res), headers
-
- def get_doc_unauth(self, doc_id):
- """
- Modified method to allow for unauth request.
- """
- try:
- res, headers = self._request(
- 'GET', ['doc', doc_id], {"include_deleted": False},
- auth=False)
- except errors.DocumentDoesNotExist:
- return None
- except errors.HTTPError, e:
- if (e.status == http_database.DOCUMENT_DELETED_STATUS and
- 'x-u1db-rev' in e.headers):
- res = None
- headers = e.headers
- else:
- raise
- doc_rev = headers['x-u1db-rev']
- has_conflicts = json.loads(headers['x-u1db-has-conflicts'])
- doc = self._factory(doc_id, doc_rev, res)
- doc.has_conflicts = has_conflicts
- return doc
-
-__all__ = ['util']
+__all__ = ['util', 'server', 'shared_db']