summaryrefslogtreecommitdiff
path: root/service/pixelated
diff options
context:
space:
mode:
authorFolker Bernitt <fbernitt@thoughtworks.com>2016-01-27 13:56:41 +0100
committerFolker Bernitt <fbernitt@thoughtworks.com>2016-01-27 13:57:26 +0100
commite66b356f900bc9899a5506378163ffaadd4a32b5 (patch)
tree1f7d06ac3c23a274f91c6e706afcc1615ded2397 /service/pixelated
parent32dce59ce1aa32846948148fafaffb190206477e (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.py21
-rw-r--r--service/pixelated/resources/auth.py16
-rw-r--r--service/pixelated/resources/login_resource.py19
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