summaryrefslogtreecommitdiff
path: root/service/pixelated
diff options
context:
space:
mode:
authorNavaL <mnandri@thoughtworks.com>2016-01-27 19:29:36 +0100
committerNavaL <mnandri@thoughtworks.com>2016-01-28 10:43:14 +0100
commit766c5617007650d90f1d249aaa253755dcd1906c (patch)
treeebe66b6219cbbab28b5101a72a3338210c69f99c /service/pixelated
parent29f0bd4576955536d3714b1c095bcfe387ec51b9 (diff)
making async setup user services after auth
Issue #583
Diffstat (limited to 'service/pixelated')
-rw-r--r--service/pixelated/application.py1
-rw-r--r--service/pixelated/bitmask_libraries/session.py13
-rw-r--r--service/pixelated/config/leap.py5
-rw-r--r--service/pixelated/resources/auth.py7
-rw-r--r--service/pixelated/resources/login_resource.py22
5 files changed, 27 insertions, 21 deletions
diff --git a/service/pixelated/application.py b/service/pixelated/application.py
index c7833367..dafab0b1 100644
--- a/service/pixelated/application.py
+++ b/service/pixelated/application.py
@@ -49,7 +49,6 @@ 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):
diff --git a/service/pixelated/bitmask_libraries/session.py b/service/pixelated/bitmask_libraries/session.py
index dfa96388..a88eff11 100644
--- a/service/pixelated/bitmask_libraries/session.py
+++ b/service/pixelated/bitmask_libraries/session.py
@@ -136,21 +136,24 @@ class LeapSessionFactory(object):
self._provider = provider
self._config = provider.config
- def create(self, username, password):
+ def create(self, username, password, auth=None):
key = self._session_key(username)
session = self._lookup_session(key)
if not session:
- session = self._create_new_session(username, password)
+ session = self._create_new_session(username, password, auth)
self._remember_session(key, session)
return session
- def _create_new_session(self, username, password):
+ def _auth_leap(self, username, password):
+ srp_auth = SRPAuth(self._provider.api_uri, self._provider.local_ca_crt)
+ return srp_auth.authenticate(username, password)
+
+ def _create_new_session(self, username, password, auth=None):
self._create_dir(self._provider.config.leap_home)
self._provider.download_certificate()
- srp_auth = SRPAuth(self._provider.api_uri, self._provider.local_ca_crt)
- auth = srp_auth.authenticate(username, password)
+ auth = auth or self._auth_leap(username, password)
account_email = self._provider.address_for(username)
self._create_database_dir(auth.uuid)
diff --git a/service/pixelated/config/leap.py b/service/pixelated/config/leap.py
index dd475629..a8666086 100644
--- a/service/pixelated/config/leap.py
+++ b/service/pixelated/config/leap.py
@@ -40,9 +40,8 @@ def initialize_leap_multi_user(provider_hostname,
@defer.inlineCallbacks
-def authenticate_user(provider, username, password, initial_sync=True):
- leap_session = LeapSessionFactory(provider).create(username, password)
-
+def authenticate_user(provider, username, password, initial_sync=True, auth=None):
+ leap_session = LeapSessionFactory(provider).create(username, password, auth)
if initial_sync:
yield leap_session.initial_sync()
diff --git a/service/pixelated/resources/auth.py b/service/pixelated/resources/auth.py
index 4eb6bd02..5e0221cb 100644
--- a/service/pixelated/resources/auth.py
+++ b/service/pixelated/resources/auth.py
@@ -53,12 +53,12 @@ class LeapPasswordChecker(object):
def _validate_credentials():
try:
srp_auth = SRPAuth(self._leap_provider.api_uri, self._leap_provider.local_ca_crt)
- srp_auth.authenticate(credentials.username, credentials.password)
+ return srp_auth.authenticate(credentials.username, credentials.password)
except SRPAuthenticationError:
raise UnauthorizedLogin()
- def _authententicate_user(_):
- return authenticate_user(self._leap_provider, credentials.username, credentials.password)
+ def _authententicate_user(srp_auth):
+ return authenticate_user(self._leap_provider, credentials.username, credentials.password, auth=srp_auth)
d = threads.deferToThread(_validate_credentials)
d.addCallback(_authententicate_user)
@@ -131,7 +131,6 @@ class PixelatedAuthSessionWrapper(object):
def getChildWithDefault(self, path, request):
request.postpath.insert(0, request.prepath.pop())
-
return self._authorizedResource(request)
def _authorizedResource(self, request):
diff --git a/service/pixelated/resources/login_resource.py b/service/pixelated/resources/login_resource.py
index 065d71e7..6109f232 100644
--- a/service/pixelated/resources/login_resource.py
+++ b/service/pixelated/resources/login_resource.py
@@ -96,10 +96,14 @@ class LoginResource(BaseResource):
return renderElement(request, site)
def render_POST(self, request):
+ if self.is_logged_in(request):
+ return util.redirectTo("/", request)
- def render_response(response):
- util.redirectTo("/", request)
+ def render_response(leap_user):
+ request.setResponseCode(OK)
+ request.write(open(os.path.join(self._startup_folder, 'Interstitial.html')).read())
request.finish()
+ self._setup_user_services(leap_user, request)
def render_error(error):
log.info('Login Error for %s' % request.args['username'][0])
@@ -114,15 +118,17 @@ class LoginResource(BaseResource):
@defer.inlineCallbacks
def _handle_login(self, request):
- if self.is_logged_in(request):
- request.setResponseCode(OK)
- defer.succeed(None)
- return
+ creds = self._get_creds_from(request)
+ iface, leap_user, logout = yield self._portal.login(creds, None, IResource)
+ defer.returnValue(leap_user)
+
+ def _get_creds_from(self, request):
username = request.args['username'][0]
password = request.args['password'][0]
- creds = credentials.UsernamePassword(username, password)
- iface, leap_user, logout = yield self._portal.login(creds, None, IResource)
+ return credentials.UsernamePassword(username, password)
+ @defer.inlineCallbacks
+ def _setup_user_services(self, leap_user, request):
yield self._initialize_after_login(self._services_factory, leap_user)
self._init_http_session(request, leap_user)