class AliasSerializer(serializers.ModelSerializer): """Base Alias serializer.""" address = lib_fields.DRFEmailFieldUTF8AndEmptyUser() recipients = serializers.ListField( child=lib_fields.DRFEmailFieldUTF8AndEmptyUser(), allow_empty=False, help_text=ugettext_lazy("A list of recipient")) class Meta: model = admin_models.Alias fields = ("pk", "address", "enabled", "internal", "recipients") def validate_address(self, value): """Check domain.""" local_part, domain = email_utils.split_mailbox(value) self.domain = admin_models.Domain.objects.filter(name=domain).first() if self.domain is None: raise serializers.ValidationError(_("Domain not found.")) if not self.context["request"].user.can_access(self.domain): raise serializers.ValidationError(_("Permission denied.")) return value def create(self, validated_data): """Create appropriate objects.""" creator = self.context["request"].user try: core_signals.can_create_object.send(sender=self.__class__, context=creator, klass=admin_models.Alias) core_signals.can_create_object.send(sender=self.__class__, context=self.domain, object_type="mailbox_aliases") except lib_exceptions.ModoboaException as inst: raise serializers.ValidationError(force_text(inst)) recipients = validated_data.pop("recipients", None) alias = admin_models.Alias(domain=self.domain, **validated_data) alias.save(creator=creator) alias.set_recipients(recipients) return alias def update(self, instance, validated_data): """Update objects.""" recipients = validated_data.pop("recipients", None) for key, value in validated_data.items(): setattr(instance, key, value) instance.save() instance.set_recipients(recipients) return instance
class SenderAddressSerializer(serializers.ModelSerializer): """Base Alias serializer.""" address = lib_fields.DRFEmailFieldUTF8AndEmptyUser() class Meta: model = admin_models.SenderAddress fields = ("pk", "address", "mailbox") def validate_address(self, value): """Check domain.""" local_part, domain = email_utils.split_mailbox(value) domain = admin_models.Domain.objects.filter(name=domain).first() user = self.context["request"].user if domain and not user.can_access(domain): raise serializers.ValidationError( _("You don't have access to this domain.")) return value def validate_mailbox(self, value): """Check permission.""" user = self.context["request"].user if not user.can_access(value): raise serializers.ValidationError( _("You don't have access to this mailbox.")) return value
class AliasSerializer(serializers.ModelSerializer): """Alias serializer.""" address = lib_fields.DRFEmailFieldUTF8AndEmptyUser() recipients = serializers.ListField( child=lib_fields.DRFEmailFieldUTF8AndEmptyUser(), allow_empty=False, help_text=ugettext_lazy("A list of recipient") ) class Meta: model = admin_models.Alias fields = ( "pk", "address", "enabled", "internal", "recipients" ) def validate_address(self, value): """Check domain.""" local_part, self.domain = admin_models.validate_alias_address( value, self.context["request"].user, instance=self.instance) return value def create(self, validated_data): """Create appropriate objects.""" creator = self.context["request"].user return admin_models.Alias.objects.create( creator=creator, domain=self.domain, **validated_data) def update(self, instance, validated_data): """Update objects.""" recipients = validated_data.pop("recipients", None) for key, value in validated_data.items(): setattr(instance, key, value) instance.save() instance.set_recipients(recipients) return instance