diff options
Diffstat (limited to 'python/tests/websimulator.py')
| -rw-r--r-- | python/tests/websimulator.py | 154 |
1 files changed, 84 insertions, 70 deletions
diff --git a/python/tests/websimulator.py b/python/tests/websimulator.py index 0c923d05..411a1268 100644 --- a/python/tests/websimulator.py +++ b/python/tests/websimulator.py @@ -23,7 +23,7 @@ # FIXME: Replace principal with client in most methods. -# FIXME: Rename webUser to userAccount. +# FIXME: Rename user to userAccount. import abstractweb @@ -48,11 +48,9 @@ class HttpRequest(abstractweb.HttpRequestMixin, object): if form: self.form = form - def getFormField(self, name, default = 'none'): - if self.form and name in self.form: - return self.form[name] - if default == 'none': - raise KeyError(name) + def getFormField(self, name, default = None): + if self.form is not None: + return self.form.get(name, default) return default def getPath(self): @@ -76,6 +74,11 @@ class HttpRequest(abstractweb.HttpRequestMixin, object): def getScheme(self): return self.url.split(':', 1)[0].lower() + def hasFormField(self, name): + if self.form is None: + return False + return name in self.form + def send(self): webSite = self.client.internet.getWebSite(self.url) return webSite.handleHttpRequest(self) @@ -94,13 +97,18 @@ class HttpResponse(abstractweb.HttpResponseMixin, object): class HttpRequestHandler(abstractweb.HttpRequestHandlerMixin, object): HttpResponse = HttpResponse # Class - def __init__(self, webServer, httpRequest): - self.webServer = webServer + def __init__(self, site, httpRequest): + self.site = site self.httpRequest = httpRequest + def getSession(self): + return self.site.getSessionFromPrincipal(self.httpRequest.client) + def respondRedirectTemporarily(self, url): return self.httpRequest.client.redirect(url) + session = property(getSession) + class Internet(object): webSites = None @@ -125,13 +133,13 @@ class WebClient(object): 'User-Agent': 'LassoSimulator/0.0.0', 'Accept': 'text/xml,application/xml,application/xhtml+xml,text/html', } - webSessionIds = None # Simulate the cookies, stored in user's navigator, and containing the + sessionTokens = None # Simulate the cookies, stored in user's navigator, and containing the # IDs of sessions already opened by the user. def __init__(self, internet): self.internet = internet self.keyring = {} - self.webSessionIds = {} + self.sessionTokens = {} def redirect(self, url): return self.sendHttpRequest('GET', url) @@ -169,104 +177,99 @@ class Principal(WebClient): self.name = name -class WebSession(object): +class WebSession(abstractweb.WebSessionMixin, object): """Simulation of session of a web site""" expirationTime = None # A sample session variable + isDirty = True loginDump = None # Used only by some identity providers - uniqueId = None # The session number - sessionDump = None - webUserId = None # ID of logged user. - - def __init__(self, uniqueId): - self.uniqueId = uniqueId - - -class WebUser(object): - """Simulation of user of a web site""" + lassoSessionDump = None + userId = None # ID of logged user. - identityDump = None - language = 'fr' # A sample user variable - uniqueId = None # The user name is used as an ID in this simulation. + def __init__(self, token): + self.token = token - def __init__(self, uniqueId): - self.uniqueId = uniqueId + def save(self): + pass -class WebSite(WebClient): +class WebSite(abstractweb.WebSiteMixin, WebClient): """Simulation of a web site""" httpResponseHeaders = { 'Server': 'Lasso Simulator Web Server', } - lastWebSessionId = 0 + lastSessionToken = 0 providerId = None # The Liberty providerID of this web site url = None # The main URL of web site - webUsers = None - webSessions = None + users = None + sessions = None def __init__(self, internet, url): WebClient.__init__(self, internet) self.url = url - self.webUserIdsByNameIdentifier = {} - self.webUsers = {} - self.webSessionIdsByNameIdentifier = {} - self.webSessions = {} + self.userIdsByNameIdentifier = {} + self.users = {} + self.sessionTokensByNameIdentifier = {} + self.sessions = {} self.internet.addWebSite(self) - def addWebUser(self, name): - self.webUsers[name] = WebUser(name) + def addUser(self, name): + self.users[name] = WebUser(name) - def createWebSession(self, client): - self.lastWebSessionId += 1 - webSession = WebSession(self.lastWebSessionId) - self.webSessions[self.lastWebSessionId] = webSession - client.webSessionIds[self.url] = self.lastWebSessionId - return webSession + 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): - webSession = self.getWebSession(principal) - webUser = self.getWebUserFromWebSession(webSession) - if webUser is None: - return None - return webUser.identityDump - - def getSessionDump(self, principal): - webSession = self.getWebSession(principal) - if webSession is None: + session = self.getSessionFromPrincipal(principal) + user = self.getUserFromSession(session) + if user is None: return None - return webSession.sessionDump + return user.lassoIdentityDump - def getWebSession(self, principal): - webSessionId = principal.webSessionIds.get(self.url, None) - if webSessionId is None: - # The user has no web session opened on this site. + def getLassoSessionDump(self, principal): + session = self.getSessionFromPrincipal(principal) + if session is None: return None - return self.webSessions.get(webSessionId, None) + return session.lassoSessionDump - def getWebSessionFromNameIdentifier(self, nameIdentifier): - webSessionId = self.webSessionIdsByNameIdentifier.get(nameIdentifier, None) - if webSessionId is None: + 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.webSessions.get(webSessionId, None) + return self.sessions.get(sessionToken, None) + + def getSessionFromPrincipal(self, principal): + sessionToken = principal.sessionTokens.get(self.url, None) + return self.getSessionFromToken(sessionToken) - def getWebUserFromNameIdentifier(self, nameIdentifier): - webUserId = self.webUserIdsByNameIdentifier.get(nameIdentifier, None) - if webUserId is None: + 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.webUsers.get(webUserId, None) + return self.users.get(userId, None) - def getWebUserFromWebSession(self, webSession): - if webSession is None: + def getUserFromSession(self, session): + if session is None: return None - webUserId = webSession.webUserId - if webUserId is None: + userId = session.userId + if userId is None: # The user has no account on this site. return None - return self.webUsers.get(webUserId, None) + return self.users.get(userId, None) def handleHttpRequest(self, httpRequest): httpRequestHandler = HttpRequestHandler(self, httpRequest) @@ -280,3 +283,14 @@ class WebSite(WebClient): return httpRequestHandler.respond( 404, 'Path "%s" Not Found.' % httpRequestHandler.httpRequest.path) return method(httpRequestHandler) + + +class WebUser(abstractweb.WebUserMixin, object): + """Simulation of user of a web site""" + + 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 |
