Log session id from handlers on selected auth routes. Adds request.state.log_extra for handlers to print access log extra.

This commit is contained in:
2026-04-29 03:02:30 +00:00
parent 1a742fc0e7
commit 72d76df35d
2 changed files with 13 additions and 6 deletions
+12
View File
@@ -21,6 +21,7 @@ from paskia.fastapi import authz, session, user
from paskia.fastapi.response import MsgspecResponse
from paskia.fastapi.session import AUTH_COOKIE, AUTH_COOKIE_NAME, get_client_ip
from paskia.globals import passkey as global_passkey
from paskia.util.crypto import hash_secret
from paskia.util import hostutil, htmlutil, passphrase, permutil, userinfo
from paskia.util.apistructs import (
ApiCheckUserResponse,
@@ -56,6 +57,12 @@ async def http_exception_handler(_request: Request, exc: HTTPException):
_REFRESH_INTERVAL = timedelta(minutes=5)
def _set_log_extra(request: Request, *parts: str) -> None:
values = [part for part in parts if part]
if values:
request.state.log_extra = " ".join(values)
@app.exception_handler(ValueError)
async def value_error_handler(_request: Request, exc: ValueError):
return JSONResponse(status_code=400, content={"detail": str(exc)})
@@ -110,6 +117,7 @@ async def validate_token(
)
session.set_session_cookie(response, auth)
renewed = True
_set_log_extra(request, ctx.session.key)
return MsgspecResponse(
ApiValidateResponse(
valid=True,
@@ -202,6 +210,7 @@ async def forward_authentication(
host=request.headers.get("host"),
max_age=max_age,
)
_set_log_extra(request, request.headers.get("x-forwarded-uri", ""), ctx.session.key)
# Build permission scopes for Remote-Groups header
role_permissions = (
{p.scope for p in ctx.permissions} if ctx.permissions else set()
@@ -276,6 +285,8 @@ async def api_user_info(
clear_session=True,
)
_set_log_extra(request, ctx.session.key)
return MsgspecResponse(
await userinfo.build_user_info(
user_uuid=ctx.user.uuid,
@@ -351,5 +362,6 @@ async def api_set_session(
if not ctx:
raise HTTPException(401, f"Session not found on {host}")
_set_log_extra(request, hash_secret("cookie", secret))
session.set_session_cookie(response, secret)
return {"status": "ok", "user": str(ctx.user.uuid)}
+1 -6
View File
@@ -256,12 +256,7 @@ class AccessLogMiddleware(BaseHTTPMiddleware):
path = f"{path}?{request.url.query}"
status = response.status_code
extra = ""
# For forward-auth endpoint, include the original target URI when provided.
if request.url.path == "/auth/api/forward":
forwarded_uri = request.headers.get("x-forwarded-uri")
if forwarded_uri:
extra = forwarded_uri
extra = getattr(request.state, "log_extra", "")
line = format_access_log(
client, status, method, host, path, duration_ms, extra=extra