session: rename cookie to 'cista', add __Host- prefix on HTTPS

This commit is contained in:
Leo Vasanko
2026-04-27 04:00:14 +00:00
parent d6d5eb85d6
commit bcbcef219e
4 changed files with 22 additions and 11 deletions
+1 -1
View File
@@ -96,7 +96,7 @@ async def persist_auth_session(req, res):
existing = getattr(req.ctx, "session", None) existing = getattr(req.ctx, "session", None)
if isinstance(existing, dict) and existing.get("username") == username: if isinstance(existing, dict) and existing.get("username") == username:
return return
session.create(res, username, secure=req.scheme == "https") session.create(req, res, username)
# Register either SSO proxy or built-in auth routes based on PASKIA_BACKEND_URL # Register either SSO proxy or built-in auth routes based on PASKIA_BACKEND_URL
+4 -4
View File
@@ -1107,7 +1107,7 @@ async def login_page(request):
res = html(doc) res = html(doc)
if s is False: if s is False:
session.delete(res) session.delete(request, res)
return res return res
@@ -1144,7 +1144,7 @@ async def login_post(request):
session.flash(res, "Logged in") session.flash(res, "Logged in")
else: else:
res = json({"data": {"username": username, "privileged": user.privileged}}) res = json({"data": {"username": username, "privileged": user.privileged}})
session.create(res, username, secure=request.scheme == "https") session.create(request, res, username)
return res return res
@@ -1157,7 +1157,7 @@ async def logout_post(request):
res.cookies.add_cookie("flash", msg, max_age=5) res.cookies.add_cookie("flash", msg, max_age=5)
else: else:
res = json({"message": msg}) res = json({"message": msg})
session.delete(res) session.delete(request, res)
return res return res
@@ -1189,7 +1189,7 @@ async def change_password(request):
session.flash(res, "Password updated") session.flash(res, "Password updated")
else: else:
res = json({"message": "Password updated"}) res = json({"message": "Password updated"})
session.create(res, username, secure=request.scheme == "https") session.create(request, res, username)
return res return res
+16 -5
View File
@@ -4,6 +4,8 @@ from time import time
# In-memory session store: token -> {"username": str, "exp": int} # In-memory session store: token -> {"username": str, "exp": int}
_sessions: dict[str, dict] = {} _sessions: dict[str, dict] = {}
SESSION_COOKIE_NAME = "cista"
max_age = 365 * 86400 # Seconds since last login max_age = 365 * 86400 # Seconds since last login
@@ -19,7 +21,7 @@ def _purge_expired() -> None:
def get(request): def get(request):
token = request.cookies.get("s") token = request.cookies.get(SESSION_COOKIE_NAME)
if token is None: if token is None:
return None return None
s = _sessions.get(token) s = _sessions.get(token)
@@ -31,15 +33,24 @@ def get(request):
return s return s
def create(res, username, *, secure: bool = True, **kwargs): def create(request, res, username, **kwargs):
_purge_expired() _purge_expired()
token = _token() token = _token()
_sessions[token] = {"exp": int(time()) + max_age, "username": username, **kwargs} _sessions[token] = {"exp": int(time()) + max_age, "username": username, **kwargs}
res.cookies.add_cookie("s", token, httponly=True, max_age=max_age, secure=secure) secure = request.scheme == "https"
res.cookies.add_cookie(
SESSION_COOKIE_NAME,
token,
httponly=True,
max_age=max_age,
secure=secure,
host_prefix=secure,
)
def delete(res): def delete(request, res):
res.cookies.delete_cookie("s") secure = request.scheme == "https"
res.cookies.delete_cookie(SESSION_COOKIE_NAME, host_prefix=secure)
def flash(res, message: str | None): def flash(res, message: str | None):
+1 -1
View File
@@ -98,7 +98,7 @@ def _session_cookie_header(username: str) -> dict[str, str]:
"exp": int(time()) + session.max_age, "exp": int(time()) + session.max_age,
"username": username, "username": username,
} }
return {"Cookie": f"s={token}"} return {"Cookie": f"cista={token}"}
@pytest.fixture @pytest.fixture