This commit is contained in:
		
							parent
							
								
									832623044f
								
							
						
					
					
						commit
						04351888a8
					
				|  | @ -1,5 +1,3 @@ | |||
| import os | ||||
| 
 | ||||
| from fastapi import APIRouter | ||||
| 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 fastapi import APIRouter | ||||
| from starlette.requests import Request | ||||
| from fastapi.responses import PlainTextResponse | ||||
| 
 | ||||
| from starlette.requests import Request | ||||
| 
 | ||||
| # Scheme for the Authorization header | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue