70 lines
2.2 KiB
Python
70 lines
2.2 KiB
Python
"""Serializers for account web"""
|
|
from django.conf import settings
|
|
from rest_framework import serializers
|
|
from django.contrib.auth import password_validation as password_validators
|
|
|
|
from account import models
|
|
from account import tasks
|
|
from utils import exceptions as utils_exceptions
|
|
|
|
|
|
class PasswordResetSerializer(serializers.ModelSerializer):
|
|
"""Serializer from model PasswordReset"""
|
|
|
|
class Meta:
|
|
"""Meta class"""
|
|
model = models.ResetPasswordToken
|
|
fields = ('expiry_datetime', )
|
|
|
|
def create(self, validated_data, *args, **kwargs):
|
|
"""Override create method"""
|
|
request = self.context.get('request')
|
|
user = request.user
|
|
ip_address = request.META.get('REMOTE_ADDR')
|
|
obj = models.ResetPasswordToken.objects.create(
|
|
user=user,
|
|
ip_address=ip_address,
|
|
source=models.ResetPasswordToken.WEB
|
|
)
|
|
if settings.USE_CELERY:
|
|
tasks.send_reset_password_email.delay(obj.id)
|
|
else:
|
|
tasks.send_reset_password_email(obj.id)
|
|
return obj
|
|
|
|
|
|
class PasswordResetConfirmSerializer(serializers.ModelSerializer):
|
|
"""Serializer for model User"""
|
|
|
|
password = serializers.CharField(write_only=True)
|
|
|
|
class Meta:
|
|
"""Meta class"""
|
|
model = models.ResetPasswordToken
|
|
fields = ('password', )
|
|
|
|
def validate(self, attrs):
|
|
"""Override validate method"""
|
|
user = self.instance.user
|
|
password = attrs.get('password')
|
|
try:
|
|
# Compare new password with the old ones
|
|
if user.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.user.set_password(validated_data.get('password'))
|
|
instance.user.save()
|
|
|
|
# Overdue instance
|
|
instance.overdue()
|
|
return instance
|