Skip to content

Commit 6d7cb43

Browse files
committed
Add UserDeleteView
1 parent 31405a1 commit 6d7cb43

File tree

2 files changed

+51
-0
lines changed

2 files changed

+51
-0
lines changed
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
from django.contrib.auth import get_user_model
2+
from rest_framework import serializers
3+
from rest_framework.exceptions import PermissionDenied, ValidationError
4+
from rest_framework.response import Response
5+
from rest_framework.views import APIView
6+
7+
from thunderstore.api.utils import conditional_swagger_auto_schema
8+
from thunderstore.social.views import DeleteAccountForm
9+
10+
User = get_user_model()
11+
12+
13+
class CyberstormUserDeleteRequestSerialiazer(serializers.Serializer):
14+
verification = serializers.CharField()
15+
16+
17+
class CyberstormUserDeleteResponseSerialiazer(serializers.Serializer):
18+
username = serializers.CharField()
19+
20+
21+
class UserDeleteAPIView(APIView):
22+
@conditional_swagger_auto_schema(
23+
request_body=CyberstormUserDeleteRequestSerialiazer,
24+
responses={200: CyberstormUserDeleteResponseSerialiazer},
25+
operation_id="cyberstorm.user.delete",
26+
tags=["cyberstorm"],
27+
)
28+
def post(self, request, username, format=None):
29+
serializer = CyberstormUserDeleteRequestSerialiazer(data=request.data)
30+
serializer.is_valid(raise_exception=True)
31+
if request.user.username != username:
32+
raise PermissionDenied("You can only delete your own account")
33+
form = DeleteAccountForm(
34+
user=request.user,
35+
data=request.data,
36+
)
37+
if form.is_valid():
38+
request.user.delete()
39+
return Response(
40+
CyberstormUserDeleteResponseSerialiazer(
41+
{"username": request.user.username}
42+
).data
43+
)
44+
else:
45+
raise ValidationError(form.errors)

django/thunderstore/api/urls.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
TeamMembersAPIView,
1212
TeamServiceAccountsAPIView,
1313
)
14+
from thunderstore.api.cyberstorm.views.user import UserDeleteAPIView
1415

1516
cyberstorm_urls = [
1617
path(
@@ -58,4 +59,9 @@
5859
TeamServiceAccountsAPIView.as_view(),
5960
name="cyberstorm.team.service-accounts",
6061
),
62+
path(
63+
"user/<str:username>/delete/",
64+
UserDeleteAPIView.as_view(),
65+
name="cyberstorm.user.delete",
66+
),
6167
]

0 commit comments

Comments
 (0)