File size: 2,673 Bytes
4f8c5b9
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
a78ed19
4f8c5b9
 
a78ed19
 
 
 
 
 
 
4f8c5b9
 
 
 
 
 
 
 
 
 
 
 
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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
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)