mirror of
https://github.com/jwinterm/modoboa.git
synced 2026-10-17 05:41:25 +02:00
87 lines
2.7 KiB
Python
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")
|