🐛 Fixed delete-user route

This commit is contained in:
Mawoka
2022-04-25 13:42:01 +02:00
parent d35cd9820d
commit ff6d57f2a2
2 changed files with 32 additions and 28 deletions
+14 -10
View File
@@ -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()
+18 -18
View File
@@ -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