api-mapper / routers /users_v1.py
tanbushi's picture
optimize auth
e66bcc7
from fastapi import APIRouter, Depends, HTTPException, status
from pydantic import BaseModel
import uuid
from global_state import get
from db.tbs_db import TbsDb
from auth import get_current_user
from db_model.user import UserModel
router = APIRouter()
db_module_filename = f"{get('project_root')}/db/cloudflare.py"
class User(BaseModel):
id: int = 0
username: str
password: str
email: str
nikename: str = None
is_admin: int = 0
@router.get("/users")
# async def read_users(current_user_id: int = Depends(get_current_user_id)):
# query = "SELECT * FROM users"
# response = TbsDb(db_module_filename, "Cloudflare").get_list(query)
# return response
async def read_user(current_user: UserModel = Depends(get_current_user)):
if current_user.is_admin == 0:
raise HTTPException(
status_code=status.HTTP_403_FORBIDDEN,
detail="Have no permission",
headers={"WWW-Authenticate": "Bearer"},
)
query = "SELECT * FROM users"
response = TbsDb(db_module_filename, "Cloudflare").get_list(query)
return response
@router.post("/users")
async def create_user(user: UserModel):
username = user.username
password = user.password
email = user.email
nikename = user.nikename
if nikename==None:
nikename = ''
api_key = f'airs-{uuid.uuid4()}'
query = f"INSERT INTO users (username, password, email, nikename, api_key) VALUES ('{username}', '{password}', '{email}', '{nikename}', '{api_key}')"
response = TbsDb(db_module_filename, "Cloudflare").add_item(query)
if response['success']==True:
response['api_key'] = api_key
return response
@router.get("/users/{id}")
async def read_user(id:int, current_user: UserModel = Depends(get_current_user)):
if (current_user.is_admin == 0) and (current_user.id != id):
raise HTTPException(
status_code=status.HTTP_403_FORBIDDEN,
detail="Have no permission",
headers={"WWW-Authenticate": "Bearer"},
)
query = f"SELECT * FROM users where id={id}"
response = TbsDb(db_module_filename, "Cloudflare").get_item(query)
return response