File size: 2,667 Bytes
c43db9b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4b022cd
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
82
83
84
85
86
import requests
import os
from dotenv import load_dotenv

load_dotenv()

FIREBASE_WEB_API_KEY = os.getenv("FIREBASE_WEB_API_KEY")

def sign_in_with_email(email, password):
    """
    Signs in a user using Firebase Auth REST API.
    Returns (id_token, local_id, email, error_message)
    """
    if not FIREBASE_WEB_API_KEY:
        return None, None, None, "FIREBASE_WEB_API_KEY is not set in .env"

    url = f"https://identitytoolkit.googleapis.com/v1/accounts:signInWithPassword?key={FIREBASE_WEB_API_KEY}"
    payload = {
        "email": email,
        "password": password,
        "returnSecureToken": True
    }
    
    try:
        response = requests.post(url, json=payload)
        data = response.json()
        
        if response.status_code == 200:
            return data["idToken"], data["localId"], data["email"], None
        else:
            error_msg = data.get("error", {}).get("message", "Unknown error")
            return None, None, None, error_msg
    except Exception as e:
        return None, None, None, str(e)

def sign_up_with_email(email, password):
    """
    Registers a new user using Firebase Auth REST API.
    """
    if not FIREBASE_WEB_API_KEY:
        return None, None, None, "FIREBASE_WEB_API_KEY is not set in .env"

    url = f"https://identitytoolkit.googleapis.com/v1/accounts:signUp?key={FIREBASE_WEB_API_KEY}"
    payload = {
        "email": email,
        "password": password,
        "returnSecureToken": True
    }
    
    try:
        response = requests.post(url, json=payload)
        data = response.json()
        
        if response.status_code == 200:
            return data["idToken"], data["localId"], data["email"], None
        else:
            error_msg = data.get("error", {}).get("message", "Unknown error")
            return None, None, None, error_msg
    except Exception as e:
        return None, None, None, str(e)

def send_password_reset_email(email):
    """
    Sends a password reset email using Firebase Auth REST API.
    """
    if not FIREBASE_WEB_API_KEY:
        return False, "FIREBASE_WEB_API_KEY is not set in .env"

    url = f"https://identitytoolkit.googleapis.com/v1/accounts:sendOobCode?key={FIREBASE_WEB_API_KEY}"
    payload = {
        "requestType": "PASSWORD_RESET",
        "email": email
    }
    
    try:
        response = requests.post(url, json=payload)
        data = response.json()
        
        if response.status_code == 200:
            return True, None
        else:
            error_msg = data.get("error", {}).get("message", "Unknown error")
            return False, error_msg
    except Exception as e:
        return False, str(e)