Files
wncloud/app/api/user.py
T
2023-09-02 17:24:47 +08:00

68 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)