Added guests.

This commit is contained in:
sarah committed 2026-09-21 21:09:25 +02:00
1 parent 6743dd7626
commit 9736a55e00
10 files changed
+200 -84

No files matched your search

+39 -8
View File
@@ -6,7 +6,7 @@ from typing import Any
from fastapi import Depends, HTTPException, Request
from Groups import AdminGroupName, GetGroupsForUser, IsUserInGroup
from Groups import AdminGroupName, GetGroupsForUser, GuestGroupName, IsUserInGroup
from Users import GetUser
@@ -14,6 +14,14 @@ ActiveSessions: dict[str, str] = {}
SessionCookieName = "SaraViewSession"
GuestUser: dict[str, Any] = {
"Username": None,
"IsAdmin": False,
"IsGuest": True,
"Groups": [GuestGroupName],
"Colour": "Purple",
}
def CreateSession(Username: str) -> str:
Token = secrets.token_urlsafe(32)
@@ -25,6 +33,21 @@ def DeleteSession(Token: str) -> None:
ActiveSessions.pop(Token, None)
def _BuildUserRecord(Username: str, User: dict[str, Any]) -> dict[str, Any]:
UserGroups = GetGroupsForUser(Username)
if GuestGroupName not in UserGroups:
UserGroups = [*UserGroups, GuestGroupName]
return {
"Username": Username,
"IsAdmin": AdminGroupName in UserGroups,
"IsGuest": False,
"Groups": UserGroups,
"Colour": User.get("Colour", "Purple"),
}
def GetCurrentUser(request: Request) -> dict[str, Any]:
Token = request.cookies.get(SessionCookieName)
Username = ActiveSessions.get(Token) if Token else None
@@ -37,14 +60,22 @@ def GetCurrentUser(request: Request) -> dict[str, Any]:
if User is None:
raise HTTPException(status_code=401, detail="Session user no longer exists.")
UserGroups = GetGroupsForUser(Username)
return _BuildUserRecord(Username, User)
return {
"Username": Username,
"IsAdmin": AdminGroupName in UserGroups,
"Groups": UserGroups,
"Colour": User.get("Colour", "Purple"),
}
def GetCurrentUserOrGuest(request: Request) -> dict[str, Any]:
Token = request.cookies.get(SessionCookieName)
Username = ActiveSessions.get(Token) if Token else None
if Username is None:
return dict(GuestUser)
User = GetUser(Username)
if User is None:
return dict(GuestUser)
return _BuildUserRecord(Username, User)
def RequireAdmin(CurrentUser: dict = Depends(GetCurrentUser)) -> dict: