1
|
'''Session and SessionManager objects. Configuration variables and utilities'''
|
2
|
|
3
|
from quixote import get_request
|
4
|
|
5
|
import qommon.sessions
|
6
|
from qommon.sessions import Session
|
7
|
from qommon.sessions import StorageSessionManager as SessionManager
|
8
|
|
9
|
from users import User
|
10
|
from hosts import Host
|
11
|
|
12
|
class BasicSession(Session):
|
13
|
'''Session object. Configuration variables and utilities'''
|
14
|
_names = 'sessions'
|
15
|
|
16
|
def __init__(self, id):
|
17
|
self.users = {}
|
18
|
self.lasso_session_dumps = {}
|
19
|
self.lasso_session_indexes = {}
|
20
|
self.lasso_session_name_identifiers = {}
|
21
|
self.provider_id = None
|
22
|
Session.__init__(self, id)
|
23
|
|
24
|
# lasso_session_indexes newly introduced
|
25
|
def __setstate__(self, dict):
|
26
|
self.lasso_session_indexes = {}
|
27
|
self.lasso_session_name_identifiers = {}
|
28
|
self.__dict__.update(dict)
|
29
|
|
30
|
def has_info(self):
|
31
|
return self.users or self.lasso_session_dumps or self.provider_id or Session.has_info(self)
|
32
|
is_dirty = has_info
|
33
|
|
34
|
def get_user(self, provider_id=None):
|
35
|
# Defaults to getting Larpe user.
|
36
|
# It allows get_request().user to work in administration interface.
|
37
|
if not provider_id:
|
38
|
user_id = None
|
39
|
host = Host.get_host_from_url()
|
40
|
if not host:
|
41
|
host_list = Host.select(lambda x: x.name == 'larpe')
|
42
|
if host_list:
|
43
|
host = host_list[0]
|
44
|
if host:
|
45
|
user_id = self.users.get(host.provider_id)
|
46
|
if not user_id:
|
47
|
user_id = self.users.get(host.saml2_provider_id)
|
48
|
else:
|
49
|
user_id = self.users.get(provider_id)
|
50
|
|
51
|
if user_id:
|
52
|
try:
|
53
|
user = User.get(user_id)
|
54
|
except KeyError:
|
55
|
user = User()
|
56
|
# if str(user_id).startswith('anonymous-'):
|
57
|
user.id = user_id
|
58
|
# user.anonymous = True
|
59
|
# if self.name_identifiers.has_key(providerId):
|
60
|
# if not user.name_identifiers.has_key(providerId):
|
61
|
# user.name_identifiers[providerId] = [ self.name_identifiers[providerId] ]
|
62
|
|
63
|
# if self.name_identifiers.has_key(providerId):
|
64
|
# user.name_identifiers[providerId] = [ self.name_identifiers[providerId] ]
|
65
|
# else:
|
66
|
# user.name_identifiers[providerId] = []
|
67
|
# user.lasso_dumps[providerId] = self.lasso_anonymous_identity_dump
|
68
|
return user
|
69
|
return None
|
70
|
|
71
|
def set_user(self, user_id, provider_id):
|
72
|
self.users[provider_id] = user_id
|
73
|
|
74
|
class StorageSessionManager(SessionManager):
|
75
|
'''SessionManager object. Subclass with multi-hosts specific features.'''
|
76
|
def expire_session(self, provider_id=None):
|
77
|
session = get_request().session
|
78
|
if session.id is not None:
|
79
|
if provider_id:
|
80
|
if session.users.has_key(provider_id):
|
81
|
del session.users[provider_id]
|
82
|
if session.lasso_session_dumps.has_key(provider_id):
|
83
|
del session.lasso_session_dumps[provider_id]
|
84
|
if session.lasso_session_indexes.has_key(provider_id):
|
85
|
del session.lasso_session_indexes[provider_id]
|
86
|
if session.lasso_session_name_identifiers.has_key(provider_id):
|
87
|
del session.lasso_session_name_identifiers[provider_id]
|
88
|
session.store()
|
89
|
if not session.users:
|
90
|
SessionManager.expire_session(self)
|
91
|
|
92
|
qommon.sessions.BasicSession = BasicSession
|