mirror of
https://git.srhtnin.garden/sarah/SaraView.git
synced 2026-10-15 10:43:17 +02:00
Added guests.
This commit is contained in:
1 parent
6743dd7626
commit
9736a55e00
10 files changed
+200
-84
No files matched your search
+39
-8
@@ -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:
|
||||
|
||||
Reference in new issue
Block a user