111 lines
3.8 KiB
Python
111 lines
3.8 KiB
Python
import time
|
|
import threading
|
|
from logger import Logger
|
|
|
|
|
|
|
|
class SessionContainer(threading.Thread):
|
|
def __init__(self, checkPeriod, expiryTime):
|
|
threading.Thread.__init__(self)
|
|
self.checkPeriod = checkPeriod
|
|
self.expiryTime = expiryTime
|
|
self.sessions = {}
|
|
self.sessionsLock = threading.Lock()
|
|
|
|
def get(self, sid):
|
|
if not sid:
|
|
return None
|
|
try:
|
|
self.sessionsLock.acquire()
|
|
session = self.sessions[sid]
|
|
session.updateTimestamp()
|
|
return session
|
|
except KeyError:
|
|
return None
|
|
finally:
|
|
self.sessionsLock.release()
|
|
|
|
def delete(self, sid):
|
|
if sid:
|
|
try:
|
|
self.sessionsLock.acquire()
|
|
del self.sessions[sid]
|
|
except KeyError:
|
|
pass
|
|
finally:
|
|
self.sessionsLock.release()
|
|
|
|
def add(self, session):
|
|
try:
|
|
self.sessionsLock.acquire()
|
|
self.sessions[session.getId()] = session
|
|
finally:
|
|
self.sessionsLock.release()
|
|
|
|
def run(self):
|
|
while True:
|
|
try:
|
|
self.sessionsLock.acquire()
|
|
|
|
currentTime = int(time.time())
|
|
for session in self.sessions.values():
|
|
Logger.log("SessionContainer: checking session %s, expires in %d s" % (session.getId(),
|
|
(session.getTimestamp() + self.expiryTime) - currentTime))
|
|
if (session.getTimestamp() + self.expiryTime) < currentTime:
|
|
Logger.log("SessionContainer: about to drop session %s" % session.getId())
|
|
del self.sessions[session.getId()]
|
|
finally:
|
|
self.sessionsLock.release()
|
|
|
|
time.sleep(self.checkPeriod)
|
|
|
|
|
|
class Session(object):
|
|
def __init__(self, id, params):
|
|
self.timestamp = int(time.time())
|
|
self.id = id
|
|
self.params = params
|
|
self.badmsg = ''
|
|
self.goodmsg = ''
|
|
self.role = ''
|
|
|
|
def updateTimestamp(self):
|
|
self.timestamp = int(time.time())
|
|
|
|
def getTimestamp(self):
|
|
return self.timestamp
|
|
|
|
def getId(self):
|
|
return self.id
|
|
|
|
def setParams(self, params):
|
|
self.params = params
|
|
|
|
def getParams(self):
|
|
return self.params
|
|
|
|
def setGoodMsg(self, msg):
|
|
self.goodmsg = msg
|
|
|
|
def setBadMsg(self, msg):
|
|
self.badmsg = msg
|
|
|
|
def setRedirectTarget(self, target):
|
|
self.redirectTarget = target
|
|
|
|
def setShownPage(self, page):
|
|
self.page = page
|
|
|
|
def getShownPage(self):
|
|
return self.page
|
|
|
|
def setAuthTuple(self, authTuple):
|
|
self.authTuple = authTuple
|
|
self.username = authTuple['username']
|
|
self.password = authTuple['password']
|
|
self.role = authTuple['role']
|
|
|
|
def clearMsgs(self):
|
|
self.badmsg = ''
|
|
self.goodmsg = ''
|