diff --git a/apps/production/wikijs-config.py b/apps/production/wikijs-config.py index 30becc6..e3c570a 100644 --- a/apps/production/wikijs-config.py +++ b/apps/production/wikijs-config.py @@ -155,7 +155,7 @@ def login(): return d["jwt"] if d["responseResult"]["succeeded"] else None -def _set_strategies(jwt: str, oidc_config: list): +def _set_strategies(jwt: str, oidc_config: list, auto_enroll: list | None = None): strategies = [ { # local bleibt aktiviert: der Konfig-Job loggt sich damit ein und es ist der # Break-Glass-Zugang (/login?all). Auf der Login-Seite wird es per hideLocal @@ -167,7 +167,16 @@ def _set_strategies(jwt: str, oidc_config: list): { "key": STRATEGY_KEY, "strategyKey": "oidc", "displayName": "Authentik", "order": 1, "isEnabled": True, "selfRegistration": True, - "domainWhitelist": [], "autoEnrollGroups": [], "config": oidc_config, + # autoEnrollGroups: jeder Authentik-Login landet in wiki-anwender + # (#0049: "Betrieb = Admin", Anwender lesen /anwender + Startseite). + # Ohne das legt selfRegistration zwar ein Konto an, es bekommt aber + # KEINE Gruppe - und weil Guests unten alle Rechte entzogen bekommt, + # sieht der Nutzer dann gar nichts und erfaehrt auch nicht warum + # (#0103, real passiert). Admins bleiben Handarbeit in Authentik: + # Mitgliedschaft in "authentik Admins" wird ueber den groups-Claim + # gemappt und ueberschreibt diese Grundausstattung nicht. + "domainWhitelist": [], "autoEnrollGroups": auto_enroll or [], + "config": oidc_config, }, ] r = gql( @@ -193,8 +202,14 @@ def ensure_oidc(jwt: str): "groupsClaim": "groups", "mapGroups": True, } oidc_config = [{"key": k, "value": json.dumps({"v": v})} for k, v in cfg.items()] - _set_strategies(jwt, oidc_config) - log("OIDC-Strategy gesetzt (local bleibt aktiv als Break-Glass)") + # Die Gruppe existiert hier sicher: main() legt sie vor ensure_oidc an. + anwender = group_id(jwt, "wiki-anwender") + if anwender is None: + sys.exit("ABBRUCH: Gruppe 'wiki-anwender' nicht gefunden — ohne sie liefe " + "jeder neue Login wieder ins Leere (#0103).") + _set_strategies(jwt, oidc_config, [anwender]) + log(f"OIDC-Strategy gesetzt (local bleibt aktiv als Break-Glass; " + f"Auto-Enrollment in wiki-anwender, id {anwender})") def set_hide_local(jwt: str):