diff --git a/apps/account/serializers/common.py b/apps/account/serializers/common.py index d5f89526..e8d6ba30 100644 --- a/apps/account/serializers/common.py +++ b/apps/account/serializers/common.py @@ -1,5 +1,6 @@ """Common account serializers""" from django.conf import settings +from django.utils.translation import gettext_lazy as _ from django.contrib.auth import password_validation as password_validators from fcm_django.models import FCMDevice from rest_framework import exceptions @@ -80,23 +81,31 @@ class ChangePasswordSerializer(serializers.ModelSerializer): """Serializer for model User.""" password = serializers.CharField(write_only=True) + old_password = serializers.CharField(write_only=True) class Meta: """Meta class""" model = models.User - fields = ('password', ) + fields = ( + 'password', + 'old_password', + ) def validate(self, attrs): """Override validate method""" password = attrs.get('password') + old_password = attrs.get('old_password') try: + # Check old password + if not self.instance.check_password(raw_password=old_password): + raise serializers.ValidationError(_('Old password mismatch.')) # Compare new password with the old ones if self.instance.check_password(raw_password=password): - raise utils_exceptions.PasswordsAreEqual() + raise serializers.ValidationError(_('Password is already in use')) # Validate password password_validators.validate_password(password=password) except serializers.ValidationError as e: - raise serializers.ValidationError(str(e)) + raise serializers.ValidationError({'detail': e.detail}) else: return attrs