from typing import Annotated from datetime import timedelta from fastapi import APIRouter, HTTPException, Depends from fastapi.security import OAuth2PasswordRequestForm from app.api.dependencies import SessionDep from app.core import security from app.core.config import settings from app.schemas.user_schemas import Token from app.crud import user_crud 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 ) )