diff --git a/src/oidc-test/main.py b/src/oidc-test/main.py index 46e6594..e0f999c 100644 --- a/src/oidc-test/main.py +++ b/src/oidc-test/main.py @@ -174,9 +174,11 @@ async def current_user(request: Request, token: str | None = Depends(fastapi_oau async def login(request: Request, provider: str) -> RedirectResponse: redirect_uri = request.url_for("auth", provider=provider) try: - return await getattr(authlib_oauth, provider).authorize_redirect( - request, redirect_uri - ) + provider_ = getattr(authlib_oauth, provider) + except AttributeError: + raise HTTPException(500, "") + try: + return await provider_.authorize_redirect(request, redirect_uri) except HTTPError: raise HTTPException(status.HTTP_401_UNAUTHORIZED, "Cannot reach provider") @@ -184,18 +186,19 @@ async def login(request: Request, provider: str) -> RedirectResponse: @app.get("/auth/{provider}") async def auth(request: Request, provider: str) -> RedirectResponse: try: - token = await getattr(authlib_oauth, provider).authorize_access_token(request) - + provider_ = getattr(authlib_oauth, provider) + except AttributeError: + raise HTTPException(500, "") + try: + token = await provider_.authorize_access_token(request) except OAuthError as error: - return HTMLResponse(f"

{error.error}

") - + raise HTTPException(status_code=401, detail=error.error) user = token.get("userinfo") - if user: request.session["user"] = dict(user) - return RedirectResponse(url=request.session.pop("next", "/")) - - return RedirectResponse(url="/login") + return RedirectResponse(url="/") + else: + return RedirectResponse(url="/login") @app.get("/logout")