from datetime import timedelta from typing import Any from fastapi import APIRouter, Depends, HTTPException, status from sqlalchemy.orm import Session from app.core import security from app.core.config import settings from app.crud import user as user_crud from app.db.session import get_db from app.schemas.user import UserLogin router = APIRouter() @router.post("/login") def login_access_token( db: Session = Depends(get_db), form_data: UserLogin = None ) -> Any: user = user_crud.authenticate( db, email=form_data.email, password=form_data.password ) if not user: raise HTTPException( status_code=status.HTTP_401_UNAUTHORIZED, detail="Incorrect email or password", ) elif not user_crud.is_active(user): raise HTTPException( status_code=status.HTTP_401_UNAUTHORIZED, detail="Inactive user" ) access_token_expires = timedelta(minutes=settings.ACCESS_TOKEN_EXPIRE_MINUTES) return { "access_token": security.create_access_token( user.email, expires_delta=access_token_expires ), "token_type": "bearer", }