🐛 Fixed delete-user route
This commit is contained in:
+14
-10
@@ -1,5 +1,6 @@
|
||||
import os
|
||||
|
||||
import ormar
|
||||
from email_validator import validate_email, EmailNotValidError
|
||||
from fastapi import APIRouter, Response, HTTPException, Request, Depends, status
|
||||
from datetime import timedelta, datetime
|
||||
@@ -114,11 +115,11 @@ async def login_for_cookie_access_token(
|
||||
|
||||
@router.get("/token/rememberme")
|
||||
async def rememberme_token(request: Request, response: Response):
|
||||
rememberme_cookie = request.cookies.get("rememberme_token")
|
||||
if rememberme_cookie is None:
|
||||
rememberme_token = request.cookies.get("rememberme_token")
|
||||
if rememberme_token is None:
|
||||
raise HTTPException(status_code=400, detail="No rememberme cookie")
|
||||
user_session: UserSession | None = (
|
||||
await UserSession.objects.filter(session_key=rememberme_cookie).select_related(UserSession.user).get_or_none()
|
||||
await UserSession.objects.filter(session_key=rememberme_token).select_related(UserSession.user).get_or_none()
|
||||
)
|
||||
if (user_session is None) or (user_session.user is None):
|
||||
raise HTTPException(status_code=401, detail="No user session")
|
||||
@@ -256,12 +257,14 @@ async def delete_session(session_id: str, user: User = Depends(get_current_user)
|
||||
@router.get(
|
||||
"/session", response_model=UserSession, response_model_exclude={"user": ..., "session_key": ..., "quizs": ...}
|
||||
)
|
||||
async def get_session(user: User = Depends(get_current_user)):
|
||||
session = await UserSession.objects.filter(user=user).get_or_none()
|
||||
if session is None:
|
||||
raise HTTPException(status_code=404, detail="Session not found")
|
||||
else:
|
||||
async def get_session(request: Request, user: User = Depends(get_current_user)):
|
||||
try:
|
||||
session = await UserSession.objects.filter(
|
||||
user=user, session_key=request.cookies.get("rememberme_token")
|
||||
).first()
|
||||
return session
|
||||
except ormar.NoMatch:
|
||||
raise HTTPException(status_code=404, detail="Session not found")
|
||||
|
||||
|
||||
class DeleteUserInput(BaseModel):
|
||||
@@ -277,9 +280,10 @@ async def delete_user_account(input_data: DeleteUserInput, user: User = Depends(
|
||||
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 quiz.public:
|
||||
quizzes_to_delete.append(str(quiz.id))
|
||||
if len(quizzes_to_delete) > 0:
|
||||
meilisearch.index(settings.meilisearch_index).delete_documents(quizzes_to_delete)
|
||||
await Quiz.objects.filter(user_id=user).delete()
|
||||
await User.objects.filter(id=user.id).delete()
|
||||
await user.delete()
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
import json
|
||||
import uuid
|
||||
|
||||
import pytest
|
||||
@@ -82,8 +83,8 @@ class TestUsers:
|
||||
resp = test_client.post(
|
||||
"/api/v1/users/token/cookie", data={"username": test_user_email, "password": test_user_password}
|
||||
)
|
||||
rememberme_cookie = resp.cookies["rememberme_token"]
|
||||
resp = test_client.get("/api/v1/users/token/rememberme", cookies={"rememberme_token": rememberme_cookie})
|
||||
rememberme_token = resp.cookies["rememberme_token"]
|
||||
resp = test_client.get("/api/v1/users/token/rememberme", cookies={"rememberme_token": rememberme_token})
|
||||
assert resp.cookies["access_token"] is not None
|
||||
assert resp.status_code == 200
|
||||
resp = test_client.get(
|
||||
@@ -96,15 +97,15 @@ class TestUsers:
|
||||
resp = test_client.post(
|
||||
"/api/v1/users/token/cookie", data={"username": test_user_email, "password": test_user_password}
|
||||
)
|
||||
rememberme_cookie = resp.cookies["rememberme_token"]
|
||||
rememberme_token = resp.cookies["rememberme_token"]
|
||||
access_token = resp.cookies["access_token"]
|
||||
resp = test_client.get("/api/v1/users/me", cookies={"access_token": access_token})
|
||||
assert resp.status_code == 200
|
||||
resp = test_client.get(
|
||||
"/api/v1/users/logout", cookies={"rememberme_cookie": rememberme_cookie}, allow_redirects=False
|
||||
"/api/v1/users/logout", cookies={"rememberme_token": rememberme_token}, allow_redirects=False
|
||||
)
|
||||
assert resp.status_code == 302
|
||||
resp = test_client.get("/api/v1/users/me", cookies={"rememberme_cookie": rememberme_cookie})
|
||||
resp = test_client.get("/api/v1/users/me", cookies={"rememberme_token": rememberme_token})
|
||||
assert resp.status_code == 401
|
||||
|
||||
@pytest.mark.asyncio
|
||||
@@ -138,8 +139,8 @@ class TestUsers:
|
||||
resp1 = test_client.post(
|
||||
"/api/v1/users/token/cookie", data={"username": test_user_email, "password": test_user_password}
|
||||
)
|
||||
rememberme_cookie = resp1.cookies["rememberme_token"]
|
||||
response = test_client.get("/api/v1/users/me", cookies={"rememberme_cookie": rememberme_cookie})
|
||||
rememberme_token = resp1.cookies["rememberme_token"]
|
||||
response = test_client.get("/api/v1/users/me", cookies={"rememberme_token": rememberme_token})
|
||||
assert response.status_code == 200
|
||||
|
||||
@pytest.mark.asyncio
|
||||
@@ -147,8 +148,8 @@ class TestUsers:
|
||||
resp = test_client.post(
|
||||
"/api/v1/users/token/cookie", data={"username": test_user_email, "password": test_user_password}
|
||||
)
|
||||
token = resp.cookies["access_token"]
|
||||
resp = test_client.get("/api/v1/users/session", cookies={"access_token": token})
|
||||
token = resp.cookies["rememberme_token"]
|
||||
resp = test_client.get("/api/v1/users/session", cookies={"rememberme_token": token})
|
||||
assert resp.status_code == 200
|
||||
assert resp.json()["ip_address"] == "testclient"
|
||||
|
||||
@@ -157,12 +158,12 @@ class TestUsers:
|
||||
resp = test_client.post(
|
||||
"/api/v1/users/token/cookie", data={"username": test_user_email, "password": test_user_password}
|
||||
)
|
||||
token = resp.cookies["access_token"]
|
||||
resp = test_client.get("/api/v1/users/session", cookies={"access_token": token})
|
||||
token = resp.cookies["rememberme_token"]
|
||||
resp = test_client.get("/api/v1/users/session", cookies={"rememberme_token": token})
|
||||
session_id = resp.json()["id"]
|
||||
resp = test_client.delete("/api/v1/users/sessions/" + str(session_id), cookies={"access_token": token})
|
||||
resp = test_client.delete("/api/v1/users/sessions/" + str(session_id), cookies={"rememberme_token": token})
|
||||
assert resp.status_code == 200
|
||||
resp = test_client.delete("/api/v1/users/sessions/asdsadasdasdsad", cookies={"access_token": token})
|
||||
resp = test_client.delete("/api/v1/users/sessions/asdsadasdasdsad", cookies={"rememberme_token": token})
|
||||
assert resp.status_code == 400
|
||||
|
||||
@pytest.mark.asyncio
|
||||
@@ -170,8 +171,8 @@ class TestUsers:
|
||||
resp = test_client.post(
|
||||
"/api/v1/users/token/cookie", data={"username": test_user_email, "password": test_user_password}
|
||||
)
|
||||
token = resp.cookies["access_token"]
|
||||
resp = test_client.get("/api/v1/users/sessions/list", cookies={"access_token": token})
|
||||
token = resp.cookies["rememberme_token"]
|
||||
resp = test_client.get("/api/v1/users/sessions/list", cookies={"rememberme_token": token})
|
||||
assert resp.status_code == 200
|
||||
assert len(resp.json()) >= 1
|
||||
|
||||
@@ -368,7 +369,6 @@ class TestDeleteUser:
|
||||
"/api/v1/users/token/cookie", data={"username": test_user_email, "password": test_user_password}
|
||||
)
|
||||
token = resp.cookies["access_token"]
|
||||
resp = test_client.delete(
|
||||
"/api/v1/users/me", cookies={"access_token": token}, json={"password": test_user_password}
|
||||
)
|
||||
data = {"password": test_user_password}
|
||||
resp = test_client.delete("/api/v1/users/me", cookies={"access_token": token}, json=data)
|
||||
assert resp.status_code == 200
|
||||
|
||||
Reference in New Issue
Block a user