added endpoint to change password
This commit is contained in:
parent
6d3b7b1921
commit
2f0b8ab90d
|
|
@ -89,3 +89,35 @@ class PasswordResetConfirmSerializer(serializers.ModelSerializer):
|
||||||
# Overdue instance
|
# Overdue instance
|
||||||
instance.overdue()
|
instance.overdue()
|
||||||
return instance
|
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'
|
app_name = 'account'
|
||||||
|
|
||||||
urlpatterns_api = [
|
urlpatterns_api = [
|
||||||
|
path('change-password/', views.ChangePasswordView.as_view(),
|
||||||
|
name='change-password'),
|
||||||
path('reset-password/', views.PasswordResetView.as_view(),
|
path('reset-password/', views.PasswordResetView.as_view(),
|
||||||
name='password-reset'),
|
name='password-reset'),
|
||||||
path('form/reset-password/<uidb64>/<token>/', views.FormPasswordResetConfirmView.as_view(),
|
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 import exceptions as utils_exceptions
|
||||||
from utils.models import GMTokenGenerator
|
from utils.models import GMTokenGenerator
|
||||||
from utils.views import (JWTCreateAPIView,
|
from utils.views import (JWTCreateAPIView,
|
||||||
|
JWTUpdateAPIView,
|
||||||
JWTGenericViewMixin)
|
JWTGenericViewMixin)
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -74,6 +75,20 @@ class PasswordResetConfirmView(JWTGenericViewMixin):
|
||||||
return Response(status=status.HTTP_200_OK)
|
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
|
# Form view
|
||||||
class PasswordContextMixin:
|
class PasswordContextMixin:
|
||||||
extra_context = None
|
extra_context = None
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user