import secrets from passlib.context import CryptContext from fastapi import Depends, HTTPException, status from fastapi.security import HTTPAuthorizationCredentials, HTTPBearer from api.database.mongodb import users_collection from bson import ObjectId import os import jwt SECRET_KEY = os.getenv("SECRET_KEY") pwd_context = CryptContext(schemes=["bcrypt"], deprecated="auto") def hash_password(password: str) -> str: return pwd_context.hash(password) def verify_password(plain_password: str, hashed_password: str) -> bool: return pwd_context.verify(plain_password, hashed_password) def generate_token() -> str: return secrets.token_hex(32) security_scheme = HTTPBearer() async def get_current_user( credentials: HTTPAuthorizationCredentials = Depends(security_scheme), ): token = credentials.credentials user = await users_collection.find_one({"token": token}) if not user: raise HTTPException( status_code=status.HTTP_401_UNAUTHORIZED, detail="Token inválido o usuario no autenticado", ) user["id"] = str(user["_id"]) return user def create_access_token(data: dict): return jwt.encode(data, SECRET_KEY, algorithm="HS256")