Files
modoboa/modoboa/autoreply/api/v2/serializers.py
T

87 lines
2.7 KiB
Python

"""Autoreply serializers."""
from django.utils import timezone
from django.utils.translation import gettext as _
from rest_framework import serializers
from modoboa.admin import models as admin_models
from modoboa.autoreply import models
class AutoreplySettingsSerializer(serializers.Serializer):
"""A serializer for global parameters."""
# General
tracking_period = serializers.IntegerField(default=7)
default_subject = serializers.CharField(default="I'm off")
default_content = serializers.CharField(
default="""I'm currently off. I'll answer as soon as I come back.
Best regards,
%(name)s
"""
)
def validate_tracking_period(self, value):
if value < 1:
raise serializers.ValidationError(_("Value can't be less than 1 day"))
return value
class ARMessageSerializer(serializers.ModelSerializer):
"""A serializer for ARmessage."""
class Meta:
model = models.ARmessage
fields = "__all__"
def validate_mbox(self, value):
user = self.context["request"].user
role = user.role
if role == "SimpleUsers" and user.mailbox != value:
raise serializers.ValidationError(
_("You don't have ownership on this mailbox")
)
elif role in ["DomainAdmins", "Resellers"]:
mailboxes = admin_models.Mailbox.objects.get_for_admin(user)
if value not in mailboxes:
raise serializers.ValidationError(
_("You don't have ownership on this mailbox")
)
return value
def validate(self, data):
"""Check dates."""
if not data.get("fromdate"):
data["fromdate"] = timezone.now()
if not data["enabled"]:
return data
untildate = data.get("untildate")
if untildate is not None:
if untildate < timezone.now():
raise serializers.ValidationError({"untildate": _("This date is over")})
elif untildate < data["fromdate"]:
raise serializers.ValidationError(
{"untildate": _("Must be greater than start date")}
)
return data
def create(self, validated_data):
instance = super().create(validated_data)
instance.manage_sieve_rule(self.context["request"])
return instance
def update(self, instance, validated_data):
instance = super().update(instance, validated_data)
instance.manage_sieve_rule(self.context["request"])
return instance
class AccountARMessageSerializer(ARMessageSerializer):
"""Dedicated serializer for account operations."""
class Meta:
model = models.ARmessage
fields = ("enabled", "subject", "content", "fromdate", "untildate")