from datetime import timedelta from typing import Annotated from fastapi import APIRouter, Depends, HTTPException from fastapi.security import OAuth2PasswordRequestForm from app.api.dependencies import SessionDep from app.core import security from app.core.config import settings from app.crud import user_crud from app.schemas.user_schemas import Token router = APIRouter(tags=["Login"]) @router.post("/login/access-token") def login_access_token( session: SessionDep, form_data: Annotated[OAuth2PasswordRequestForm, Depends()] ) -> Token: """ OAuth2 compatible token login, get an access token for future requests """ user = None user = user_crud.authenticate( session=session, email=form_data.username, password=form_data.password, shop_id=None ) if not user: raise HTTPException(status_code=400, detail="Incorrect email or password") elif not user: raise HTTPException(status_code=400, detail="Inactive user") access_token_expires = timedelta(minutes=settings.ACCESS_TOKEN_EXPIRE_MINUTES) return Token( access_token=security.create_access_token( user.id, expires_delta=access_token_expires ) )