import json from typing import Union from fastapi import FastAPI from starlette.config import Config from starlette.requests import Request from starlette.middleware.sessions import SessionMiddleware from starlette.responses import HTMLResponse, RedirectResponse from authlib.integrations.starlette_client import OAuth, OAuthError config = Config(".env") oauth = OAuth(config) oauth.register( name="gitea", server_metadata_url="https://git.leafbla.de/.well-known/openid-configuration", ) app = FastAPI() app.add_middleware(SessionMiddleware, secret_key=config.get("SESSION_SECRET_KEY")) @app.get("/") def index(request: Request): header = f"
{json.dumps(request.session)}" user = request.session.get("user") if user is None: return HTMLResponse(f'{header}login') data = json.dumps(user) html = f"{header}
{data}" 'logout' return HTMLResponse(html) @app.get("/login") async def login(request: Request): redirect_uri = request.url_for("auth") return await oauth.gitea.authorize_redirect(request, redirect_uri) @app.get("/auth") async def auth(request: Request): try: token = await oauth.gitea.authorize_access_token(request) except OAuthError as e: return HTMLResponse(f"