|
import os |
|
|
|
from fastapi import APIRouter, Depends, HTTPException, Request |
|
from fastapi.responses import HTMLResponse |
|
from fastapi.templating import Jinja2Templates |
|
import firebase_admin |
|
from firebase_admin import auth, credentials |
|
from firebase_admin.exceptions import FirebaseError |
|
|
|
|
|
router = APIRouter() |
|
|
|
templates = Jinja2Templates(directory=os.path.join( |
|
os.path.dirname(os.path.abspath(__file__)), 'static')) |
|
|
|
if os.getenv('USE_AUTH', ''): |
|
cred = credentials.Certificate(os.environ.get('FIREBASE_CONFIG_PATH')) |
|
firebase_admin.initialize_app(cred) |
|
|
|
async def get_current_user(request: Request): |
|
"""Heler function for auth with Firebase.""" |
|
if os.getenv('USE_AUTH', ''): |
|
|
|
if 'Authorization' not in request.headers: |
|
|
|
return "" |
|
token = request.headers.get('Authorization').split("Bearer ")[1] |
|
try: |
|
|
|
decoded_token = auth.verify_id_token(token) |
|
except FirebaseError: |
|
raise HTTPException( |
|
status_code=status.HTTP_401_UNAUTHORIZED, |
|
detail='Invalid authentication credentials', |
|
headers={'WWW-Authenticate': 'Bearer'}, |
|
) |
|
|
|
return decoded_token |
|
else: |
|
return "" |
|
|
|
@router.get("/status") |
|
async def status(): |
|
return {"status": "ok"} |
|
|
|
|
|
@router.get("/", response_class=HTMLResponse) |
|
async def index(request: Request, user=Depends(get_current_user)): |
|
return templates.TemplateResponse("index.html", {"request": request}) |
|
|