Skip to content

Commit 7c4a8e5

Browse files
committed
Add UserDeleteView
1 parent f2a2960 commit 7c4a8e5

File tree

3 files changed

+47
-1
lines changed

3 files changed

+47
-1
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
from django.http import HttpRequest
2+
from rest_framework import serializers
3+
from rest_framework.exceptions import 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+
11+
class CyberstormUserDeleteRequestSerialiazer(serializers.Serializer):
12+
verification = serializers.CharField()
13+
14+
15+
class CyberstormUserDeleteResponseSerialiazer(serializers.Serializer):
16+
username = serializers.CharField()
17+
18+
19+
class UserDeleteAPIView(APIView):
20+
@conditional_swagger_auto_schema(
21+
request_body=CyberstormUserDeleteRequestSerialiazer,
22+
responses={200: CyberstormUserDeleteResponseSerialiazer},
23+
operation_id="cyberstorm.current-user.delete",
24+
tags=["cyberstorm"],
25+
)
26+
def post(self, request: HttpRequest):
27+
serializer = CyberstormUserDeleteRequestSerialiazer(data=request.data)
28+
serializer.is_valid(raise_exception=True)
29+
form = DeleteAccountForm(
30+
user=request.user,
31+
data=serializer.validated_data,
32+
)
33+
if form.is_valid():
34+
form.delete_user()
35+
return Response()
36+
else:
37+
raise ValidationError(form.errors)

django/thunderstore/api/urls.py

+6
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
TeamMembersAPIView,
1717
TeamServiceAccountsAPIView,
1818
)
19+
from thunderstore.api.cyberstorm.views.user import UserDeleteAPIView
1920

2021
cyberstorm_urls = [
2122
path(
@@ -101,4 +102,9 @@
101102
PackageVersionsAPIView.as_view(),
102103
name="cyberstorm.package.versions",
103104
),
105+
path(
106+
"current-user/delete/",
107+
UserDeleteAPIView.as_view(),
108+
name="cyberstorm.current-user.delete",
109+
),
104110
]

django/thunderstore/social/views.py

+4-1
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)