summaryrefslogtreecommitdiff
path: root/service/pixelated/bitmask_libraries/soledad.py
diff options
context:
space:
mode:
Diffstat (limited to 'service/pixelated/bitmask_libraries/soledad.py')
-rw-r--r--service/pixelated/bitmask_libraries/soledad.py74
1 files changed, 8 insertions, 66 deletions
diff --git a/service/pixelated/bitmask_libraries/soledad.py b/service/pixelated/bitmask_libraries/soledad.py
index 0546a158..406e9fc1 100644
--- a/service/pixelated/bitmask_libraries/soledad.py
+++ b/service/pixelated/bitmask_libraries/soledad.py
@@ -13,15 +13,8 @@
#
# 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 errno
-
-import os
from leap.soledad.client import Soledad
from leap.soledad.common.crypto import WrongMacError, UnknownMacMethodError
-from pixelated.bitmask_libraries.certs import LeapCertificate
-
-SOLEDAD_TIMEOUT = 120
-SOLEDAD_CERT = '/tmp/ca.crt'
class SoledadDiscoverException(Exception):
@@ -34,71 +27,20 @@ class SoledadWrongPassphraseException(Exception):
super(SoledadWrongPassphraseException, self).__init__(*args, **kwargs)
-class SoledadSessionFactory(object):
- @classmethod
- def create(cls, provider, user_token, user_uuid, encryption_passphrase):
- return SoledadSession(provider, encryption_passphrase, user_token, user_uuid)
-
-
-class SoledadSession(object):
- def __init__(self, provider, encryption_passphrase, user_token, user_uuid):
- self.provider = provider
- self.config = provider.config
- self.user_uuid = user_uuid
- self.user_token = user_token
+class SoledadFactory(object):
- self.soledad = self._init_soledad(encryption_passphrase)
-
- def _init_soledad(self, encryption_passphrase):
+ @classmethod
+ def create(cls, user_token, user_uuid, encryption_passphrase, secrets, local_db, server_url, api_cert):
try:
- server_url = self._discover_soledad_server()
-
- self._create_database_dir()
- secrets = self._secrets_path()
- local_db = self._local_db_path()
-
- return Soledad(self.user_uuid,
+ return Soledad(user_uuid,
passphrase=unicode(encryption_passphrase),
secrets_path=secrets,
- local_db_path=local_db, server_url=server_url,
- cert_file=LeapCertificate(self.provider).provider_api_cert,
+ local_db_path=local_db,
+ server_url=server_url,
+ cert_file=api_cert,
shared_db=None,
- auth_token=self.user_token,
+ auth_token=user_token,
defer_encryption=False)
except (WrongMacError, UnknownMacMethodError), e:
raise SoledadWrongPassphraseException(e)
-
- def _leap_path(self):
- return "%s/soledad" % self.config.leap_home
-
- def _secrets_path(self):
- return "%s/%s.secret" % (self._leap_path(), self.user_uuid)
-
- def _local_db_path(self):
- return "%s/%s.db" % (self._leap_path(), self.user_uuid)
-
- def _create_database_dir(self):
- try:
- os.makedirs(self._leap_path())
- except OSError as exc:
- if exc.errno == errno.EEXIST and os.path.isdir(self._leap_path()):
- pass
- else:
- raise
-
- def sync(self):
- return self.soledad.sync()
-
- def _discover_soledad_server(self):
- try:
- json_data = self.provider.fetch_soledad_json()
-
- hosts = json_data['hosts']
- host = hosts.keys()[0]
- server_url = 'https://%s:%d/user-%s' % \
- (hosts[host]['hostname'], hosts[host]['port'],
- self.user_uuid)
- return server_url
- except Exception, e:
- raise SoledadDiscoverException(e)