from datetime import timedelta from fastapi import APIRouter, Depends, HTTPException, status from fastapi.security import OAuth2PasswordRequestForm from sqlalchemy.orm import Session from app.api.deps import get_db from app.core.config import settings from app.core.security import create_access_token from app.crud.crud_user import user as crud_user from app.schemas.ppr import Token router = APIRouter() @router.post("/login", response_model=Token) async def login_for_access_token( db: Session = Depends(get_db), form_data: OAuth2PasswordRequestForm = Depends() ): """OAuth2 compatible token login, get an access token for future requests""" user = crud_user.authenticate( db, username=form_data.username, password=form_data.password ) if not user: raise HTTPException( status_code=status.HTTP_401_UNAUTHORIZED, detail="Incorrect username or password", headers={"WWW-Authenticate": "Bearer"}, ) access_token_expires = timedelta(minutes=settings.access_token_expire_minutes) access_token = create_access_token( subject=user.username, expires_delta=access_token_expires ) return {"access_token": access_token, "token_type": "bearer"} @router.post("/test-token") async def test_token(current_user = Depends(get_db)): """Test access token""" return current_user