Spaces:
Build error
Build error
File size: 1,632 Bytes
babeaf6 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
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', ''):
# Extracts the token from the Authorization header
if 'Authorization' not in request.headers:
# Anonymous users.
return ""
token = request.headers.get('Authorization').split("Bearer ")[1]
try:
# Verify the token against the Firebase Auth API.
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})
|