serializers.py 1.79 KB
from django.contrib.auth import password_validation
from rest_framework_json_api import serializers
from rest_framework.serializers import Serializer as DRFSerializer

from usuario.models import Usuario


class UsuarioSerializer(serializers.ModelSerializer):
    permisos_usuario = serializers.SerializerMethodField()

    class Meta:
        model = Usuario
        fields = (
            'first_name',
            'last_name',
            'email',
            'documento_identidad',
            'permisos_usuario',
        )

    @staticmethod
    def get_permisos_usuario(instance):
        return instance.get_all_permissions()

    included_serializers = {
        'organismo': 'organismo.serializers.OrganismoSerializer',
    }


class CambiarClaveSecretaSerializer(DRFSerializer):
    clave = serializers.CharField(max_length=128, write_only=True, required=True)
    clave_nueva = serializers.CharField(max_length=128, write_only=True, required=True)
    clave_nueva_2 = serializers.CharField(max_length=128, write_only=True, required=True)

    def validate_clave(self, value):
        user = self.context['request'].user
        if not user.check_password(value):
            raise serializers.ValidationError("La contraseña anterior no es válida. ¡Intentalo nuevamente!")
        return value

    def validate(self, data):
        if data['clave_nueva'] != data['clave_nueva_2']:
            raise serializers.ValidationError({'clave_nueva_2': "Los nuevos campos de contraseñas no coinciden"})
        password_validation.validate_password(data['clave_nueva'], self.context['request'].user)
        return data

    def save(self, **kwargs):
        clave = self.validated_data['clave_nueva']
        usuario = self.context['request'].user
        usuario.set_password(clave)
        usuario.save()
        return usuario