Molodetz blogrol volgens DPP-template
This commit is contained in:
@@ -0,0 +1,66 @@
|
||||
# retoor <retoor@molodetz.nl>
|
||||
import secrets
|
||||
from datetime import datetime, timedelta, timezone
|
||||
|
||||
from molodetz.database.core import db, generate_uid, now_iso
|
||||
|
||||
|
||||
def create_session(user_uid, max_age_seconds):
|
||||
token = secrets.token_hex(32)
|
||||
expires = datetime.now(timezone.utc) + timedelta(seconds=max_age_seconds)
|
||||
db["sessions"].insert(
|
||||
{
|
||||
"uid": generate_uid(),
|
||||
"token": token,
|
||||
"user_uid": user_uid,
|
||||
"created_at": now_iso(),
|
||||
"expires_at": expires.isoformat(),
|
||||
"deleted_at": None,
|
||||
"deleted_by": None,
|
||||
}
|
||||
)
|
||||
return token
|
||||
|
||||
|
||||
def get_session(token):
|
||||
if not token or "sessions" not in db.tables:
|
||||
return None
|
||||
return db["sessions"].find_one(token=token, deleted_at=None)
|
||||
|
||||
|
||||
def hard_delete_session(session_id):
|
||||
db["sessions"].delete(id=session_id)
|
||||
|
||||
|
||||
def end_session(token, actor):
|
||||
if "sessions" not in db.tables:
|
||||
return
|
||||
row = db["sessions"].find_one(token=token, deleted_at=None)
|
||||
if row:
|
||||
db["sessions"].update({"id": row["id"], "deleted_at": now_iso(), "deleted_by": actor}, ["id"])
|
||||
|
||||
|
||||
def prune_expired_sessions(dry_run=False):
|
||||
if "sessions" not in db.tables:
|
||||
return 0
|
||||
stamp = now_iso()
|
||||
rows = list(db.query("SELECT id FROM sessions WHERE expires_at < :stamp", stamp=stamp))
|
||||
if not dry_run and rows:
|
||||
with db:
|
||||
db.query("DELETE FROM sessions WHERE expires_at < :stamp", stamp=stamp)
|
||||
return len(rows)
|
||||
|
||||
|
||||
def end_all_sessions_for(user_uid, actor):
|
||||
if "sessions" not in db.tables:
|
||||
return 0
|
||||
stamp = now_iso()
|
||||
with db:
|
||||
db.query(
|
||||
"UPDATE sessions SET deleted_at = :stamp, deleted_by = :actor "
|
||||
"WHERE user_uid = :user_uid AND deleted_at IS NULL",
|
||||
stamp=stamp,
|
||||
actor=actor,
|
||||
user_uid=user_uid,
|
||||
)
|
||||
return 1
|
||||
Reference in New Issue
Block a user