From 29034222ca16c29e9301b769802a2e49446e9075 Mon Sep 17 00:00:00 2001 From: Tulio Casagrande Date: Fri, 10 Feb 2017 14:12:04 -0200 Subject: [#907] Add login status to session --- service/pixelated/resources/login_resource.py | 14 +++++++++----- service/pixelated/resources/session.py | 15 +++++++++++++++ 2 files changed, 24 insertions(+), 5 deletions(-) (limited to 'service/pixelated') diff --git a/service/pixelated/resources/login_resource.py b/service/pixelated/resources/login_resource.py index 424e051b..ddc22b2a 100644 --- a/service/pixelated/resources/login_resource.py +++ b/service/pixelated/resources/login_resource.py @@ -149,15 +149,19 @@ class LoginResource(BaseResource): defer.returnValue(user_auth) def _complete_bootstrap(self, user_auth, request): - def login_error(error): + def login_error(error, session): log.error('Login error during %s services setup: %s \n %s' % (user_auth.username, error.getErrorMessage(), error.getTraceback())) + session.login_error() - def set_session_cookies(_): - session = IPixelatedSession(request.getSession()) + def set_session_cookies(_, session): session.user_uuid = user_auth.uuid + session.login_completed() language = parse_accept_language(request.getAllHeaders()) password = request.args['password'][0] + session = IPixelatedSession(request.getSession()) + session.login_started() + d = self._bootstrap_user_services.setup(user_auth, password, language) - d.addCallback(set_session_cookies) - d.addErrback(login_error) + d.addCallback(set_session_cookies, session) + d.addErrback(login_error, session) diff --git a/service/pixelated/resources/session.py b/service/pixelated/resources/session.py index 9ade8d29..84f2ebeb 100644 --- a/service/pixelated/resources/session.py +++ b/service/pixelated/resources/session.py @@ -21,6 +21,7 @@ from twisted.web.server import Session class IPixelatedSession(Interface): user_uuid = Attribute('The uuid of the currently logged in user') + login_status = Attribute('The status during user login') class PixelatedSession(object): @@ -28,12 +29,26 @@ class PixelatedSession(object): def __init__(self, session): self.user_uuid = None + self.login_status = None def is_logged_in(self): return self.user_uuid is not None def expire(self): self.user_uuid = None + self.login_status = None + + def login_started(self): + self.login_status = 'started' + + def login_completed(self): + self.login_status = 'completed' + + def login_error(self): + self.login_status = 'error' + + def check_login_status(self): + return self.login_status registerAdapter(PixelatedSession, Session, IPixelatedSession) -- cgit v1.2.3