Added delete-user route

This commit is contained in:
Mawoka
2022-04-18 16:13:51 +02:00
parent 31094c9a24
commit 0b85aa9275
5 changed files with 33 additions and 12 deletions
+16 -8
View File
@@ -15,7 +15,7 @@ from classquiz.auth import (
get_current_user,
)
from classquiz.cache import clear_cache_for_account
from classquiz.config import redis, settings
from classquiz.config import redis, settings, meilisearch
import uuid
import bleach
from pydantic import BaseModel
@@ -64,9 +64,9 @@ async def create_user(user: route_user, background_task: BackgroundTasks) -> Use
@router.post("/token/cookie", response_model=Token)
async def login_for_cookie_access_token(
request: Request,
response: Response,
form_data: OAuth2PasswordRequestForm = Depends(),
request: Request,
response: Response,
form_data: OAuth2PasswordRequestForm = Depends(),
):
user = await authenticate_user(form_data.username, form_data.password)
if not user:
@@ -168,9 +168,9 @@ async def verify_user(verify_key: str):
@router.put("/password/update")
async def change_password(
password_data: UpdatePassword,
response: Response,
user: User = Depends(get_current_user),
password_data: UpdatePassword,
response: Response,
user: User = Depends(get_current_user),
):
if not verify_password(password_data.old_password, user.password):
raise HTTPException(status_code=400, detail="Incorrect password")
@@ -268,6 +268,14 @@ class DeleteUserInput(BaseModel):
async def delete_user_account(input_data: DeleteUserInput, user: User = Depends(get_current_user)):
if not verify_password(input_data.password, user.password):
raise HTTPException(status_code=400, detail="Incorrect password")
user = await User.objects.filter(id=user.id).get_or_none()
await UserSession.objects.filter(user=user).delete()
await Quiz.objects.filter(user=user).delete()
quizzes = await Quiz.objects.filter(user_id=user).all()
quizzes_to_delete = []
for quiz in quizzes:
if quiz.is_public:
quizzes_to_delete.append(quiz.id)
if len(quizzes_to_delete) > 0:
meilisearch.index(settings.meilisearch_index).delete_documents(quizzes_to_delete)
await User.objects.filter(id=user.id).delete()
await user.delete()