Skip to content

Commit c81572c

Browse files
committed
Add UserDeleteView
1 parent c2427d6 commit c81572c

File tree

3 files changed

+50
-1
lines changed

3 files changed

+50
-1
lines changed
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
from django.http import HttpRequest
2+
from rest_framework import serializers
3+
from rest_framework.exceptions import ValidationError
4+
from rest_framework.permissions import IsAuthenticated
5+
from rest_framework.response import Response
6+
from rest_framework.views import APIView
7+
8+
from thunderstore.api.utils import conditional_swagger_auto_schema
9+
from thunderstore.social.views import DeleteAccountForm
10+
11+
12+
class CyberstormUserDeleteRequestSerialiazer(serializers.Serializer):
13+
verification = serializers.CharField()
14+
15+
16+
class CyberstormUserDeleteResponseSerialiazer(serializers.Serializer):
17+
username = serializers.CharField()
18+
19+
20+
class UserDeleteAPIView(APIView):
21+
permission_classes = [IsAuthenticated]
22+
23+
@conditional_swagger_auto_schema(
24+
request_body=CyberstormUserDeleteRequestSerialiazer,
25+
responses={200: CyberstormUserDeleteResponseSerialiazer},
26+
operation_id="cyberstorm.current-user.delete",
27+
tags=["cyberstorm"],
28+
)
29+
def post(self, request: HttpRequest):
30+
serializer = CyberstormUserDeleteRequestSerialiazer(data=request.data)
31+
serializer.is_valid(raise_exception=True)
32+
form = DeleteAccountForm(
33+
user=request.user,
34+
data=serializer.validated_data,
35+
)
36+
if form.is_valid():
37+
form.delete_user()
38+
return Response()
39+
else:
40+
raise ValidationError(form.errors)

django/thunderstore/api/urls.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
TeamMemberListAPIView,
2020
TeamServiceAccountListAPIView,
2121
)
22+
from thunderstore.api.cyberstorm.views.user import UserDeleteAPIView
2223

2324
cyberstorm_urls = [
2425
path(
@@ -116,4 +117,9 @@
116117
TeamServiceAccountListAPIView.as_view(),
117118
name="cyberstorm.team.service-account",
118119
),
120+
path(
121+
"current-user/delete/",
122+
UserDeleteAPIView.as_view(),
123+
name="cyberstorm.current-user.delete",
124+
),
119125
]

django/thunderstore/social/views.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,9 @@ def clean_verification(self):
4949
raise forms.ValidationError("Invalid verification")
5050
return data
5151

52+
def delete_user(self):
53+
self.user.delete()
54+
5255

5356
class DeleteAccountView(SettingsViewMixin, RequireAuthenticationMixin, FormView):
5457
template_name = "settings/delete_account.html"
@@ -66,5 +69,5 @@ def get_form_kwargs(self, *args, **kwargs):
6669
return kwargs
6770

6871
def form_valid(self, form):
69-
self.request.user.delete()
72+
form.delete_user()
7073
return super().form_valid(form)

0 commit comments

Comments
 (0)