def __init__(self, basedir='~/.config/leap'): # FIXME do not hardcode basedir self._basedir = os.path.expanduser(basedir) self._usermap = UserMap() super(SoledadContainer, self).__init__()
class SoledadContainer(Container): def __init__(self, basedir='~/.config/leap'): # FIXME do not hardcode basedir self._basedir = os.path.expanduser(basedir) self._usermap = UserMap() super(SoledadContainer, self).__init__() def add_instance(self, userid, passphrase, uuid=None, token=None): if not uuid: bootstrapped_uuid = self._usermap.lookup_uuid(userid, passphrase) uuid = bootstrapped_uuid if not uuid: return else: self._usermap.add(userid, uuid, passphrase) user, provider = userid.split('@') soledad_path = os.path.join(self._basedir, 'soledad') soledad_url = _get_soledad_uri(self._basedir, provider) cert_path = _get_ca_cert_path(self._basedir, provider) soledad = self._create_soledad_instance( uuid, passphrase, soledad_path, soledad_url, cert_path, token) self._instances[userid] = soledad data = {'user': userid, 'uuid': uuid, 'token': token, 'soledad': soledad} self.service.trigger_hook('on_new_soledad_instance', **data) def _create_soledad_instance(self, uuid, passphrase, basedir, server_url, cert_file, token): # setup soledad info secrets_path = os.path.join( basedir, '%s.secret' % uuid) local_db_path = os.path.join( basedir, '%s.db' % uuid) if token is None: syncable = False token = '' else: syncable = True return Soledad( uuid, unicode(passphrase), secrets_path=secrets_path, local_db_path=local_db_path, server_url=server_url, cert_file=cert_file, auth_token=token, defer_encryption=True, syncable=syncable) def set_remote_auth_token(self, userid, token): self.get_instance(userid).token = token def set_syncable(self, userid, state): # TODO should check that there's a token! self.get_instance(userid).set_syncable(bool(state)) def sync(self, userid): self.get_instance(userid).sync()