diff options
Diffstat (limited to 'python/tests/websimulator.py')
| -rw-r--r-- | python/tests/websimulator.py | 143 |
1 files changed, 41 insertions, 102 deletions
diff --git a/python/tests/websimulator.py b/python/tests/websimulator.py index 360fcd06..f5fb843f 100644 --- a/python/tests/websimulator.py +++ b/python/tests/websimulator.py @@ -101,14 +101,14 @@ class HttpRequestHandler(abstractweb.HttpRequestHandlerMixin, object): self.site = site self.httpRequest = httpRequest - def getSession(self): - return self.site.getSessionFromPrincipal(self.httpRequest.client) - + def createSession(self): + session = abstractweb.HttpRequestHandlerMixin.createSession(self) + self.httpRequest.client.sessionTokens[self.site.url] = session.token + return session + def respondRedirectTemporarily(self, url): return self.httpRequest.client.redirect(url) - session = property(getSession) - class Internet(object): webSites = None @@ -181,120 +181,59 @@ class WebSession(abstractweb.WebSessionMixin, object): """Simulation of session of a web site""" expirationTime = None # A sample session variable - isDirty = True + lassoLoginDump = None # Used only by some identity providers lassoSessionDump = None - loginDump = None # Used only by some identity providers - userId = None # ID of logged user. - def __init__(self, token): - self.token = token - def save(self): - pass +class WebUser(abstractweb.WebUserMixin, object): + """Simulation of user of a web site""" + + lassoIdentityDump = None + language = 'fr' # A sample user variable class WebSite(abstractweb.WebSiteMixin, WebClient): """Simulation of a web site""" - httpResponseHeaders = { - 'Server': 'Lasso Simulator Web Server', - } - lastSessionToken = 0 - providerId = None # The Liberty providerID of this web site + instantAuthentication = True # Authentication doesn't use a HTML form. url = None # The main URL of web site - users = None - sessions = None + WebSession = WebSession + WebUser = WebUser def __init__(self, internet, url): WebClient.__init__(self, internet) + abstractweb.WebSiteMixin.__init__(self) self.url = url - self.userIdsByNameIdentifier = {} - self.users = {} - self.sessionTokensByNameIdentifier = {} - self.sessions = {} self.internet.addWebSite(self) - def addUser(self, name): - self.users[name] = WebUser(name) - - def createSession(self, client): - self.lastSessionToken += 1 - session = WebSession(self.lastSessionToken) - self.sessions[self.lastSessionToken] = session - client.sessionTokens[self.url] = self.lastSessionToken - return session - - def getIdentityDump(self, principal): - session = self.getSessionFromPrincipal(principal) - user = self.getUserFromSession(session) - if user is None: - return None - return user.lassoIdentityDump - - def getLassoSessionDump(self, principal): - session = self.getSessionFromPrincipal(principal) - if session is None: - return None - return session.lassoSessionDump - - def getSessionFromNameIdentifier(self, nameIdentifier): - sessionToken = self.sessionTokensByNameIdentifier.get(nameIdentifier, None) - if sessionToken is None: - # The user has no federation on this site or has no authentication assertion for this - # federation. - return None - return self.sessions.get(sessionToken, None) - - def getSessionFromPrincipal(self, principal): - sessionToken = principal.sessionTokens.get(self.url, None) - return self.getSessionFromToken(sessionToken) - - def getSessionFromToken(self, sessionToken): - if sessionToken is None: - # The user has no web session opened on this site. - return None - return self.sessions.get(sessionToken, None) - - def getUserFromNameIdentifier(self, nameIdentifier): - userId = self.userIdsByNameIdentifier.get(nameIdentifier, None) - if userId is None: - # The user has no federation on this site. - return None - return self.users.get(userId, None) - - def getUserFromSession(self, session): - if session is None: - return None - userId = session.userId - if userId is None: - # The user has no account on this site. - return None - return self.users.get(userId, None) + def authenticate(self, handler, callback, *arguments, **keywordArguments): + userId = handler.httpRequest.client.keyring.get(self.url, None) + userAuthenticated = userId in self.users + + import lasso + authenticationMethod = lasso.samlAuthenticationMethodPassword # FIXME + if userAuthenticated: + session = handler.session + if session is None: + session = handler.createSession() + user = handler.user + if user is None: + user = handler.createUser() + session.userId = user.uniqueId + user.sessionToken = session.token + return callback(handler, userAuthenticated, authenticationMethod, *arguments, + **keywordArguments) def handleHttpRequest(self, httpRequest): httpRequestHandler = HttpRequestHandler(self, httpRequest) - return self.handleHttpRequestHandler(httpRequestHandler) - - def handleHttpRequestHandler(self, httpRequestHandler): - methodName = httpRequestHandler.httpRequest.path.replace('/', '') - try: - method = getattr(self, methodName) - except AttributeError: - return httpRequestHandler.respond( - 404, 'Path "%s" Not Found.' % httpRequestHandler.httpRequest.path) - return method(httpRequestHandler) + # Retrieve session and user. + sessionToken = httpRequest.client.sessionTokens.get(self.url, None) + if sessionToken is not None: + session = self.sessions.get(sessionToken) + if session is not None: + httpRequestHandler.session = session + if session.userId is not None: + httpRequestHandler.user = self.users.get(session.userId, None) -class WebUser(abstractweb.WebUserMixin, object): - """Simulation of user of a web site""" - - isDirty = True - lassoIdentityDump = None - language = 'fr' # A sample user variable - uniqueId = None # The user name is used as an ID in this simulation. - - def __init__(self, uniqueId): - self.uniqueId = uniqueId - - def save(self): - pass + return self.handleHttpRequestHandler(httpRequestHandler) |
