From 7c4a8e51a19fecc4244a791efe8211b16cd4066c Mon Sep 17 00:00:00 2001 From: Oksamies Date: Fri, 8 Dec 2023 20:16:45 +0200 Subject: [PATCH] Add UserDeleteView --- .../thunderstore/api/cyberstorm/views/user.py | 37 +++++++++++++++++++ django/thunderstore/api/urls.py | 6 +++ django/thunderstore/social/views.py | 5 ++- 3 files changed, 47 insertions(+), 1 deletion(-) create mode 100644 django/thunderstore/api/cyberstorm/views/user.py diff --git a/django/thunderstore/api/cyberstorm/views/user.py b/django/thunderstore/api/cyberstorm/views/user.py new file mode 100644 index 000000000..55dfe7874 --- /dev/null +++ b/django/thunderstore/api/cyberstorm/views/user.py @@ -0,0 +1,37 @@ +from django.http import HttpRequest +from rest_framework import serializers +from rest_framework.exceptions import ValidationError +from rest_framework.response import Response +from rest_framework.views import APIView + +from thunderstore.api.utils import conditional_swagger_auto_schema +from thunderstore.social.views import DeleteAccountForm + + +class CyberstormUserDeleteRequestSerialiazer(serializers.Serializer): + verification = serializers.CharField() + + +class CyberstormUserDeleteResponseSerialiazer(serializers.Serializer): + username = serializers.CharField() + + +class UserDeleteAPIView(APIView): + @conditional_swagger_auto_schema( + request_body=CyberstormUserDeleteRequestSerialiazer, + responses={200: CyberstormUserDeleteResponseSerialiazer}, + operation_id="cyberstorm.current-user.delete", + tags=["cyberstorm"], + ) + def post(self, request: HttpRequest): + serializer = CyberstormUserDeleteRequestSerialiazer(data=request.data) + serializer.is_valid(raise_exception=True) + form = DeleteAccountForm( + user=request.user, + data=serializer.validated_data, + ) + if form.is_valid(): + form.delete_user() + return Response() + else: + raise ValidationError(form.errors) diff --git a/django/thunderstore/api/urls.py b/django/thunderstore/api/urls.py index 4437f6e60..939000e6e 100644 --- a/django/thunderstore/api/urls.py +++ b/django/thunderstore/api/urls.py @@ -16,6 +16,7 @@ TeamMembersAPIView, TeamServiceAccountsAPIView, ) +from thunderstore.api.cyberstorm.views.user import UserDeleteAPIView cyberstorm_urls = [ path( @@ -101,4 +102,9 @@ PackageVersionsAPIView.as_view(), name="cyberstorm.package.versions", ), + path( + "current-user/delete/", + UserDeleteAPIView.as_view(), + name="cyberstorm.current-user.delete", + ), ] diff --git a/django/thunderstore/social/views.py b/django/thunderstore/social/views.py index dcd2d4e8a..d79662d85 100644 --- a/django/thunderstore/social/views.py +++ b/django/thunderstore/social/views.py @@ -49,6 +49,9 @@ def clean_verification(self): raise forms.ValidationError("Invalid verification") return data + def delete_user(self): + self.user.delete() + class DeleteAccountView(SettingsViewMixin, RequireAuthenticationMixin, FormView): template_name = "settings/delete_account.html" @@ -66,5 +69,5 @@ def get_form_kwargs(self, *args, **kwargs): return kwargs def form_valid(self, form): - self.request.user.delete() + form.delete_user() return super().form_valid(form)