def init_soledad(_): token = srpauth.get_token() print "token", token global soledad soledad = Soledad(uuid, _pass, secrets_path, local_db_path, server_url, cert_file, auth_token=token, defer_encryption=False) def getall(_): d = soledad.get_all_docs() return d d1 = soledad.create_doc({"test": 42}) d1.addCallback(getall) d1.addCallbacks(printStuff, printErr) d2 = soledad.sync() d2.addCallbacks(printStuff, printErr) d2.addBoth(lambda r: reactor.stop()) srpauth = SRPAuth(provider) d = srpauth.authenticate(user, _pass) d.addCallbacks(init_soledad, printErr) from twisted.internet import reactor reactor.run()
class Authenticate(object): """ Interfaces with setup and bootstrapping operations for a provider """ zope.interface.implements(ILEAPComponent) def __init__(self, signaler=None): """ Constructor for the Authenticate component :param signaler: Object in charge of handling communication back to the frontend :type signaler: Signaler """ self.key = "authenticate" self._signaler = signaler self._login_defer = None self._srp_auth = SRPAuth(ProviderConfig(), self._signaler) def login(self, domain, username, password): """ Execute the whole authentication process for a user :param domain: the domain where we need to authenticate. :type domain: unicode :param username: username for this session :type username: str :param password: password for this user :type password: str :returns: the defer for the operation running in a thread. :rtype: twisted.internet.defer.Deferred """ config = ProviderConfig.get_provider_config(domain) if config is not None: self._srp_auth = SRPAuth(config, self._signaler) self._login_defer = self._srp_auth.authenticate(username, password) return self._login_defer else: if self._signaler is not None: self._signaler.signal(self._signaler.srp_auth_error) logger.error("Could not load provider configuration.") def cancel_login(self): """ Cancel the ongoing login defer (if any). """ d = self._login_defer if d is not None: d.cancel() def change_password(self, current_password, new_password): """ Change the user's password. :param current_password: the current password of the user. :type current_password: str :param new_password: the new password for the user. :type new_password: str :returns: a defer to interact with. :rtype: twisted.internet.defer.Deferred """ if not self._is_logged_in(): if self._signaler is not None: self._signaler.signal(self._signaler.srp_not_logged_in_error) return return self._srp_auth.change_password(current_password, new_password) def logout(self): """ Log out the current session. Expects a session_id to exists, might raise AssertionError """ if not self._is_logged_in(): if self._signaler is not None: self._signaler.signal(self._signaler.srp_not_logged_in_error) return self._srp_auth.logout() def _is_logged_in(self): """ Return whether the user is logged in or not. :rtype: bool """ return (self._srp_auth is not None and self._srp_auth.is_authenticated()) def get_logged_in_status(self): """ Signal if the user is currently logged in or not. If logged in, authenticated username is passed as argument to the signal. """ if self._signaler is None: return if self._is_logged_in(): self._signaler.signal(self._signaler.srp_status_logged_in) else: self._signaler.signal(self._signaler.srp_status_not_logged_in)
def init_soledad(_): token = srpauth.get_token() print "token", token global soledad soledad = Soledad(uuid, _pass, secrets_path, local_db_path, server_url, cert_file, auth_token=token, defer_encryption=False) def getall(_): d = soledad.get_all_docs() return d d1 = soledad.create_doc({"test": 42}) d1.addCallback(getall) d1.addCallbacks(printStuff, printErr) d2 = soledad.sync() d2.addCallbacks(printStuff, printErr) d2.addBoth(lambda r: reactor.stop()) srpauth = SRPAuth(provider) d = srpauth.authenticate(user, _pass) d.addCallbacks(init_soledad, printErr) reactor.run()
class Authenticate(object): """ Interfaces with setup and bootstrapping operations for a provider """ zope.interface.implements(ILEAPComponent) def __init__(self, signaler=None): """ Constructor for the Authenticate component :param signaler: Object in charge of handling communication back to the frontend :type signaler: Signaler """ self.key = "authenticate" self._signaler = signaler self._login_defer = None self._srp_auth = SRPAuth(ProviderConfig(), self._signaler) def login(self, domain, username, password): """ Execute the whole authentication process for a user :param domain: the domain where we need to authenticate. :type domain: unicode :param username: username for this session :type username: str :param password: password for this user :type password: str :returns: the defer for the operation running in a thread. :rtype: twisted.internet.defer.Deferred """ config = ProviderConfig.get_provider_config(domain) if config is not None: self._srp_auth = SRPAuth(config, self._signaler) self._login_defer = self._srp_auth.authenticate(username, password) return self._login_defer else: if self._signaler is not None: self._signaler.signal(self._signaler.srp_auth_error) logger.error("Could not load provider configuration.") def cancel_login(self): """ Cancel the ongoing login defer (if any). """ d = self._login_defer if d is not None: d.cancel() def change_password(self, current_password, new_password): """ Change the user's password. :param current_password: the current password of the user. :type current_password: str :param new_password: the new password for the user. :type new_password: str :returns: a defer to interact with. :rtype: twisted.internet.defer.Deferred """ if not self._is_logged_in(): if self._signaler is not None: self._signaler.signal(self._signaler.srp_not_logged_in_error) return return self._srp_auth.change_password(current_password, new_password) def logout(self): """ Log out the current session. Expects a session_id to exists, might raise AssertionError """ if not self._is_logged_in(): if self._signaler is not None: self._signaler.signal(self._signaler.srp_not_logged_in_error) return self._srp_auth.logout() def _is_logged_in(self): """ Return whether the user is logged in or not. :rtype: bool """ return (self._srp_auth is not None and self._srp_auth.is_authenticated()) def get_logged_in_status(self): """ Signal if the user is currently logged in or not. """ if self._signaler is None: return signal = None if self._is_logged_in(): signal = self._signaler.srp_status_logged_in else: signal = self._signaler.srp_status_not_logged_in self._signaler.signal(signal)