Spaces:
Running
Running
| import firebase_admin | |
| from firebase_admin import credentials, auth | |
| from src.config import settings | |
| _firebase_app = None | |
| def get_firebase_app(): | |
| """Initialize or return existing Firebase Admin app.""" | |
| global _firebase_app | |
| if _firebase_app: | |
| return _firebase_app | |
| if _firebase_app: | |
| return _firebase_app | |
| try: | |
| # Priority 1: Check environment variable (for Cloud Deployment) | |
| import os | |
| import json | |
| env_creds = os.getenv("FIREBASE_CREDENTIALS_JSON") | |
| if env_creds: | |
| try: | |
| cred_dict = json.loads(env_creds) | |
| cred = credentials.Certificate(cred_dict) | |
| _firebase_app = firebase_admin.initialize_app(cred) | |
| print("[Firebase] Admin SDK initialized from environment variable") | |
| return _firebase_app | |
| except Exception as e: | |
| print(f"[Firebase] Failed to parse FIREBASE_CREDENTIALS_JSON: {e}") | |
| # Priority 2: Check file path | |
| cred_path = settings.firebase_service_account_path | |
| if not cred_path: | |
| print("[Firebase] No service account path configured.") | |
| return None | |
| if not os.path.exists(cred_path): | |
| print(f"[Firebase] Service account file not found at {cred_path}") | |
| return None | |
| cred = credentials.Certificate(cred_path) | |
| _firebase_app = firebase_admin.initialize_app(cred) | |
| print(f"[Firebase] Admin SDK initialized with {cred_path}") | |
| return _firebase_app | |
| except Exception as e: | |
| print(f"[Firebase] Failed to initialize Admin SDK: {e}") | |
| return None | |
| def delete_user_permanently(uid: str) -> bool: | |
| """ | |
| Permanently delete a user from Firebase Authentication. | |
| """ | |
| app = get_firebase_app() | |
| if not app: | |
| raise Exception("Firebase Admin SDK not initialized (missing serviceAccountKey.json?)") | |
| try: | |
| # Delete from Auth | |
| auth.delete_user(uid) | |
| print(f"[Firebase] Deleted user {uid} from Auth") | |
| # Delete from Firestore | |
| from firebase_admin import firestore | |
| db = firestore.client() | |
| db.collection('users').document(uid).delete() | |
| print(f"[Firebase] Deleted user {uid} from Firestore") | |
| return True | |
| except Exception as e: | |
| print(f"[Firebase] Error deleting user {uid}: {e}") | |
| raise e | |
| def verify_id_token(id_token: str): | |
| """Verify ID token and return decoded token.""" | |
| app = get_firebase_app() | |
| if not app: | |
| raise Exception("Firebase Admin SDK not initialized") | |
| return auth.verify_id_token(id_token) | |