summaryrefslogtreecommitdiff
path: root/service/pixelated
diff options
context:
space:
mode:
authorTulio Casagrande <tuliocasagrande@gmail.com>2017-02-13 18:44:27 -0200
committerGitHub <noreply@github.com>2017-02-13 18:44:27 -0200
commit6223c10a6daf0be3e9b4def16d1dbbba98e86bae (patch)
tree0778fcb16d24de976bdb18e5cf2360eefc8986bf /service/pixelated
parentbdf96ef22e827598492ff996fd34ffb70e0ecfce (diff)
parent7fdf9f62c785835c4ea0863dae36bee9611221a5 (diff)
Merge pull request #968 from pixelated/interstitial-errors
Interstitial errors
Diffstat (limited to 'service/pixelated')
-rw-r--r--service/pixelated/assets/Interstitial.js6
-rw-r--r--service/pixelated/resources/login_resource.py33
-rw-r--r--service/pixelated/resources/session.py16
3 files changed, 43 insertions, 12 deletions
diff --git a/service/pixelated/assets/Interstitial.js b/service/pixelated/assets/Interstitial.js
index ac5a789a..2eaa7a1c 100644
--- a/service/pixelated/assets/Interstitial.js
+++ b/service/pixelated/assets/Interstitial.js
@@ -1,7 +1,7 @@
if ($('#hive').length) {
var hive = new Snap('#hive');
var img_width = $('#hive').width();
- var left_pos = img_width * .5;
+ var left_pos = img_width * 0.5;
var pixelated = hive.path("M12.4,20.3v31.8l28,15.8l28-15.8V20.3l-28-15.8L12.4,20.3z M39.2,56.4l-16.3-9V27.9l16.3,9.3L39.2,56.4z M57.7,47.4l-16.1,9l0-19.2l16.1-9.4V47.4z M57.7,25.2L40.4,35.5L22.9,25.2l17.5-9.4L57.7,25.2z").transform("translate(319, 50)").attr("fill", "#908e8e");
var all = hive.group().transform("matrix(2, 0, 0, 2, -100, -100)");
@@ -42,9 +42,9 @@ $(function () {
var handler = setInterval(function () {
$.ajax({
method: 'GET',
- url: '/'
+ url: '/login/status'
}).success(function (data) {
- if (/Pixelated Mail/g.test(data)) {
+ if (data.status === 'completed' || data.status === 'error') {
window.location="/";
}
});
diff --git a/service/pixelated/resources/login_resource.py b/service/pixelated/resources/login_resource.py
index 4d78174f..4bbceb89 100644
--- a/service/pixelated/resources/login_resource.py
+++ b/service/pixelated/resources/login_resource.py
@@ -20,7 +20,7 @@ from xml.sax import SAXParseException
from pixelated.authentication import Authenticator
from pixelated.config.leap import BootstrapUserServices
from pixelated.resources import BaseResource, UnAuthorizedResource, IPixelatedSession
-from pixelated.resources import handle_error_deferred, get_startup_folder
+from pixelated.resources import get_startup_folder, respond_json
from twisted.cred.error import UnauthorizedLogin
from twisted.internet import defer
from twisted.logger import Logger
@@ -106,6 +106,8 @@ class LoginResource(BaseResource):
return self
if path == 'login':
return self
+ if path == 'status':
+ return LoginStatusResource(self._services_factory)
if not self.is_logged_in(request):
return UnAuthorizedResource()
return NoResource()
@@ -139,8 +141,6 @@ class LoginResource(BaseResource):
d = self._handle_login(request)
d.addCallbacks(render_response, render_error)
- d.addErrback(handle_error_deferred, request)
-
return NOT_DONE_YET
@defer.inlineCallbacks
@@ -151,15 +151,30 @@ class LoginResource(BaseResource):
defer.returnValue(user_auth)
def _complete_bootstrap(self, user_auth, request):
- def log_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())
- session.user_uuid = user_auth.uuid
+ def login_successful(_, session):
+ session.login_successful(user_auth.uuid)
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(log_error)
+ d.addCallback(login_successful, session)
+ d.addErrback(login_error, session)
+
+
+class LoginStatusResource(BaseResource):
+ isLeaf = True
+
+ def __init__(self, services_factory):
+ BaseResource.__init__(self, services_factory)
+
+ def render_GET(self, request):
+ session = IPixelatedSession(request.getSession())
+ response = {'status': str(session.check_login_status())}
+ return respond_json(response, request)
diff --git a/service/pixelated/resources/session.py b/service/pixelated/resources/session.py
index 9ade8d29..5dfa52e6 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,27 @@ 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_successful(self, user_uuid):
+ self.user_uuid = user_uuid
+ 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)