Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ services:
backend:latest
environment:
- OPENAI_API_KEY=${OPENAI_API_KEY}
- GOOGLE_CLOUD_PROJECT=truevoice-ff4da
postgres:
container_name: postgres
image: postgres
Expand Down
3 changes: 2 additions & 1 deletion requirements.txt
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
fastapi[standard]
psycopg2
scikit-learn
openai
openai
firebase_admin
24 changes: 24 additions & 0 deletions src/handlers/firebase_api_validation_middleware.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
from fastapi import FastAPI, Request, HTTPException
from fastapi.responses import PlainTextResponse
from starlette.middleware.base import BaseHTTPMiddleware
from firebase_admin import app_check
import jwt

class FirebaseValidationMiddleware(BaseHTTPMiddleware):
async def dispatch(self, request: Request, call_next):
app_check_token = request.headers.get("X-Firebase-AppCheck")

try:
if not app_check_token:
raise ValueError("X-Firebase-AppCheck token is missing")

app_check_claims = app_check.verify_token(app_check_token)

except (ValueError, jwt.exceptions.DecodeError) as ex:
print(str(ex))
return PlainTextResponse(status_code=401, content="Firebase validation failed.")

response = await call_next(request)
return response


8 changes: 8 additions & 0 deletions src/main.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
from typing import List
from fastapi.middleware.cors import CORSMiddleware
import firebase_admin
from typing import Union
from fastapi import FastAPI, Header, Request
from src.ai.tv_ai_api import Comment
from src.handlers.firebase_api_validation_middleware import FirebaseValidationMiddleware
from src.handlers.response_models import ActivityTopicResponse, CommentResponse, TopicResponse
from src.handlers.comment_handler import approve_comment_handler, create_comment_handler, get_pending_comments_handler, reject_comment_handler
from src.handlers.request_models import CommentRequest, SessionIdsActivityRequest, SessionIdsTopicsRequest, TopicRequest, VoteRequest
Expand All @@ -12,6 +14,8 @@
app = FastAPI()


firebase_app = firebase_admin.initialize_app()

# Specify allowed origins
origins = [
"http://localhost", # Allow requests from localhost
Expand All @@ -30,6 +34,10 @@
allow_headers=["*"], # Allow all headers
)

app.add_middleware(
FirebaseValidationMiddleware
)

@app.post("/topic")
def create_topic(request: TopicRequest, authorization: Union[str, None] = Header(default=None)) -> TopicResponse:
return create_topic_handler(request, authorization)
Expand Down