Spaces:
Sleeping
Sleeping
Welcome Firewhale
Browse files- .gitignore +3 -1
- fireWhale.py +126 -0
- requirements.txt +0 -0
.gitignore
CHANGED
|
@@ -1,4 +1,6 @@
|
|
| 1 |
/venv/
|
| 2 |
/__pycache__/
|
| 3 |
stripe.exe
|
| 4 |
-
bridges.py
|
|
|
|
|
|
|
|
|
| 1 |
/venv/
|
| 2 |
/__pycache__/
|
| 3 |
stripe.exe
|
| 4 |
+
bridges.py
|
| 5 |
+
config.json
|
| 6 |
+
config.js
|
fireWhale.py
ADDED
|
@@ -0,0 +1,126 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import firebase_admin
|
| 2 |
+
from firebase_admin import credentials
|
| 3 |
+
from firebase_admin import firestore
|
| 4 |
+
import time
|
| 5 |
+
|
| 6 |
+
from firebase_admin import auth
|
| 7 |
+
|
| 8 |
+
# Use the application default credentials.
|
| 9 |
+
cred = credentials.Certificate('config.json')
|
| 10 |
+
firebase_admin.initialize_app(cred)
|
| 11 |
+
|
| 12 |
+
db = firestore.client()
|
| 13 |
+
|
| 14 |
+
def obtenDatosUIDFirebase(uid):
|
| 15 |
+
"""
|
| 16 |
+
Verifica si un UID existe en Firebase Authentication.
|
| 17 |
+
Esto con el fin de evitar que se cambié el id arbitrareamente desde localstorage.
|
| 18 |
+
|
| 19 |
+
Args:
|
| 20 |
+
uid (str): El User ID (UID) que se desea verificar.
|
| 21 |
+
|
| 22 |
+
Returns:
|
| 23 |
+
bool: True si el usuario con ese UID existe, False en caso contrario.
|
| 24 |
+
"""
|
| 25 |
+
try:
|
| 26 |
+
user = auth.get_user(uid) #Obtengo el objeto con todos los datos.
|
| 27 |
+
print("Ésto es el user obtenido de la comprobación: ", user)
|
| 28 |
+
email = user.email
|
| 29 |
+
displayName = user.display_name
|
| 30 |
+
|
| 31 |
+
# Si la operación es exitosa, el usuario existe
|
| 32 |
+
print(f"✔️ Usuario con UID '{uid}' encontrado en Firebase Auth: {user.email or 'sin email'}")
|
| 33 |
+
return email, displayName
|
| 34 |
+
except auth.UserNotFoundError:
|
| 35 |
+
# Esta excepción se lanza específicamente si el UID no existe
|
| 36 |
+
print(f"❌ Usuario con UID '{uid}' NO encontrado en Firebase Auth.")
|
| 37 |
+
return None, None
|
| 38 |
+
except Exception as e:
|
| 39 |
+
# Captura cualquier otro error (ej. problemas de conexión, permisos)
|
| 40 |
+
print(f"❌ Error al verificar usuario con UID '{uid}': {e}")
|
| 41 |
+
return None, None
|
| 42 |
+
|
| 43 |
+
def obtenDato(coleccion, dato, info):
|
| 44 |
+
|
| 45 |
+
print(f"Estoy dentro de obtenDato y los valores que recibí son: {coleccion}, {dato}, {info}...")
|
| 46 |
+
#Primero debemos definir la referencia al documento, o sea a la hoja de usuario.
|
| 47 |
+
doc_ref = db.collection(coleccion).document(dato)
|
| 48 |
+
|
| 49 |
+
#Éste es el documento que tiene los datos de ella.
|
| 50 |
+
documento = doc_ref.get()
|
| 51 |
+
print("Esto es el documento obtenido: ", documento)
|
| 52 |
+
|
| 53 |
+
#Quizá éste segmento que comenté era el que producia nuevos documentos sin deber.
|
| 54 |
+
if documento.exists:
|
| 55 |
+
print("El documento existe....")
|
| 56 |
+
#Recuerda la conversión a diccionario.
|
| 57 |
+
documento = doc_ref.get()
|
| 58 |
+
diccionario = documento.to_dict()
|
| 59 |
+
print("Esto es el diccionario: ", diccionario)
|
| 60 |
+
resultado = diccionario.get(info)
|
| 61 |
+
print("Éste es el resultado...", resultado)
|
| 62 |
+
return resultado
|
| 63 |
+
pass #El documento si existe.
|
| 64 |
+
else:
|
| 65 |
+
print("No existe el documento, es un nuevo usuario.")
|
| 66 |
+
return None
|
| 67 |
+
#No crees nada pero avisa que no existe.
|
| 68 |
+
#creaDato(coleccion, dato, 'tokens', 5) #porque agregará 5 tokens.
|
| 69 |
+
|
| 70 |
+
def editaDato(coleccion, dato, info, contenido):
|
| 71 |
+
|
| 72 |
+
#Primero debemos definir la referencia al documento, o sea a la hoja de usuario.
|
| 73 |
+
doc_ref = db.collection(coleccion).document(dato)
|
| 74 |
+
|
| 75 |
+
doc_ref.update({
|
| 76 |
+
# 'quote': quote,
|
| 77 |
+
info: contenido,
|
| 78 |
+
})
|
| 79 |
+
|
| 80 |
+
def creaDato(coleccion, dato, info, contenido):
|
| 81 |
+
|
| 82 |
+
#Primero debemos definir la referencia al documento, o sea a la hoja de usuario.
|
| 83 |
+
doc_ref = db.collection(coleccion).document(dato)
|
| 84 |
+
|
| 85 |
+
doc_ref.set({
|
| 86 |
+
# 'quote': quote,
|
| 87 |
+
info: contenido,
|
| 88 |
+
})
|
| 89 |
+
|
| 90 |
+
def creaDatoMultiple(coleccion, dato, data_dict):
|
| 91 |
+
"""
|
| 92 |
+
Crea un nuevo documento o sobrescribe uno existente en Firestore
|
| 93 |
+
con múltiples pares de campo-contenido.
|
| 94 |
+
|
| 95 |
+
Args:
|
| 96 |
+
coleccion (str): El nombre de la colección donde se creará/actualizará el documento.
|
| 97 |
+
dato (str): El ID del documento que se va a crear o sobrescribir.
|
| 98 |
+
data_dict (dict): Un diccionario donde las claves son los nombres de los campos
|
| 99 |
+
y los valores son el contenido de esos campos.
|
| 100 |
+
Ej: {'nombre': 'Juan', 'edad': 30, 'activo': True}
|
| 101 |
+
"""
|
| 102 |
+
# Primero definimos la referencia al documento
|
| 103 |
+
doc_ref = db.collection(coleccion).document(dato)
|
| 104 |
+
|
| 105 |
+
try:
|
| 106 |
+
# Usamos .set() y le pasamos el diccionario completo.
|
| 107 |
+
# Esto sobrescribirá el documento si ya existe con los nuevos datos.
|
| 108 |
+
doc_ref.set(data_dict)
|
| 109 |
+
|
| 110 |
+
print(f"✔️ Documento '{dato}' creado/sobrescrito en la colección '{coleccion}' con los siguientes datos:")
|
| 111 |
+
for key, value in data_dict.items():
|
| 112 |
+
print(f" - {key}: {value}")
|
| 113 |
+
|
| 114 |
+
except Exception as e:
|
| 115 |
+
print(f"❌ Error al crear/sobrescribir documento '{dato}' en '{coleccion}': {e}")
|
| 116 |
+
|
| 117 |
+
def verificar_token(id_token):
|
| 118 |
+
"""Verifica el token de ID de Firebase."""
|
| 119 |
+
try:
|
| 120 |
+
# Verifica el token y decodifica la información del usuario
|
| 121 |
+
decoded_token = auth.verify_id_token(id_token)
|
| 122 |
+
uid = decoded_token['uid']
|
| 123 |
+
return uid # Retorna el UID del usuario si el token es válido
|
| 124 |
+
except auth.InvalidIdTokenError as e:
|
| 125 |
+
print(f"Token inválido: {e}")
|
| 126 |
+
return None # Retorna None si el token es inválido
|
requirements.txt
CHANGED
|
Binary files a/requirements.txt and b/requirements.txt differ
|
|
|