Added new extension parameters

This commit is contained in:
Spitfireap
2024-07-12 19:52:14 +02:00
parent 3a6cd2d5eb
commit 5fbc23eac4
6 changed files with 194 additions and 9 deletions
@@ -8,6 +8,21 @@ from rest_framework import serializers
from modoboa.postfix_autoreply import models
class PostfixAutoreplySettingsSerializer(serializers.Serializer):
"""A serializer for global parameters."""
# General
autoreplies_timeout = serializers.IntegerField(default=86400)
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
"""
)
class ARMessageSerializer(serializers.ModelSerializer):
"""A serializer for ARmessage."""
+49
View File
@@ -0,0 +1,49 @@
"""Postfix autoreply forms."""
import collections
from django.utils.translation import gettext_lazy as _
POSTFIX_AUTOREPLY_PARAMETERS_STRUCT = collections.OrderedDict(
[
(
"general",
{
"label": _("General"),
"params": collections.OrderedDict(
[
(
"autoreplies_timeout",
{
"label": _("Automatic reply timeout"),
"help_text": _(
"Timeout in seconds between two auto-replies to the same recipient"
),
},
),
(
"default_subject",
{
"label": _("Default subject"),
"help_text": _(
"Default subject used when an auto-reply message is created automatically"
),
},
),
(
"default_content",
{
"label": _("Default subject"),
"help_text": _(
"Default content used when an auto-reply message is created "
"automatically. The '%(name)s' macro will be replaced by the "
"user's full name."
),
},
),
]
),
},
),
]
)
+11
View File
@@ -7,11 +7,22 @@ from django.utils.translation import gettext_lazy
def load_settings():
from modoboa.parameters import tools as param_tools
from modoboa.postfix_autoreply import forms
from . import app_settings
from .api.v2 import serializers
param_tools.registry.add(
"global", forms.ParametersForm, gettext_lazy("Automatic replies")
)
param_tools.registry.add2(
"global",
"postfix_autoreply",
gettext_lazy("Automatic replies"),
app_settings.POSTFIX_AUTOREPLY_PARAMETERS_STRUCT,
serializers.PostfixAutoreplySettingsSerializer,
False,
)
class PostfixAutoreplyConfig(AppConfig):
"""App configuration."""
+23 -9
View File
@@ -10,17 +10,38 @@ from django.utils.translation import gettext as _
from rest_framework import serializers
from modoboa.sievefilters import constants, lib
from modoboa.sievefilters.forms import supported_auth_mechs
from modoboa.sievefilters.api.v2 import vloaders
class FilterSetSerializer(serializers.Serializer):
class SievefiltersSettingsSerializer(serializers.Serializer):
"""A serializer for global parameters."""
# ManageSieve settings
server = serializers.CharField(default="127.0.0.1")
port = serializers.IntegerField(default=4190)
starttls = serializers.BooleanField(default=False)
authentication_mech = serializers.ChoiceField(
default="auto", choices=[("auto", _("auto"))]
)
# Imap Settings
imap_server = serializers.CharField(default="127.0.0.1")
imap_secured = serializers.BooleanField(default=False)
imap_port = serializers.IntegerField(default=143)
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.fields["authentication_mech"].choices = supported_auth_mechs()
class FilterSetSerializer(serializers.Serializer):
name = serializers.CharField()
active = serializers.BooleanField(default=False)
class FilterSetContentSerializer(serializers.Serializer):
content = serializers.CharField()
def validate_content(self, value: str):
@@ -32,20 +53,17 @@ class FilterSetContentSerializer(serializers.Serializer):
class ConditionSerializer(serializers.Serializer):
name = serializers.CharField()
operator = serializers.CharField()
value = serializers.CharField()
class ActionSerializer(serializers.Serializer):
name = serializers.CharField()
args = serializers.DictField(child=serializers.CharField())
class FilterSerializer(serializers.Serializer):
name = serializers.CharField()
enabled = serializers.BooleanField(default=True)
match_type = serializers.ChoiceField(choices=constants.MATCH_TYPES)
@@ -134,21 +152,18 @@ class FilterSerializer(serializers.Serializer):
class OperatorSerializer(serializers.Serializer):
name = serializers.CharField()
label = serializers.CharField()
type = serializers.CharField()
class ConditionTemplateSerializer(serializers.Serializer):
name = serializers.CharField()
label = serializers.CharField()
operators = OperatorSerializer(many=True)
class ActionArgumentSerializer(serializers.Serializer):
name = serializers.CharField()
type = serializers.CharField()
label = serializers.CharField(required=False)
@@ -163,7 +178,6 @@ class ActionArgumentSerializer(serializers.Serializer):
class ActionTemplateSerializer(serializers.Serializer):
name = serializers.CharField()
label = serializers.CharField()
args = ActionArgumentSerializer(many=True, required=False)
+83
View File
@@ -0,0 +1,83 @@
"""Sieve filters forms."""
import collections
from django.utils.translation import gettext_lazy as _
SIEVEFILTERS_PARAMETERS_STRUCT = collections.OrderedDict(
[
(
"manage_sieve_settings",
{
"label": _("ManageSieve settings"),
"params": collections.OrderedDict(
[
(
"server",
{
"label": _("Server address"),
"help_text": _("Address of your MANAGESIEVE server"),
},
),
(
"port",
{
"label": _("Server port"),
"help_text": _(
"Listening port of your MANAGESIEVE server"
),
},
),
(
"starttls",
{
"label": _("Connect using STARTTLS"),
"help_text": _("Use the STARTTLS extension"),
},
),
(
"authentication_mech",
{
"label": _("Authentication mechanism"),
"help_text": _("Prefered authentication mechanism"),
},
),
]
),
},
),
(
"imap_settings",
{
"label": _("IMAP settings"),
"params": collections.OrderedDict(
[
(
"imap_server",
{
"label": _("Server address"),
"help_text": _("Address of your IMAP server"),
},
),
(
"imap_secured",
{
"label": _("Use a secured connection"),
"help_text": _(
"Use a secured connection to access IMAP server"
),
},
),
(
"imap_port",
{
"label": _("Server port"),
"help_text": _("Listening port of your IMAP server"),
},
),
]
),
},
),
]
)
+13
View File
@@ -7,10 +7,23 @@ from django.utils.translation import gettext_lazy
def load_settings():
from modoboa.parameters import tools as param_tools
from modoboa.sievefilters import forms
from . import app_settings
from .api.v2 import serializers
# Admin parameters
param_tools.registry.add(
"global", forms.ParametersForm, gettext_lazy("Sieve filters")
)
param_tools.registry.add2(
"global",
"sievefilters",
gettext_lazy("Sieve filters"),
app_settings.SIEVEFILTERS_PARAMETERS_STRUCT,
serializers.SievefiltersSettingsSerializer,
False,
)
# User parameters
param_tools.registry.add(
"user", forms.UserSettings, gettext_lazy("Message filters")
)