Password reset
authorRadek Czajka <rczajka@rczajka.pl>
Wed, 19 Nov 2025 12:46:28 +0000 (13:46 +0100)
committerRadek Czajka <rczajka@rczajka.pl>
Wed, 19 Nov 2025 12:46:28 +0000 (13:46 +0100)
src/api/serializers.py
src/api/urls.py
src/api/views.py

index 6806e91..8d160b0 100644 (file)
@@ -73,3 +73,7 @@ class PasswordSerializer(serializers.Serializer):
         if not u.check_password(value):
             raise serializers.ValidationError("Password incorrect.")
         return value
+
+
+class ResetPasswordSerializer(serializers.Serializer):
+    email = serializers.EmailField()
index d4dc0ee..558ed9c 100644 (file)
@@ -17,6 +17,7 @@ urlpatterns1 = [
     path('me/', views.UserView.as_view()),
     path('deleteAccount/', views.DeleteAccountView.as_view()),
     path('password/', views.PasswordView.as_view()),
+    path('password-reset/', views.ResetPasswordView.as_view()),
 
     path('', include('catalogue.api.urls2')),
     path('', include('social.api.urls2')),
index 5a77bd8..e1ca2e2 100644 (file)
@@ -2,6 +2,7 @@
 # Copyright © Fundacja Wolne Lektury. See NOTICE for more information.
 #
 from time import time
+from allauth.account.forms import ResetPasswordForm
 from django.conf import settings
 from django.contrib.auth import authenticate
 from django.contrib.auth.decorators import login_required
@@ -367,3 +368,15 @@ class PasswordView(GenericAPIView):
         u.set_password(d['new_password'])
         u.save()
         return Response({})
+
+
+class ResetPasswordView(GenericAPIView):
+    serializer_class = serializers.ResetPasswordSerializer
+
+    def post(self, request):
+        serializer = serializers.ResetPasswordSerializer(data=request.data)
+        serializer.is_valid(raise_exception=True)
+        form = ResetPasswordForm({"email": serializer.validated_data['email']})
+        form.is_valid()
+        form.save(request)
+        return Response({})