diff options
author | Folker Bernitt <fbernitt@thoughtworks.com> | 2016-01-27 13:56:41 +0100 |
---|---|---|
committer | Folker Bernitt <fbernitt@thoughtworks.com> | 2016-01-27 13:57:26 +0100 |
commit | e66b356f900bc9899a5506378163ffaadd4a32b5 (patch) | |
tree | 1f7d06ac3c23a274f91c6e706afcc1615ded2397 /service/pixelated | |
parent | 32dce59ce1aa32846948148fafaffb190206477e (diff) |
Add a login multi user functional test
- Issue #576
- Extended AppTestClient with multi user support
Diffstat (limited to 'service/pixelated')
-rw-r--r-- | service/pixelated/application.py | 21 | ||||
-rw-r--r-- | service/pixelated/resources/auth.py | 16 | ||||
-rw-r--r-- | service/pixelated/resources/login_resource.py | 19 |
3 files changed, 32 insertions, 24 deletions
diff --git a/service/pixelated/application.py b/service/pixelated/application.py index e273612d..c7833367 100644 --- a/service/pixelated/application.py +++ b/service/pixelated/application.py @@ -30,7 +30,7 @@ from pixelated.adapter.welcome_mail import add_welcome_mail from pixelated.config import arguments from pixelated.config import logger from pixelated.config.leap import initialize_leap_single_user, init_monkeypatches, initialize_leap_provider -from pixelated.config.services import Services +from pixelated.config import services from pixelated.config.site import PixelatedSite from pixelated.resources.auth import LeapPasswordChecker, PixelatedRealm, PixelatedAuthSessionWrapper, SessionChecker from pixelated.resources.login_resource import LoginResource @@ -49,6 +49,7 @@ class ServicesFactory(object): return user_id in self._services_by_user def services(self, user_id): + print self._services_by_user.keys() return self._services_by_user[user_id] def log_out_user(self, user_id): @@ -60,6 +61,13 @@ class ServicesFactory(object): def add_session(self, user_id, services): self._services_by_user[user_id] = services + @defer.inlineCallbacks + def create_services_from(self, leap_session): + _services = services.Services(leap_session) + yield _services.setup() + + self._services_by_user[leap_session.user_auth.uuid] = _services + class SingleUserServicesFactory(object): def __init__(self, mode): @@ -82,13 +90,13 @@ class UserAgentMode(object): def start_user_agent_in_single_user_mode(root_resource, services_factory, leap_home, leap_session): log.info('Bootstrap done, loading services for user %s' % leap_session.user_auth.username) - services = Services(leap_session) - yield services.setup() + _services = services.Services(leap_session) + yield _services.setup() if leap_session.fresh_account: yield add_welcome_mail(leap_session.mail_store) - services_factory.add_session(leap_session.user_auth.uuid, services) + services_factory.add_session(leap_session.user_auth.uuid, _services) root_resource.initialize() @@ -166,8 +174,9 @@ def _start_in_multi_user_mode(args, root_resource, services_factory): return defer.succeed(None) -def set_up_protected_resources(root_resource, provider, services_factory): - checker = LeapPasswordChecker(provider) +def set_up_protected_resources(root_resource, provider, services_factory, checker=None): + if not checker: + checker = LeapPasswordChecker(provider) session_checker = SessionChecker() anonymous_resource = LoginResource(services_factory) diff --git a/service/pixelated/resources/auth.py b/service/pixelated/resources/auth.py index 2d31316b..4eb6bd02 100644 --- a/service/pixelated/resources/auth.py +++ b/service/pixelated/resources/auth.py @@ -94,21 +94,7 @@ class SessionChecker(object): class LeapUser(object): def __init__(self, leap_session): - self._leap_session = leap_session - - @defer.inlineCallbacks - def start_services(self, services_factory): - _services = services.Services(self._leap_session) - yield _services.setup() - - if self._leap_session.fresh_account: - yield add_welcome_mail(self._leap_session.mail_store) - - services_factory.add_session(self._leap_session.user_auth.uuid, _services) - - def init_http_session(self, request): - session = IPixelatedSession(request.getSession()) - session.user_uuid = self._leap_session.user_auth.uuid + self.leap_session = leap_session class PixelatedRealm(object): diff --git a/service/pixelated/resources/login_resource.py b/service/pixelated/resources/login_resource.py index 8a18046c..065d71e7 100644 --- a/service/pixelated/resources/login_resource.py +++ b/service/pixelated/resources/login_resource.py @@ -27,7 +27,8 @@ from twisted.web.static import File from twisted.web.template import Element, XMLFile, renderElement, renderer, tags from twisted.python.filepath import FilePath -from pixelated.resources import BaseResource, UnAuthorizedResource +from pixelated.adapter.welcome_mail import add_welcome_mail +from pixelated.resources import BaseResource, UnAuthorizedResource, IPixelatedSession log = logging.getLogger(__name__) @@ -122,5 +123,17 @@ class LoginResource(BaseResource): creds = credentials.UsernamePassword(username, password) iface, leap_user, logout = yield self._portal.login(creds, None, IResource) - yield leap_user.start_services(self._services_factory) - leap_user.init_http_session(request) + yield self._initialize_after_login(self._services_factory, leap_user) + self._init_http_session(request, leap_user) + + @defer.inlineCallbacks + def _initialize_after_login(self, services_factory, leap_user): + session = leap_user.leap_session + yield services_factory.create_services_from(session) + + if session.fresh_account: + yield add_welcome_mail(session.mail_store) + + def _init_http_session(self, request, leap_user): + session = IPixelatedSession(request.getSession()) + session.user_uuid = leap_user.leap_session.user_auth.uuid |