67 lines
1.8 KiB
Python
67 lines
1.8 KiB
Python
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)
|