Download backend/firebase_auth.py from noodledom/focusflow: direct link, hf CLI and curl.
- Browser
- Download file 2.06 kB
-
https://huggingface.co/spaces/noodledom/focusflow/resolve/main/backend/firebase_auth.py
- Command line
-
hf download hf://spaces/noodledom/focusflow/backend/firebase_auth.py
-
curl -L -o firebase_auth.py https://huggingface.co/spaces/noodledom/focusflow/resolve/main/backend/firebase_auth.py
2.06 kB
| """ | |
| Firebase Auth module for FocusFlow. | |
| Handles Firebase Admin SDK initialization and ID token verification. | |
| In local mode (no credentials), authentication is skipped entirely. | |
| """ | |
| import json | |
| import logging | |
| from fastapi import HTTPException | |
| logger = logging.getLogger(__name__) | |
| # ---------- Firebase Admin SDK Initialization ---------- | |
| _firebase_app = None | |
| def _init_firebase(): | |
| """Initialize Firebase Admin SDK from environment variable (called once).""" | |
| global _firebase_app | |
| from backend.config import FIREBASE_SERVICE_ACCOUNT_JSON | |
| if not FIREBASE_SERVICE_ACCOUNT_JSON: | |
| logger.warning( | |
| "FIREBASE_SERVICE_ACCOUNT_JSON not set — Firebase auth disabled (local mode)." | |
| ) | |
| return | |
| try: | |
| import firebase_admin | |
| from firebase_admin import credentials | |
| cred_dict = json.loads(FIREBASE_SERVICE_ACCOUNT_JSON) | |
| cred = credentials.Certificate(cred_dict) | |
| _firebase_app = firebase_admin.initialize_app(cred) | |
| logger.info("✅ Firebase Admin SDK initialized successfully.") | |
| except Exception as e: | |
| logger.error(f"❌ Failed to initialize Firebase Admin SDK: {e}") | |
| # Don't raise — allow app to start without Firebase auth | |
| # Run initialization at module load time | |
| _init_firebase() | |
| # ---------- Token Verification ---------- | |
| def verify_firebase_token(id_token: str) -> dict: | |
| """ | |
| Verify a Firebase ID token and return decoded claims. | |
| Returns dict with at least: uid, email, name (if available). | |
| Raises HTTPException 401 on any failure. | |
| """ | |
| try: | |
| from firebase_admin import auth | |
| decoded = auth.verify_id_token(id_token) | |
| return { | |
| "uid": decoded["uid"], | |
| "email": decoded.get("email", ""), | |
| "name": decoded.get("name", ""), | |
| } | |
| except Exception as e: | |
| logger.warning(f"Firebase token verification failed: {e}") | |
| raise HTTPException( | |
| status_code=401, | |
| detail=f"Invalid or expired authentication token: {e}", | |
| ) | |