Explorar el Código

Disable session expiry in debug mode.

master
Ben Kurtovic hace 7 años
padre
commit
d762d0dfab
Se han modificado 1 ficheros con 22 adiciones y 11 borrados
  1. +22
    -11
      calefaction/database.py

+ 22
- 11
calefaction/database.py Ver fichero

@@ -4,7 +4,7 @@ from datetime import datetime
import random
import sqlite3

from flask import g
from flask import current_app, g
from werkzeug.local import LocalProxy

__all__ = ["Database"]
@@ -62,6 +62,9 @@ class Database:
period of time, or if their absolute age exceeds some number. We don't
actually remove them until a bit after this time.
"""
if current_app.debug:
return # Sessions don't expire in debug mode

query = """DELETE FROM session WHERE
strftime("%s", "now") - strftime("%s", session_created) >= {} OR
strftime("%s", "now") - strftime("%s", session_touched) >= {}"""
@@ -71,6 +74,22 @@ class Database:
with self._conn as conn:
conn.execute(query.format(create_thresh, touch_thresh))

def _build_expiry_check(self):
"""Build and return a snippet of SQL to check for valid sessions.

The SQL should be inserted in a WHERE clause. If debug mode is active,
we just return an empty string.
"""
if current_app.debug:
return ""

check = """ AND
strftime("%s", "now") -
strftime("%s", session_created) < {} AND
strftime("%s", "now") -
strftime("%s", session_touched) < {}"""
return check.format(self.MAX_SESSION_AGE, self.MAX_SESSION_STALENESS)

def new_session(self):
"""Allocate a new session in the database.

@@ -94,11 +113,7 @@ class Database:
self._clear_old_sessions()

query = """SELECT session_created FROM session
WHERE session_id = ? AND
strftime("%s", "now") - strftime("%s", session_created) < {} AND
strftime("%s", "now") - strftime("%s", session_touched) < {}"""
query = query.format(self.MAX_SESSION_AGE, self.MAX_SESSION_STALENESS)

WHERE session_id = ?""" + self._build_expiry_check()
res = self._conn.execute(query, (sid,)).fetchall()
if not res:
return None
@@ -107,11 +122,7 @@ class Database:
def read_session(self, sid):
"""Return the character associated with the given session, or None."""
query = """SELECT session_character FROM session
WHERE session_id = ? AND
strftime("%s", "now") - strftime("%s", session_created) < {} AND
strftime("%s", "now") - strftime("%s", session_touched) < {}"""
query = query.format(self.MAX_SESSION_AGE, self.MAX_SESSION_STALENESS)

WHERE session_id = ?""" + self._build_expiry_check()
res = self._conn.execute(query, (sid,)).fetchall()
return res[0][0] if res else None



Cargando…
Cancelar
Guardar