This commit is contained in:
parent
832623044f
commit
04351888a8
|
@ -1,5 +1,3 @@
|
||||||
import os
|
|
||||||
|
|
||||||
from fastapi import APIRouter
|
from fastapi import APIRouter
|
||||||
from fastapi.responses import PlainTextResponse
|
from fastapi.responses import PlainTextResponse
|
||||||
|
|
||||||
|
|
50
src/hellocomputer/routers/auth.py
Normal file
50
src/hellocomputer/routers/auth.py
Normal file
|
@ -0,0 +1,50 @@
|
||||||
|
from authlib.integrations.starlette_client import OAuth, OAuthError
|
||||||
|
from fastapi import APIRouter
|
||||||
|
from fastapi.responses import HTMLResponse, RedirectResponse
|
||||||
|
from starlette.requests import Request
|
||||||
|
|
||||||
|
from ..config import settings
|
||||||
|
|
||||||
|
router = APIRouter()
|
||||||
|
|
||||||
|
oauth = OAuth()
|
||||||
|
oauth.register(
|
||||||
|
"auth0",
|
||||||
|
client_id=settings.auth0_client_id,
|
||||||
|
client_secret=settings.auth0_client_secret,
|
||||||
|
client_kwargs={"scope": "openid profile email", "verify": False},
|
||||||
|
server_metadata_url=f"https://{settings.auth0_domain}/.well-known/openid-configuration",
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@router.get("/login")
|
||||||
|
async def login(request: Request):
|
||||||
|
return await oauth.auth0.authorize_redirect(
|
||||||
|
request,
|
||||||
|
redirect_uri=f"{settings.base_url}/callback",
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@router.route("/callback", methods=["GET", "POST"])
|
||||||
|
async def callback(request: Request):
|
||||||
|
try:
|
||||||
|
token = await oauth.auth0.authorize_access_token(request)
|
||||||
|
except OAuthError as error:
|
||||||
|
return HTMLResponse(f"<h1>{error.error}</h1>")
|
||||||
|
user = token.get("userinfo")
|
||||||
|
if user:
|
||||||
|
request.session["user"] = dict(user)
|
||||||
|
|
||||||
|
return RedirectResponse(url="/app")
|
||||||
|
|
||||||
|
|
||||||
|
@router.get("/logout")
|
||||||
|
async def logout(request: Request):
|
||||||
|
request.session.pop("user", None)
|
||||||
|
return RedirectResponse(url="/")
|
||||||
|
|
||||||
|
|
||||||
|
@router.get("/user")
|
||||||
|
async def user(request: Request):
|
||||||
|
user = request.session.get("user")
|
||||||
|
return user
|
31
src/hellocomputer/routers/health.py
Normal file
31
src/hellocomputer/routers/health.py
Normal file
|
@ -0,0 +1,31 @@
|
||||||
|
from fastapi import APIRouter, status
|
||||||
|
from pydantic import BaseModel
|
||||||
|
|
||||||
|
router = APIRouter()
|
||||||
|
|
||||||
|
|
||||||
|
class HealthCheck(BaseModel):
|
||||||
|
"""Response model to validate and return when performing a health check."""
|
||||||
|
|
||||||
|
status: str = "OK"
|
||||||
|
|
||||||
|
|
||||||
|
@router.get(
|
||||||
|
"/health",
|
||||||
|
tags=["healthcheck"],
|
||||||
|
summary="Perform a Health Check",
|
||||||
|
response_description="Return HTTP Status Code 200 (OK)",
|
||||||
|
status_code=status.HTTP_200_OK,
|
||||||
|
response_model=HealthCheck,
|
||||||
|
)
|
||||||
|
def get_health() -> HealthCheck:
|
||||||
|
"""
|
||||||
|
## Perform a Health Check
|
||||||
|
Endpoint to perform a healthcheck on. This endpoint can primarily be used Docker
|
||||||
|
to ensure a robust container orchestration and management is in place. Other
|
||||||
|
services which rely on proper functioning of the API service will not deploy if this
|
||||||
|
endpoint returns any other HTTP status code except 200 (OK).
|
||||||
|
Returns:
|
||||||
|
HealthCheck: Returns a JSON response with the health status
|
||||||
|
"""
|
||||||
|
return HealthCheck(status="OK")
|
|
@ -1,9 +1,8 @@
|
||||||
from uuid import uuid4
|
from uuid import uuid4
|
||||||
|
|
||||||
from fastapi import APIRouter
|
from fastapi import APIRouter
|
||||||
from starlette.requests import Request
|
|
||||||
from fastapi.responses import PlainTextResponse
|
from fastapi.responses import PlainTextResponse
|
||||||
|
from starlette.requests import Request
|
||||||
|
|
||||||
# Scheme for the Authorization header
|
# Scheme for the Authorization header
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue