From 3a363eaea5ac9e55f7edbb112bf4081cef54be79 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9dric=20Krier?= Date: Thu, 26 Jun 2008 11:00:29 +0200 Subject: [PATCH] Allow to have more than one session per users. --- trytond/security.py | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/trytond/security.py b/trytond/security.py index ddafac67bb..76d247deb9 100644 --- a/trytond/security.py +++ b/trytond/security.py @@ -25,7 +25,8 @@ def login(dbname, loginname, password, cache=True): _USER_CACHE.setdefault(dbname, {}) timestamp = time.time() session = str(random.random()) - _USER_CACHE[dbname][user_id] = (timestamp, session) + _USER_CACHE[dbname].setdefault(user_id, []) + _USER_CACHE[dbname][user_id].append((timestamp, session)) return (user_id, session) else: return user_id @@ -41,10 +42,17 @@ def check_super(passwd): def check(dbname, user, session, reset_timeout=True): session = session.encode('utf-8') if _USER_CACHE.get(dbname, {}).has_key(user): - timestamp, real_session = _USER_CACHE[dbname][user] - if real_session == session \ - and abs(timestamp - time.time()) < SESSION_TIMEOUT: - if reset_timeout: - _USER_CACHE[dbname][user] = (time.time(), real_session) - return True + to_del = [] + for i in range(len(_USER_CACHE[dbname][user])): + timestamp, real_session = _USER_CACHE[dbname][user][i] + if abs(timestamp - time.time()) < SESSION_TIMEOUT: + if real_session == session: + if reset_timeout: + _USER_CACHE[dbname][user][i] = (time.time(), real_session) + return True + else: + to_del.append(i) + to_del.reverse() + for i in to_del: + del USER_CACHE[dbname][user][i] raise Exception('NotLogged')