added endpoint to change password
This commit is contained in:
parent
6d3b7b1921
commit
2f0b8ab90d
|
|
@ -89,3 +89,35 @@ class PasswordResetConfirmSerializer(serializers.ModelSerializer):
|
|||
# Overdue instance
|
||||
instance.overdue()
|
||||
return instance
|
||||
|
||||
|
||||
class ChangePasswordSerializer(serializers.ModelSerializer):
|
||||
"""Serializer for model User."""
|
||||
|
||||
password = serializers.CharField(write_only=True)
|
||||
|
||||
class Meta:
|
||||
"""Meta class"""
|
||||
model = models.User
|
||||
fields = ('password', )
|
||||
|
||||
def validate(self, attrs):
|
||||
"""Override validate method"""
|
||||
password = attrs.get('password')
|
||||
try:
|
||||
# Compare new password with the old ones
|
||||
if self.instance.check_password(raw_password=password):
|
||||
raise utils_exceptions.PasswordsAreEqual()
|
||||
# Validate password
|
||||
password_validators.validate_password(password=password)
|
||||
except serializers.ValidationError as e:
|
||||
raise serializers.ValidationError(str(e))
|
||||
else:
|
||||
return attrs
|
||||
|
||||
def update(self, instance, validated_data):
|
||||
"""Override update method"""
|
||||
# Update user password from instance
|
||||
instance.set_password(validated_data.get('password'))
|
||||
instance.save()
|
||||
return instance
|
||||
|
|
|
|||
|
|
@ -7,6 +7,8 @@ from account.views import web as views
|
|||
app_name = 'account'
|
||||
|
||||
urlpatterns_api = [
|
||||
path('change-password/', views.ChangePasswordView.as_view(),
|
||||
name='change-password'),
|
||||
path('reset-password/', views.PasswordResetView.as_view(),
|
||||
name='password-reset'),
|
||||
path('form/reset-password/<uidb64>/<token>/', views.FormPasswordResetConfirmView.as_view(),
|
||||
|
|
|
|||
|
|
@ -23,6 +23,7 @@ from account.serializers import web as serializers
|
|||
from utils import exceptions as utils_exceptions
|
||||
from utils.models import GMTokenGenerator
|
||||
from utils.views import (JWTCreateAPIView,
|
||||
JWTUpdateAPIView,
|
||||
JWTGenericViewMixin)
|
||||
|
||||
|
||||
|
|
@ -74,6 +75,20 @@ class PasswordResetConfirmView(JWTGenericViewMixin):
|
|||
return Response(status=status.HTTP_200_OK)
|
||||
|
||||
|
||||
class ChangePasswordView(JWTUpdateAPIView):
|
||||
"""Change password view"""
|
||||
serializer_class = serializers.ChangePasswordSerializer
|
||||
queryset = models.User.objects.active()
|
||||
|
||||
def patch(self, request, *args, **kwargs):
|
||||
"""Implement PUT method"""
|
||||
serializer = self.get_serializer(instance=self.request.user,
|
||||
data=request.data)
|
||||
serializer.is_valid(raise_exception=True)
|
||||
serializer.save()
|
||||
return Response(status=status.HTTP_200_OK)
|
||||
|
||||
|
||||
# Form view
|
||||
class PasswordContextMixin:
|
||||
extra_context = None
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user