from fastapi import ( FastAPI, Depends, HTTPException, status, Request, Response, APIRouter, ) from fastapi.security import OAuth2PasswordBearer, OAuth2PasswordRequestForm from jose import JWTError, jwt from fastapi.security import OAuth2PasswordBearer from sqlalchemy.orm import Session from typing import List from app import models from app import schemas from app import database from app import crud from app.utils import encrypt from app.utils import depes router = APIRouter() def get_db(request: Request): return request.state.db @router.post("/user/create/", response_model=schemas.User) async def create_user(user: schemas.UserCreate, db: Session = Depends(get_db)): db_user = crud.crud_user.get_user(db, username=user.username) if db_user: raise HTTPException( status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail="Username already registered", ) return crud.crud_user.create_user(db=db, user=user) @router.post("/auth/token", response_model=schemas.Token) async def create_token( form: OAuth2PasswordRequestForm = Depends(), db: Session = Depends(get_db) ): user = crud.crud_user.authenticate_user( db, username=form.username, password=form.password ) if not user: raise HTTPException( status_code=status.HTTP_401_UNAUTHORIZED, detail="Incorrect username or password", ) access_token = encrypt.create_token(data={"username": user.username}) return { "access_token": access_token, "token_type": "bearer", } @router.get("/user/", response_model=List[schemas.User]) def get_users(db: Session = Depends(get_db), token=Depends(depes.get_current_user)): return crud.crud_user.get_users(db)