in server/api/plugins/session.py [0:0]
def __init__(self, DB, environ, config):
"""
Loads the current user session or initiates a new session if
none was found.
"""
self.config = config
self.user = None
self.DB = DB
self.ip = environ.get('REMOTE_ADDR', '?.?.?.?')
if environ.get('HTTP_X_FORWARDED_FOR'):
self.ip = environ.get('HTTP_X_FORWARDED_FOR')
self.headers = [('Content-Type', 'application/json')]
self.cookie = None
self.environ = environ
# Construct the URL we're visiting
self.url = "https://asf.jamhosted.net"
self.url += environ.get('SCRIPT_NAME', '/')
self.sdoc = None
# Get Blocky cookie
cookie = None
cookies = None
if 'HTTP_COOKIE' in environ:
cookies = http.cookies.SimpleCookie(environ['HTTP_COOKIE'])
if cookies and 'blocky_session' in cookies:
cookie = cookies['blocky_session'].value
if not NO_SESSIONS:
try:
if re.match(r"^[-a-f0-9]+$", cookie): # Validate cookie, must follow UUID4 specs
doc = None
sdoc = self.DB.ES.get(index=self.DB.dbname, doc_type='uisession', id = cookie)
if sdoc:
self.sdoc = sdoc['_source']
if sdoc and 'cid' in sdoc['_source']:
uid = sdoc['_source']['cid']
if uid in account_lookup_cache:
doc = account_lookup_cache[uid]
else:
doc = self.DB.ES.get(index=self.DB.dbname, doc_type='useraccount', id = uid)
account_lookup_cache[uid] = doc
if sdoc and '_source' in sdoc and sdoc['_source'].get('timestamp'):
# Make sure this cookie has been used in the past 7 days, else nullify it.
# Further more, run an update of the session if >1 hour ago since last update.
age = time.time() - sdoc['_source']['timestamp']
if age > (7*86400):
self.DB.ES.delete(index=self.DB.dbname, doc_type='uisession', id = cookie)
sdoc['_source'] = None # Wipe it!
doc = None
elif age > 3600:
sdoc['_source']['timestamp'] = int(time.time()) # Update timestamp in session DB
self.DB.ES.update(index=self.DB.dbname, doc_type='uisession', id = cookie, body = {'doc':sdoc['_source']})
if doc:
self.user = doc['_source']
if not sdoc:
cookie = None
else:
cookie = None
except Exception as err:
print(err)
if not cookie:
cookie = self.newCookie()
self.cookie = cookie