diff --git a/src/oidc_test/main.py b/src/oidc_test/main.py index 0f49dfa..83ee101 100644 --- a/src/oidc_test/main.py +++ b/src/oidc_test/main.py @@ -94,15 +94,16 @@ async def home( now = datetime.now() if oidc_provider and ( ( - provider := providers_settings.get( + oidc_provider_settings := providers_settings.get( request.session.get("oidc_provider_id", "") ) ) is not None ): - resources = provider.resources + resources = oidc_provider_settings.resources else: resources = [] + oidc_provider_settings = None return templates.TemplateResponse( name="home.html", request=request, @@ -110,6 +111,7 @@ async def home( "settings": settings.model_dump(), "user": user, "now": now, + "oidc_provider_settings": oidc_provider_settings, "resources": resources, "user_info_details": ( pretty_details(user, now) @@ -212,6 +214,20 @@ async def auth(request: Request, oidc_provider_id: str) -> RedirectResponse: ) +@app.get("/account") +async def account( + request: Request, + oidc_provider: Annotated[StarletteOAuth2App, Depends(get_oidc_provider)], +) -> RedirectResponse: + if ( + provider := providers_settings.get(request.session.get("oidc_provider_id", "")) + ) is None: + raise HTTPException( + status.HTTP_406_NOT_ACCEPTABLE, detail="No oidc provider setting" + ) + return RedirectResponse(f"{provider.url}/account") + + @app.get("/logout") async def logout( request: Request, diff --git a/src/oidc_test/settings.py b/src/oidc_test/settings.py index 048aa57..38443fa 100644 --- a/src/oidc_test/settings.py +++ b/src/oidc_test/settings.py @@ -32,6 +32,7 @@ class OIDCProvider(BaseModel): code_challenge_method: str | None = None hint: str = "No hint" resources: list[Resource] = [] + account_url_suffix: str | None = None @computed_field @property @@ -43,6 +44,14 @@ class OIDCProvider(BaseModel): def token_url(self) -> str: return "auth/" + self.id + @computed_field + @property + def account_url(self) -> str | None: + if self.account_url_suffix: + return self.url + self.account_url_suffix + else: + return None + class ResourceProvider(BaseModel): id: str diff --git a/src/oidc_test/templates/base.html b/src/oidc_test/templates/base.html index d2aa44b..3ff5f65 100644 --- a/src/oidc_test/templates/base.html +++ b/src/oidc_test/templates/base.html @@ -1,6 +1,6 @@
-