11 from cubicweb.web.application import AbstractSessionManager |
11 from cubicweb.web.application import AbstractSessionManager |
12 |
12 |
13 |
13 |
14 class InMemoryRepositorySessionManager(AbstractSessionManager): |
14 class InMemoryRepositorySessionManager(AbstractSessionManager): |
15 """manage session data associated to a session identifier""" |
15 """manage session data associated to a session identifier""" |
16 |
16 |
17 def __init__(self): |
17 def __init__(self): |
18 AbstractSessionManager.__init__(self) |
18 AbstractSessionManager.__init__(self) |
19 # XXX require a RepositoryAuthenticationManager which violates |
19 # XXX require a RepositoryAuthenticationManager which violates |
20 # authenticate interface by returning a session instead of a user |
20 # authenticate interface by returning a session instead of a user |
21 #assert isinstance(self.authmanager, RepositoryAuthenticationManager) |
21 #assert isinstance(self.authmanager, RepositoryAuthenticationManager) |
22 self._sessions = {} |
22 self._sessions = {} |
23 |
23 |
24 def current_sessions(self): |
24 def current_sessions(self): |
25 return self._sessions.values() |
25 return self._sessions.values() |
26 |
26 |
27 def get_session(self, req, sessionid): |
27 def get_session(self, req, sessionid): |
28 """return existing session for the given session identifier""" |
28 """return existing session for the given session identifier""" |
29 if not sessionid in self._sessions: |
29 if not sessionid in self._sessions: |
30 raise InvalidSession() |
30 raise InvalidSession() |
31 session = self._sessions[sessionid] |
31 session = self._sessions[sessionid] |
45 raise |
45 raise |
46 return session |
46 return session |
47 |
47 |
48 def open_session(self, req): |
48 def open_session(self, req): |
49 """open and return a new session for the given request |
49 """open and return a new session for the given request |
50 |
50 |
51 :raise ExplicitLogin: if authentication is required |
51 :raise ExplicitLogin: if authentication is required |
52 """ |
52 """ |
53 session = self.authmanager.authenticate(req) |
53 session = self.authmanager.authenticate(req) |
54 self._sessions[session.sessionid] = session |
54 self._sessions[session.sessionid] = session |
55 return session |
55 return session |
56 |
56 |
57 def close_session(self, session): |
57 def close_session(self, session): |
58 """close session on logout or on invalid session detected (expired out, |
58 """close session on logout or on invalid session detected (expired out, |
59 corrupted...) |
59 corrupted...) |
60 """ |
60 """ |
61 self.info('closing http session %s' % session) |
61 self.info('closing http session %s' % session) |