from passlib.context import CryptContext from datetime import datetime, timedelta import jwt from ..config import settings from ..db.mongodb import mongodb from ..models.user import UserInDB pwd_context = CryptContext(schemes=["bcrypt"], deprecated="auto") def verify_password(plain, hashed): return pwd_context.verify(plain, hashed) def get_password_hash(password): return pwd_context.hash(password) def create_access_token(data: dict): to_encode = data.copy() expire = datetime.utcnow() + timedelta(minutes=settings.ACCESS_TOKEN_EXPIRE_MINUTES) to_encode.update({"exp": expire}) return jwt.encode(to_encode, settings.SECRET_KEY, algorithm=settings.ALGORITHM) def get_user(username: str): user = mongodb.users.find_one({"username": username}) return UserInDB(**user) if user else None def authenticate_user(username: str, password: str): user = get_user(username) if not user or not verify_password(password, user.hashed_password): return None return user