From 423ca8f9fb7636b336b24ba28bde5d61538bf5fc Mon Sep 17 00:00:00 2001 From: NavaL Date: Wed, 26 Oct 2016 15:55:29 +0200 Subject: authentication now returns Authentication leap session creation is only done post-interstitial and that logic is also extracted into its own class #795 --- service/pixelated/config/leap.py | 61 +++++++++++++++++++----------------- service/pixelated/config/services.py | 1 - 2 files changed, 32 insertions(+), 30 deletions(-) (limited to 'service/pixelated/config') diff --git a/service/pixelated/config/leap.py b/service/pixelated/config/leap.py index b86b756e..e8814038 100644 --- a/service/pixelated/config/leap.py +++ b/service/pixelated/config/leap.py @@ -1,28 +1,21 @@ from __future__ import absolute_import -from collections import namedtuple -from twisted.cred.error import UnauthorizedLogin -from twisted.internet import defer, threads -from twisted.logger import Logger - -from leap.common.events import (server as events_server) -from leap.soledad.common.errors import InvalidAuthTokenError -from leap.bitmask.bonafide._srp import SRPAuthError -from leap.bitmask.bonafide.session import Session from leap.bitmask.bonafide.provider import Api - -from pixelated.config import credentials -from pixelated.config import leap_config +from leap.bitmask.bonafide.session import Session +from leap.common.events import (server as events_server) +from pixelated.adapter.welcome_mail import add_welcome_mail +from pixelated.authentication import Authenticator, Credentials, Authentication from pixelated.bitmask_libraries.certs import LeapCertificate from pixelated.bitmask_libraries.provider import LeapProvider +from pixelated.config import credentials +from pixelated.config import leap_config from pixelated.config.sessions import LeapSessionFactory +from twisted.internet import defer +from twisted.logger import Logger log = Logger() -Credentials = namedtuple('Credentials', 'username, password') - - def initialize_leap_provider(provider_hostname, provider_cert, provider_fingerprint, leap_home): LeapCertificate.set_cert_and_fingerprint(provider_cert, provider_fingerprint) @@ -64,10 +57,7 @@ def initialize_leap_single_user(leap_provider_cert, provider = initialize_leap_provider(provider, leap_provider_cert, leap_provider_cert_fingerprint, leap_home) - try: - auth = yield authenticate(provider, username, password) - except SRPAuthError: - raise UnauthorizedLogin() + auth = Authenticator(provider).authenticate(username, password) leap_session = yield create_leap_session(provider, username, password, auth) @@ -84,16 +74,29 @@ def authenticate(provider, user, password): def init_monkeypatches(): - import pixelated.extensions.requests_urllib3 + pass + + +class BootstrapUserServices(object): + + def __init__(self, services_factory, provider): + self._services_factory = services_factory + self._provider = provider + @defer.inlineCallbacks + def setup(self, user_auth, password, language='pt-BR'): + leap_session = yield create_leap_session(self._provider, user_auth.username, password, user_auth) + yield self._setup_user_services(leap_session) + yield self._add_welcome_email(leap_session, language) -class Authentication(object): - def __init__(self, username, token, uuid, session_id, user_attributes): - self.username = username - self.token = token - self.uuid = uuid - self.session_id = session_id - self._user_attributes = user_attributes + @defer.inlineCallbacks + def _setup_user_services(self, leap_session): + user_id = leap_session.user_auth.uuid + if not self._services_factory.has_session(user_id): + yield self._services_factory.create_services_from(leap_session) + self._services_factory.map_email(leap_session.user_auth.username, user_id) - def is_admin(self): - return self._user_attributes.get('is_admin', False) + @defer.inlineCallbacks + def _add_welcome_email(self, leap_session, language): + if leap_session.fresh_account: + yield add_welcome_mail(leap_session.mail_store, language) diff --git a/service/pixelated/config/services.py b/service/pixelated/config/services.py index 1f59c255..9e4de84e 100644 --- a/service/pixelated/config/services.py +++ b/service/pixelated/config/services.py @@ -39,7 +39,6 @@ class Services(object): self.keymanager = self._leap_session.keymanager self.draft_service = self._setup_draft_service(self._leap_session.mail_store) self.feedback_service = self._setup_feedback_service() - yield self._index_all_mails() def close(self): -- cgit v1.2.3