summaryrefslogtreecommitdiffstats
path: root/python/tests/IdentityProvider.py
diff options
context:
space:
mode:
Diffstat (limited to 'python/tests/IdentityProvider.py')
-rw-r--r--python/tests/IdentityProvider.py59
1 files changed, 35 insertions, 24 deletions
diff --git a/python/tests/IdentityProvider.py b/python/tests/IdentityProvider.py
index 248f5879..e1cfef5b 100644
--- a/python/tests/IdentityProvider.py
+++ b/python/tests/IdentityProvider.py
@@ -41,17 +41,22 @@ class IdentityProvider(Provider):
def singleSignOn(self, httpRequest):
server = self.getServer()
login = lasso.Login.new(server)
- identityDump = self.getIdentityDump(httpRequest.client)
- if identityDump is not None:
- login.set_identity_from_dump(identityDump)
- sessionDump = self.getSessionDump(httpRequest.client)
- if sessionDump is not None:
- login.set_session_from_dump(sessionDump)
- authnRequestQuery = self.extractQueryFromUrl(httpRequest.url)
- login.init_from_authn_request_msg(authnRequestQuery, lasso.httpMethodRedirect)
-
- self.failUnless(login.must_authenticate()) # FIXME: To improve.
webSession = self.getWebSession(httpRequest.client)
+ webUser = None
+ if webSession is not None:
+ if webSession.sessionDump is not None:
+ login.set_session_from_dump(webSession.sessionDump)
+ webUser = self.getWebUserFromWebSession(webSession)
+ if webUser is not None and webUser.identityDump is not None:
+ login.set_identity_from_dump(webUser.identityDump)
+ login.init_from_authn_request_msg(httpRequest.query, lasso.httpMethodRedirect)
+
+ if not login.must_authenticate():
+ userAuthenticated = webUser is not None
+ authenticationMethod = lasso.samlAuthenticationMethodPassword # FIXME
+ return self.singleSignOn_part2(
+ httpRequest, login, webSession, webUser, userAuthenticated, authenticationMethod)
+
if webSession is None:
webSession = self.createWebSession(httpRequest.client)
webSession.loginDump = login.dump()
@@ -70,18 +75,22 @@ class IdentityProvider(Provider):
del webSession.loginDump
login = lasso.Login.new_from_dump(server, loginDump)
# Set identity & session in login, because loginDump doesn't contain them.
- identityDump = self.getIdentityDump(httpRequest.client)
- if identityDump is not None:
- login.set_identity_from_dump(identityDump)
- sessionDump = self.getSessionDump(httpRequest.client)
- if sessionDump is not None:
- login.set_session_from_dump(sessionDump)
+ if webSession.sessionDump is not None:
+ login.set_session_from_dump(webSession.sessionDump)
+ webUser = self.getWebUserFromWebSession(webSession)
+ if webUser is not None and webUser.identityDump is not None:
+ login.set_identity_from_dump(webUser.identityDump)
+
+ return self.singleSignOn_part2(
+ httpRequest, login, webSession, webUser, userAuthenticated, authenticationMethod)
+
+ def singleSignOn_part2(self, httpRequest, login, webSession, webUser, userAuthenticated,
+ authenticationMethod):
self.failUnlessEqual(login.protocolProfile, lasso.loginProtocolProfileBrwsArt) # FIXME
login.build_artifact_msg(
userAuthenticated, authenticationMethod, 'FIXME: reauthenticateOnOrAfter',
lasso.httpMethodRedirect)
if userAuthenticated:
- webUser = self.getWebUserFromWebSession(webSession)
if login.is_identity_dirty():
identityDump = login.get_identity().dump()
self.failUnless(identityDump)
@@ -151,13 +160,15 @@ class IdentityProvider(Provider):
identityDump = identity.dump()
self.failUnless(identityDump)
self.failUnless(logout.is_session_dirty())
- session = logout.get_session()
- if session is None:
- del webSession.sessionDump
- else:
- sessionDump = session.dump()
- self.failUnless(sessionDump)
- webSession.sessionDump = sessionDump
+
+ # Log the user out.
+ # It is done before logout from other service providers, since we don't want to
+ # accept passive login connections inbetween.
+ del webSession.sessionDump
+ del webSession.webUserId
+ # We also delete the session, but it is not mandantory, since the user is logged out
+ # anyway.
+ del self.webSessions[webSession.uniqueId]
nameIdentifier = logout.nameIdentifier
self.failUnless(nameIdentifier)
del self.webSessionIdsByNameIdentifier[nameIdentifier]