diff --git a/config.py b/config.py index 6cec268..d2210c4 100644 --- a/config.py +++ b/config.py @@ -13,8 +13,9 @@ API_TOKEN = os.environ["AUTHENTIK_API_TOKEN"] SECRET_KEY = os.environ["SESSION_SECRET"] REDIRECT_URI = os.environ.get("OIDC_REDIRECT_URI", "https://weircon.dk/auth/callback") ADMIN_GROUP = os.environ.get("ADMIN_GROUP", "authentik Admins") -# Hvem der må høre familiens podcasts (/podcast); admins kan altid. -PODCAST_GROUP = os.environ.get("PODCAST_GROUP", "Familie") +# Hvem der må høre familiens podcasts (/podcast); admins kan altid. Kommasepareret: +# Familie er den nære familie, Gramps er slægten der kun har Gramps + podcast + portal. +PODCAST_GROUPS = {g.strip() for g in os.environ.get("PODCAST_GROUP", "Familie,Gramps").split(",") if g.strip()} MATOMO_BASE = os.environ.get("MATOMO_BASE", "https://matomo.weircon.dk").rstrip("/") MATOMO_TOKEN = os.environ.get("MATOMO_TOKEN", "") diff --git a/main.py b/main.py index 1777a14..66489af 100644 --- a/main.py +++ b/main.py @@ -71,14 +71,14 @@ def require_admin(request: Request): def require_familie(request: Request): - """Logget ind og i PODCAST_GROUP (eller admin). Uden login: login og tilbage hertil.""" + """Logget ind og i en af PODCAST_GROUPS (eller admin). Uden login: login og tilbage hertil.""" user = current_user(request) if not user and request.method == "GET": nxt = request.url.path + (f"?{request.url.query}" if request.url.query else "") raise HTTPException(303, headers={"Location": "/auth/login?next=" + urllib.parse.quote(nxt, safe="")}) if not user: raise HTTPException(401, "Log ind først") - if not (is_admin(user) or config.PODCAST_GROUP in (user.get("groups") or [])): + if not (is_admin(user) or config.PODCAST_GROUPS & set(user.get("groups") or [])): raise HTTPException(403, "Kun for familien") return user @@ -153,7 +153,7 @@ async def dashboard_content(request: Request): def _podcast_kort(user) -> list[dict]: """Kort til forsiden: én pr. podcast med udgivne episoder (admins ser også kladder).""" - if not (is_admin(user) or config.PODCAST_GROUP in (user.get("groups") or [])): + if not (is_admin(user) or config.PODCAST_GROUPS & set(user.get("groups") or [])): return [] ud = [] for name in podcast.shows(): diff --git a/templates/admin_invitations.html b/templates/admin_invitations.html index f380cd4..4eab4a5 100644 --- a/templates/admin_invitations.html +++ b/templates/admin_invitations.html @@ -24,13 +24,18 @@
Grupper de skal med i