This commit is contained in:
2022-08-04 14:48:50 +07:00
parent f541dd9956
commit aedf97441a
14 changed files with 422 additions and 120 deletions

View File

@@ -13,8 +13,10 @@ from fastapi import File, UploadFile, FastAPI
from ..models.models import (
UserModel,
ShowUserModel,
UpdateUserModel
UpdateUserModel,
token_test
)
from ..models.post import *
from ..dependecies import (
get_current_user,
authenticate_user,
@@ -132,40 +134,30 @@ async def login_for_access_token(body: LoginRequest):
@router.post("/token")
async def login_for_access_token_2(body: OAuth2PasswordRequestForm = Depends()):
user = await authenticate_user_oauth2(body.username, body.password)
print(body)
if not user:
raise HTTPException(
status_code=status.HTTP_401_UNAUTHORIZED,
detail="Incorect ID or password",
headers={"WWW-Authenticate": "Bearer"},
)
# access_token_expires = timedelta(minutes=ACCESS_TOKEN_EXPIRE_MINUTES)
# access_token = create_access_token(
# data={"sub": user["username"]}, expires_delta=access_token_expires
# )
# await db["users"].update_one({"username": body.username}, {"$set": {
# "last_login": datetime.now().strftime("%m/%d/%y %H:%M:%S"),
# "is_active": "true"
# }})
return {"access_token": user["access_token"], "token_type": "bearer"}
@router.get(
"/list", response_description="List all users", response_model=List[ShowUserModel]
)
async def list_users():
users = await db["users"].find().to_list(1000)
for user in users:
user["is_active"] = "false"
try:
last_login = datetime.strptime(
user["last_login"], "%m/%d/%y %H:%M:%S")
my_delta = datetime.now() - last_login
if my_delta <= timedelta(days=30):
user["is_active"] = "true"
except ValueError:
pass
# @router.get(
# "/list", response_description="List all users", response_model=List[ShowUserModel]
# )
# async def list_users():
# users = await db["users"].find().to_list(1000)
# for user in users:
# user["is_active"] = "false"
# try:
# last_login = datetime.strptime(
# user["last_login"], "%m/%d/%y %H:%M:%S")
# my_delta = datetime.now() - last_login
# if my_delta <= timedelta(days=30):
# user["is_active"] = "true"
# except ValueError:
# pass
@router.post("/current", response_description="Current User")
@@ -210,30 +202,39 @@ async def refresh_token(refresh_token: TokenModel):
return json.loads(response.text)
@router.put("/admin/{user_id}", response_description="Update a user", response_model=UpdateUserModel)
async def update_user(user_id: str, user: UpdateUserModel):
if current_user["role"] == "admin":
user = {k: v for k, v in user.dict().items() if v is not None}
if len(user) >= 1:
update_result = await db["users"].update_one({"_id": user_id}, {"$set": user})
if update_result.modified_count == 1:
if (
updated_user := await db["users"].find_one({"_id": user_id})
) is not None:
return updated_user
if (existing_user := await db["users"].find_one({"_id": user_id})) is not None:
return existing_user
raise HTTPException(
status_code=404, detail=f"User {user_id} not found")
else:
raise HTTPException(
status_code=403, detail=f"Not having sufficient rights to modify the content")
# @router.put("/admin/{user_id}", response_description="Update a user", response_model=UpdateUserModel)
# async def update_user(user_id: str, user: UpdateUserModel):
# if current_user["role"] == "admin":
# user = {k: v for k, v in user.dict().items() if v is not None}
# if len(user) >= 1:
# update_result = await db["users"].update_one({"_id": user_id}, {"$set": user})
# if update_result.modified_count == 1:
# if (
# updated_user := await db["users"].find_one({"_id": user_id})
# ) is not None:
# return updated_user
# if (existing_user := await db["users"].find_one({"_id": user_id})) is not None:
# return existing_user
# raise HTTPException(
# status_code=404, detail=f"User {user_id} not found")
# else:
# raise HTTPException(
# status_code=403, detail=f"Not having sufficient rights to modify the content")
@router.delete("/delete_user/{user_id}", response_description="Delete a user")
async def delete_user(user_id: str):
delete_result = await db["users"].delete_one({"_id": user_id})
if delete_result.deleted_count == 1:
return JSONResponse(status_code=status.HTTP_204_NO_CONTENT)
# @router.delete("/delete_user/{user_id}", response_description="Delete a user")
# async def delete_user(user_id: str):
# delete_result = await db["users"].delete_one({"_id": user_id})
# if delete_result.deleted_count == 1:
# return JSONResponse(status_code=status.HTTP_204_NO_CONTENT)
raise HTTPException(status_code=404, detail=f"User {user_id} not found")
# raise HTTPException(status_code=404, detail=f"User {user_id} not found")
# @router.get(
# "/list1111", response_description="List all users", response_model=List[UpdatePostModel]
# )
# async def list_users(token: token_test = Depends(get_current_user)):
# print(token)
# users = await db["posts"].find().to_list(1000)
# return users