import os from dotenv import load_dotenv import firebase_admin from firebase_admin import credentials, auth as firebase_auth from pymongo import MongoClient from bson.binary import Binary import json load_dotenv() # cred_path = os.getenv("FIREBASE_ADMIN_KEY") # if not cred_path: # raise ValueError("FIREBASE_ADMIN_KEY chưa được khai báo trong .env hoặc đường dẫn bị sai!") # if not firebase_admin._apps: # cred = credentials.Certificate(cred_path) # firebase_admin.initialize_app(cred) firebase_admin_json = os.getenv("FIREBASE_ADMIN_JSON") if firebase_admin_json: import tempfile service_account_path = os.path.join(tempfile.gettempdir(), "serviceAccountKey.json") with open(service_account_path, "w") as f: f.write(firebase_admin_json) cred_path = service_account_path else: cred_path = os.getenv("FIREBASE_ADMIN_KEY") if not cred_path: raise ValueError("FIREBASE_ADMIN_KEY chưa được khai báo trong .env hoặc đường dẫn bị sai!") if not firebase_admin._apps: cred = credentials.Certificate(cred_path) firebase_admin.initialize_app(cred) mongo_uri = os.getenv("MONGO_URI") mongo_dbname = os.getenv("MONGO_DBNAME") def get_mongo_collection(): client = MongoClient(mongo_uri) db = client[mongo_dbname] return db["users"] def verify_firebase_token(id_token): try: decoded = firebase_auth.verify_id_token(id_token) return decoded except Exception as e: print("Token verify fail:", e) return None def register_user_to_mongo(uid, email, user_name): users = get_mongo_collection() if not users.find_one({"uid": uid}): print("Registering new user:", uid, email, user_name) users.insert_one({"uid": uid, "email": email, "user_name": user_name}) return True def save_avatar(uid, file_bytes): users = get_mongo_collection() users.update_one( {"uid": uid}, {"$set": {"avatar_blob": Binary(file_bytes)}}, upsert=True ) def get_avatar_blob(uid): users = get_mongo_collection() user = users.find_one({"uid": uid}, {"avatar_blob": 1}) return user.get("avatar_blob") if user and "avatar_blob" in user else None def get_user_profile(uid): users = get_mongo_collection() return users.find_one({"uid": uid}) def update_username_in_mongo(uid, new_username): users = get_mongo_collection() users.update_one({"uid": uid}, {"$set": {"user_name": new_username}})