Exemple #1
0
class ParametersForm(AdminParametersForm):
    app = "webmail"

    sep3 = SeparatorField(label=_("General"))

    max_attachment_size = forms.CharField(
        label=_("Maximum attachment size"),
        initial="2048",
        help_text=_("Maximum attachment size in bytes (or KB, MB, GB if specified)")
    )

    sep1 = SeparatorField(label=_("IMAP settings"))

    imap_server = forms.CharField(
        label=_("Server address"),
        initial="127.0.0.1",
        help_text=_("Address of your IMAP server")
    )

    imap_secured = YesNoField(
        label=_("Use a secured connection"),
        initial="no",
        help_text=_("Use a secured connection to access IMAP server")
    )
    
    imap_port = forms.IntegerField(
        label=_("Server port"),
        initial=143,
        help_text=_("Listening port of your IMAP server")
    )

    sep2 = SeparatorField(label=_("SMTP settings"))

    smtp_server = forms.CharField(
        label=_("Server address"),
        initial="127.0.0.1",
        help_text=_("Address of your SMTP server")
    )

    smtp_secured_mode = forms.ChoiceField(
        label=_("Secured connection mode"),
        choices=[("none", _("None")),
                 ("starttls", "STARTTLS"),
                 ("ssl", "SSL/TLS")],
        initial="none",
        help_text=_("Use a secured connection to access SMTP server"),
        widget=InlineRadioSelect
    )
    
    smtp_port = forms.IntegerField(
        label=_("Server port"),
        initial=25,
        help_text=_("Listening port of your SMTP server")
    )

    smtp_authentication = YesNoField(
        label=_("Authentication required"),
        initial="no",
        help_text=_("Server needs authentication")
    )
Exemple #2
0
class ParametersForm(AdminParametersForm):
    app = "radicale"

    server_settings = SeparatorField(label=ugettext_lazy("Server settings"))

    server_location = forms.CharField(
        label=ugettext_lazy("Server URL"),
        help_text=ugettext_lazy("The URL of your Radicale server. "
                                "It will be used to construct calendar URLs."),
        widget=forms.TextInput(attrs={"class": "form-control"}))

    rights_management_sep = SeparatorField(
        label=ugettext_lazy("Rights management"))

    rights_file_path = forms.CharField(
        label=ugettext_lazy("Rights file's path"),
        initial="/etc/radicale/rights",
        help_text=ugettext_lazy(
            "Path to the file that contains rights definition"),
        widget=forms.TextInput(attrs={"class": "form-control"}))

    allow_calendars_administration = YesNoField(
        label=ugettext_lazy("Allow calendars administration"),
        initial="no",
        help_text=ugettext_lazy(
            "Allow domain administrators to manage user calendars "
            "(read and write)"))
Exemple #3
0
class ParametersForm(AdminParametersForm):
    app = "sievefilters"

    sep1 = SeparatorField(label=_("ManageSieve settings"))

    server = forms.CharField(
        label=_("Server address"),
        initial="127.0.0.1",
        help_text=_("Address of your MANAGESIEVE server"),
        widget=forms.TextInput(attrs={"class": "form-control"}))

    port = forms.IntegerField(
        label=_("Server port"),
        initial=4190,
        help_text=_("Listening port of your MANAGESIEVE server"),
        widget=forms.TextInput(attrs={"class": "form-control"}))

    starttls = YesNoField(label=_("Connect using STARTTLS"),
                          initial="no",
                          help_text=_("Use the STARTTLS extension"))

    authentication_mech = forms.ChoiceField(
        label=_("Authentication mechanism"),
        choices=supported_auth_mechs(),
        initial="auto",
        help_text=_("Prefered authentication mechanism"),
        widget=forms.Select(attrs={"class": "form-control"}))
Exemple #4
0
class UserSettings(UserParametersForm):
    app = "amavis"

    dsep = SeparatorField(label=_("Display"))

    messages_per_page = forms.IntegerField(
        initial=40,
        label=_("Number of displayed emails per page"),
        help_text=_("Set the maximum number of messages displayed in a page"))
Exemple #5
0
class ParametersForm(AdminParametersForm):
    app = "postfix_autoreply"

    general_sep = SeparatorField(label=ugettext_lazy("General"))

    autoreplies_timeout = forms.IntegerField(
        label=ugettext_lazy("Automatic reply timeout"),
        initial=86400,
        help_text=ugettext_lazy(
            "Timeout in seconds between two auto-replies to the same recipient"
        ))
Exemple #6
0
class UserSettings(parameters.UserParametersForm):
    app = "core"

    sep = SeparatorField(label=ugettext_lazy("Display"))

    lang = forms.ChoiceField(
        initial=translate_language_code(settings.LANGUAGE_CODE),
        label=ugettext_lazy("Prefered language"),
        choices=[("cs", "čeština"), ("de", "deutsch"), ("en", "english"),
                 ("es", "español"), ("fr", "français"), ("it", "italiano"),
                 ("nl", "nederlands"), ("pt", "português"), ("ru", "русский"),
                 ("sv", "svenska")],
        help_text=ugettext_lazy("Prefered language to display pages"))
Exemple #7
0
class AdminParametersForm(parameters.AdminParametersForm):

    """Admin parameters definition."""

    app = "postfix_relay_domains"

    general_sep = SeparatorField(label=ugettext_lazy("General"))

    master_cf_path = forms.CharField(
        label=ugettext_lazy("Postfix's master.cf path"),
        initial="/etc/postfix/master.cf",
        help_text=ugettext_lazy('Path to the master.cf configuration file'),
        widget=forms.TextInput(attrs={"class": "form-control"})
    )
Exemple #8
0
class UserSettings(UserParametersForm):
    app = "sievefilters"

    sep1 = SeparatorField(label=_("General"))

    editor_mode = forms.ChoiceField(
        initial="gui",
        label=_("Editor mode"),
        choices=[("raw", "raw"), ("gui", "simplified")],
        help_text=_("Select the mode you want the editor to work in"),
        widget=InlineRadioSelect)

    @staticmethod
    def has_access(user):
        return user.has_mailbox
Exemple #9
0
class ParametersForm(AdminParametersForm):
    app = "stats"

    general_sep = SeparatorField(label=ugettext_lazy("General"))

    logfile = forms.CharField(
        label=ugettext_lazy("Path to the log file"),
        initial="/var/log/mail.log",
        help_text=ugettext_lazy("Path to log file used to collect statistics"))

    rrd_rootdir = forms.CharField(
        label=ugettext_lazy("Directory to store RRD files"),
        initial="/tmp/modoboa",
        help_text=ugettext_lazy(
            "Path to directory where RRD files are stored"))
Exemple #10
0
class ParametersForm(AdminParametersForm):
    app = "postfix_autoreply"

    general_sep = SeparatorField(label=ugettext_lazy("General"))

    autoreplies_timeout = forms.IntegerField(
        label=ugettext_lazy("Automatic reply timeout"),
        initial=86400,
        help_text=ugettext_lazy(
            "Timeout in seconds between two auto-replies to the same recipient"
        ),
        widget=forms.TextInput(attrs={"class": "form-control"}))

    default_subject = forms.CharField(
        label=ugettext_lazy("Default subject"),
        initial=ugettext_lazy("I'm off"),
        help_text=ugettext_lazy(
            "Default subject used when an auto-reply message is created automatically"
        ),
        widget=forms.TextInput(attrs={"class": "form-control"}))

    default_content = forms.CharField(
        label=ugettext_lazy("Default content"),
        initial=ugettext_lazy(
            """I'm currently off. I'll answer as soon as I come back.

Best regards,
%(name)s
"""),
        help_text=ugettext_lazy(
            "Default content used when an auto-reply message is created "
            "automatically. The '%(name)s' macro will be replaced by the "
            "user's full name."),
        widget=forms.widgets.Textarea(attrs={"class": "form-control"}))

    def clean_default_content(self):
        """Check if the provided value is valid.

        Must be a valid format string which will be used with the %
        operator.
        """
        tpl = self.cleaned_data["default_content"]
        try:
            test = tpl % {"name": "Antoine Nguyen"}
        except (KeyError, ValueError):
            raise forms.ValidationError(ugettext_lazy("Invalid syntax"))
        return tpl
Exemple #11
0
class UserSettings(UserParametersForm):
    app = "general"

    sep = SeparatorField(label=ugettext_lazy("Display"))

    lang = forms.ChoiceField(
        initial=translate_language_code(settings.LANGUAGE_CODE),
        label=ugettext_lazy("Prefered language"),
        choices=[
            ("de", "deutsch"),
            ("en", "english"),
            ("es", "español"),
            ("fr", "français"),
            ("pt", "português"),
            ("sv", "svenska"),
        ],
        help_text=ugettext_lazy("Prefered language to display pages"))
Exemple #12
0
class AdminParametersForm(parameters.AdminParametersForm):
    app = "admin"

    mbsep = SeparatorField(label=ugettext_lazy("Mailboxes"))

    handle_mailboxes = YesNoField(
        label=ugettext_lazy("Handle mailboxes on filesystem"),
        initial="no",
        help_text=ugettext_lazy("Rename or remove mailboxes on the filesystem when they get renamed or removed within Modoboa")
    )

    mailboxes_owner = forms.CharField(
        label=ugettext_lazy("Mailboxes ower"),
        initial="vmail",
        help_text=ugettext_lazy("The UNIX account who owns mailboxes on the filesystem")
    )

    auto_account_removal = YesNoField(
        label=ugettext_lazy("Automatic account removal"),
        initial="no",
        help_text=ugettext_lazy("When a mailbox is removed, also remove the associated account"),
    )

    # Visibility rules
    visibility_rules = {
        "mailboxes_owner": "handle_mailboxes=yes",
    }

    def __init__(self, *args, **kwargs):
        super(AdminParametersForm, self).__init__(*args, **kwargs)
        hide_fields = False
        try:
            code, version = exec_cmd("dovecot --version")
        except OSError:
            hide_fields = True
        else:
            if code or not version.strip().startswith("2"):
                hide_fields = True
        if hide_fields:
            del self.fields["handle_mailboxes"]
            del self.fields["mailboxes_owner"]
Exemple #13
0
class ParametersForm(AdminParametersForm):
    app = "limits"

    defv_sep = SeparatorField(label=_("Default limits"))
    
    deflt_domain_admins_limit = forms.IntegerField(
        label=_("Domain admins"),
        initial=0,
        help_text=_("Maximum number of allowed domain administrators for a new administrator"),
        widget=forms.widgets.TextInput(attrs={"class": "col-md-1 form-control"})
    )
    deflt_domains_limit = forms.IntegerField(
        label=_("Domains"),
        initial=0,
        help_text=_("Maximum number of allowed domains for a new administrator"),
        widget=forms.widgets.TextInput(attrs={"class": "col-md-1 form-control"})
    )
    deflt_domain_aliases_limit = forms.IntegerField(
        label=_("Domain aliases"),
        initial=0,
        help_text=_("Maximum number of allowed domain aliases for a new administrator"),
        widget=forms.widgets.TextInput(attrs={"class": "col-md-1 form-control"})
    )
    deflt_mailboxes_limit = forms.IntegerField(
        label=_("Mailboxes"),
        initial=0,
        help_text=_("Maximum number of allowed mailboxes for a new administrator"),
        widget=forms.widgets.TextInput(attrs={"class": "col-md-1 form-control"})
    )
    deflt_mailbox_aliases_limit = forms.IntegerField(
        label=_("Mailbox aliases"),
        initial=0,
        help_text=_("Maximum number of allowed aliases for a new administrator"),
        widget=forms.widgets.TextInput(attrs={"class": "col-md-1 form-control"})
    )

    def __init__(self, *args, **kwargs):
        super(AdminParametersForm, self).__init__(*args, **kwargs)
        self._load_extra_parameters('A')
Exemple #14
0
class ParametersForm(AdminParametersForm):
    app = "limits"

    defv_sep = SeparatorField(label=_("Default limits"))

    deflt_domain_admins_limit = forms.IntegerField(
        label=_("Domain admins"),
        initial=0,
        help_text=
        _("Maximum number of allowed domain administrators for a new administrator"
          ),
        widget=forms.widgets.TextInput(attrs={"class": "span1"}))
    deflt_domains_limit = forms.IntegerField(
        label=_("Domains"),
        initial=0,
        help_text=_(
            "Maximum number of allowed domains for a new administrator"),
        widget=forms.widgets.TextInput(attrs={"class": "span1"}))
    deflt_domain_aliases_limit = forms.IntegerField(
        label=_("Domain aliases"),
        initial=0,
        help_text=_(
            "Maximum number of allowed domain aliases for a new administrator"
        ),
        widget=forms.widgets.TextInput(attrs={"class": "span1"}))
    deflt_mailboxes_limit = forms.IntegerField(
        label=_("Mailboxes"),
        initial=0,
        help_text=_(
            "Maximum number of allowed mailboxes for a new administrator"),
        widget=forms.widgets.TextInput(attrs={"class": "span1"}))
    deflt_mailbox_aliases_limit = forms.IntegerField(
        label=_("Mailbox aliases"),
        initial=0,
        help_text=_(
            "Maximum number of allowed aliases for a new administrator"),
        widget=forms.widgets.TextInput(attrs={"class": "span1"}))
Exemple #15
0
class ParametersForm(AdminParametersForm):
    app = "amavis"

    qsettings_sep = SeparatorField(label=_("Quarantine settings"))

    max_messages_age = forms.IntegerField(
        label=_("Maximum message age"),
        initial=14,
        help_text=_(
            "Quarantine messages maximum age (in days) before deletion"))

    sep1 = SeparatorField(label=_("Messages releasing"))

    released_msgs_cleanup = YesNoField(
        label=_("Remove released messages"),
        initial="no",
        help_text=_(
            "Remove messages marked as released while cleaning up the database"
        ))

    am_pdp_mode = forms.ChoiceField(
        label=_("Amavis connection mode"),
        choices=[("inet", "inet"), ("unix", "unix")],
        initial="unix",
        help_text=_("Mode used to access the PDP server"),
        widget=InlineRadioSelect)

    am_pdp_host = forms.CharField(
        label=_("PDP server address"),
        initial="localhost",
        help_text=_("PDP server address (if inet mode)"))

    am_pdp_port = forms.IntegerField(
        label=_("PDP server port"),
        initial=9998,
        help_text=_("PDP server port (if inet mode)"))

    am_pdp_socket = forms.CharField(
        label=_("PDP server socket"),
        initial="/var/amavis/amavisd.sock",
        help_text=_("Path to the PDP server socket (if unix mode)"))

    check_requests_interval = forms.IntegerField(
        label=_("Check requests interval"),
        initial=30,
        help_text=_("Interval between two release requests checks"))

    user_can_release = YesNoField(
        label=_("Allow direct release"),
        initial="no",
        help_text=_("Allow users to directly release their messages"))

    self_service = YesNoField(label=_("Enable self-service mode"),
                              initial="no",
                              help_text=_("Activate the 'self-service' mode"))

    notifications_sender = forms.EmailField(
        label=_("Notifications sender"),
        initial="*****@*****.**",
        help_text=_("The e-mail address used to send notitications"))

    visibility_rules = {
        "am_pdp_host": "am_pdp_mode=inet",
        "am_pdp_port": "am_pdp_mode=inet",
        "am_pdp_socket": "am_pdp_mode=unix"
    }
Exemple #16
0
class GeneralParametersForm(parameters.AdminParametersForm):
    app = "core"

    sep1 = SeparatorField(label=ugettext_lazy("Authentication"))

    authentication_type = forms.ChoiceField(
        label=ugettext_lazy("Authentication type"),
        choices=[('local', ugettext_lazy("Local")),
                 ('ldap', "LDAP")],
        initial="local",
        help_text=ugettext_lazy("The backend used for authentication"),
        widget=InlineRadioSelect
    )

    password_scheme = forms.ChoiceField(
        label=ugettext_lazy("Default password scheme"),
        choices=[("crypt", "crypt"),
                 ("md5", "md5"),
                 ("md5crypt", "md5crypt"),
                 ("sha256", "sha256"),
                 ("plain", "plain")],
        initial="md5crypt",
        help_text=ugettext_lazy("Scheme used to crypt mailbox passwords")
    )

    secret_key = forms.CharField(
        label=ugettext_lazy("Secret key"),
        initial=random_key(),
        help_text=ugettext_lazy("Key used to encrypt/decrypt passwords")
    )

    # LDAP specific settings
    ldap_sep = SeparatorField(label=ugettext_lazy("LDAP settings"))

    ldap_server_address = forms.CharField(
        label=ugettext_lazy("Server address"),
        initial="localhost",
        help_text=ugettext_lazy("The IP address of the DNS name of the LDAP server")
    )

    ldap_server_port = forms.IntegerField(
        label=ugettext_lazy("Server port"),
        initial=389,
        help_text=ugettext_lazy("The TCP port number used by the LDAP server")
    )

    ldap_secured = YesNoField(
        label=ugettext_lazy("Use a secured connection"),
        initial="no",
        help_text=ugettext_lazy("Use an SSL/TLS connection to access the LDAP server")
    )

    ldap_auth_method = forms.ChoiceField(
        label=ugettext_lazy("Authentication method"),
        choices=[('searchbind', ugettext_lazy("Search and bind")),
                 ('directbind', ugettext_lazy("Direct bind"))],
        initial='searchbind',
        help_text=ugettext_lazy("Choose the authentication method to use"),
        widget=InlineRadioSelect
    )

    ldap_bind_dn = forms.CharField(
        label=ugettext_lazy("Bind DN"),
        initial='',
        help_text=ugettext_lazy("The distinguished name to use when binding to the LDAP server. Leave empty for an anonymous bind"),
        required=False
    )

    ldap_bind_password = forms.CharField(
        label=ugettext_lazy("Bind password"),
        initial='',
        help_text=ugettext_lazy("The password to use when binding to the LDAP server (with 'Bind DN')"),
        widget=forms.PasswordInput,
        required=False
    )

    ldap_search_base = forms.CharField(
        label=ugettext_lazy("Search base"),
        initial="",
        help_text=ugettext_lazy("The distinguished name of the search base"),
        required=False
    )

    ldap_search_filter = forms.CharField(
        label=ugettext_lazy("Search filter"),
        initial="(mail=%(user)s)",
        help_text=ugettext_lazy("An optional filter string (e.g. '(objectClass=person)'). In order to be valid, it must be enclosed in parentheses."),
        required=False
    )

    ldap_user_dn_template = forms.CharField(
        label=ugettext_lazy("User DN template"),
        initial="",
        help_text=ugettext_lazy("The template used to construct a user's DN. It should contain one placeholder (ie. %(user)s)"),
        required=False
    )

    ldap_password_attribute = forms.CharField(
        label=ugettext_lazy("Password attribute"),
        initial="userPassword",
        help_text=ugettext_lazy("The attribute used to store user passwords")
    )

    ldap_is_active_directory = YesNoField(
        label=ugettext_lazy("Active Directory"),
        initial="no",
        help_text=ugettext_lazy("Tell if the LDAP server is an Active Directory one")
    )

    sep3 = SeparatorField(label=ugettext_lazy("Miscellaneous"))

    log_maximum_age = forms.IntegerField(
        label=ugettext_lazy("Maximum log record age"),
        initial=365,
        help_text=ugettext_lazy("The maximum age in days of a log record")
    )

    items_per_page = forms.IntegerField(
        label=ugettext_lazy("Items per page"),
        initial=30,
        help_text=ugettext_lazy("Number of displayed items per page")
    )

    default_top_redirection = forms.ChoiceField(
        label=ugettext_lazy("Default top redirection"),
        choices=[],
        initial="core",
        help_text=ugettext_lazy("The default redirection used when no application is specified")
    )

    # Visibility rules
    visibility_rules = {
        "ldap_sep": "authentication_type=ldap",
        "ldap_server_address": "authentication_type=ldap",
        "ldap_server_port": "authentication_type=ldap",
        "ldap_secured": "authentication_type=ldap",
        "ldap_auth_method": "authentication_type=ldap",
        "ldap_bind_dn": "ldap_auth_method=searchbind",
        "ldap_bind_password": "******",
        "ldap_search_base": "ldap_auth_method=searchbind",
        "ldap_search_filter": "ldap_auth_method=searchbind",
        "ldap_user_dn_template": "ldap_auth_method=directbind",
        "ldap_password_attribute": "authentication_type=ldap",
        "ldap_is_active_directory": "authentication_type=ldap"
    }

    def __init__(self, *args, **kwargs):
        super(GeneralParametersForm, self).__init__(*args, **kwargs)
        self.fields["default_top_redirection"].choices = enabled_applications()

    def clean_ldap_user_dn_template(self):
        tpl = self.cleaned_data["ldap_user_dn_template"]
        try:
            test = tpl % {"user": "******"}
        except ValueError:
            raise forms.ValidationError(_("Invalid syntax"))
        return tpl

    def clean(self):
        """Custom validation method

        Depending on 'ldap_auth_method' value, we check for different
        required parameters.
        """
        super(GeneralParametersForm, self).clean()
        if len(self._errors):
            raise forms.ValidationError(self._errors)
        cleaned_data = self.cleaned_data
        if cleaned_data["authentication_type"] != "ldap":
            return cleaned_data

        if cleaned_data["ldap_auth_method"] == "searchbind":
            required_fields = ["ldap_search_base", "ldap_search_filter"]
        else:
            required_fields = ["ldap_user_dn_template"]

        for f in required_fields:
            if not f in cleaned_data or cleaned_data[f] == u'':
                self._errors[f] = self.error_class([_("This field is required")])

        return cleaned_data

    def to_django_settings(self):
        """Apply LDAP related parameters to Django settings

        Doing so, we can use the django_auth_ldap module.
        """
        try:
            import ldap
            from django_auth_ldap.config import LDAPSearch
            ldap_available = True
        except ImportError:
            ldap_available = False

        values = self.get_current_values()
        if not ldap_available or values["authentication_type"] != "ldap":
            return
        if not hasattr(settings, "AUTH_LDAP_USER_ATTR_MAP"):
            setattr(settings, "AUTH_LDAP_USER_ATTR_MAP", {
                "first_name": "givenName",
                "email": "mail",
                "last_name": "sn"
            })
        ldap_uri = 'ldaps://' if values["ldap_secured"] == "yes" else "ldap://"
        ldap_uri += "%s:%s" % (values["ldap_server_address"], values["ldap_server_port"])
        setattr(settings, "AUTH_LDAP_SERVER_URI", ldap_uri)
        if values["ldap_auth_method"] == "searchbind":
            setattr(settings, "AUTH_LDAP_BIND_DN", values["ldap_bind_dn"])
            setattr(settings, "AUTH_LDAP_BIND_PASSWORD", values["ldap_bind_password"])
            search = LDAPSearch(
                values["ldap_search_base"], ldap.SCOPE_SUBTREE,
                values["ldap_search_filter"]
            )
            setattr(settings, "AUTH_LDAP_USER_SEARCH", search)
        else:
            setattr(settings, "AUTH_LDAP_USER_DN_TEMPLATE", values["ldap_user_dn_template"])

        if values["ldap_is_active_directory"] == "yes":
            if not hasattr(settings, "AUTH_LDAP_GLOBAL_OPTIONS"):
                setattr(settings, "AUTH_LDAP_GLOBAL_OPTIONS", {
                    ldap.OPT_REFERRALS: False
                })
            else:
                settings.AUTH_LDAP_GLOBAL_OPTIONS[ldap.OPT_REFERRALS] = False
Exemple #17
0
class GeneralParametersForm(parameters.AdminParametersForm):
    app = "admin"

    sep1 = SeparatorField(label=ugettext_lazy("Authentication"))

    authentication_type = forms.ChoiceField(
        label=ugettext_lazy("Authentication type"),
        choices=[('local', ugettext_lazy("Local")), ('ldap', "LDAP")],
        initial="local",
        help_text=ugettext_lazy("The backend used for authentication"),
        widget=InlineRadioSelect)

    password_scheme = forms.ChoiceField(
        label=ugettext_lazy("Default password scheme"),
        choices=[("crypt", "crypt"), ("md5", "md5"), ("md5crypt", "md5crypt"),
                 ("sha256", "sha256"), ("plain", "plain")],
        initial="md5crypt",
        help_text=ugettext_lazy("Scheme used to crypt mailbox passwords"))

    secret_key = forms.CharField(
        label=ugettext_lazy("Secret key"),
        initial=random_key(),
        help_text=ugettext_lazy("Key used to encrypt/decrypt passwords"))

    # LDAP specific settings
    ldap_sep = SeparatorField(label=ugettext_lazy("LDAP settings"))

    ldap_server_address = forms.CharField(
        label=ugettext_lazy("Server address"),
        initial="localhost",
        help_text=ugettext_lazy(
            "The IP address of the DNS name of the LDAP server"))

    ldap_server_port = forms.IntegerField(
        label=ugettext_lazy("Server port"),
        initial=389,
        help_text=ugettext_lazy("The TCP port number used by the LDAP server"))

    ldap_secured = YesNoField(
        label=ugettext_lazy("Use a secured connection"),
        initial="no",
        help_text=ugettext_lazy(
            "Use an SSL/TLS connection to access the LDAP server"))

    ldap_auth_method = forms.ChoiceField(
        label=ugettext_lazy("Authentication method"),
        choices=[('searchbind', ugettext_lazy("Search and bind")),
                 ('directbind', ugettext_lazy("Direct bind"))],
        initial='searchbind',
        help_text=ugettext_lazy("Choose the authentication method to use"),
        widget=InlineRadioSelect)

    ldap_bind_dn = forms.CharField(
        label=ugettext_lazy("Bind DN"),
        initial='',
        help_text=ugettext_lazy(
            "The distinguished name to use when binding to the LDAP server. Leave empty for an anonymous bind"
        ),
        required=False)

    ldap_bind_password = forms.CharField(
        label=ugettext_lazy("Bind password"),
        initial='',
        help_text=ugettext_lazy(
            "The password to use when binding to the LDAP server (with 'Bind DN')"
        ),
        widget=forms.PasswordInput,
        required=False)

    ldap_search_base = forms.CharField(
        label=ugettext_lazy("Search base"),
        initial="",
        help_text=ugettext_lazy("The distinguished name of the search base"),
        required=False)

    ldap_search_filter = forms.CharField(
        label=ugettext_lazy("Search filter"),
        initial="(mail=%(user)s)",
        help_text=ugettext_lazy(
            "An optional filter string (e.g. '(objectClass=person)'). In order to be valid, it must be enclosed in parentheses."
        ),
        required=False)

    ldap_user_dn_template = forms.CharField(
        label=ugettext_lazy("User DN template"),
        initial="",
        help_text=ugettext_lazy(
            "The template used to construct a user's DN. It should contain one placeholder (ie. %(user)s)"
        ),
        required=False)

    ldap_password_attribute = forms.CharField(
        label=ugettext_lazy("Password attribute"),
        initial="userPassword",
        help_text=ugettext_lazy("The attribute used to store user passwords"))

    ldap_is_active_directory = YesNoField(
        label=ugettext_lazy("Active Directory"),
        initial="no",
        help_text=ugettext_lazy(
            "Tell if the LDAP server is an Active Directory one"))

    sep2 = SeparatorField(label=ugettext_lazy("Mailboxes"))

    handle_mailboxes = YesNoField(
        label=ugettext_lazy("Handle mailboxes on filesystem"),
        initial="no",
        help_text=ugettext_lazy(
            "Rename or remove mailboxes on the filesystem when they get renamed or removed within Modoboa"
        ))

    mailboxes_owner = forms.CharField(
        label=ugettext_lazy("Mailboxes ower"),
        initial="vmail",
        help_text=ugettext_lazy(
            "The UNIX account who owns mailboxes on the filesystem"))

    auto_account_removal = YesNoField(
        label=ugettext_lazy("Automatic account removal"),
        initial="no",
        help_text=ugettext_lazy(
            "When a mailbox is removed, also remove the associated account"),
    )

    sep3 = SeparatorField(label=ugettext_lazy("Miscellaneous"))

    log_maximum_age = forms.IntegerField(
        label=ugettext_lazy("Maximum log record age"),
        initial=365,
        help_text=ugettext_lazy("The maximum age in days of a log record"))

    items_per_page = forms.IntegerField(
        label=ugettext_lazy("Items per page"),
        initial=30,
        help_text=ugettext_lazy("Number of displayed items per page"))

    default_top_redirection = forms.ChoiceField(
        label=ugettext_lazy("Default top redirection"),
        choices=[],
        initial="admin",
        help_text=ugettext_lazy(
            "The default redirection used when no application is specified"))

    # Visibility rules
    visibility_rules = {
        "mailboxes_owner": "handle_mailboxes=yes",
        "ldap_sep": "authentication_type=ldap",
        "ldap_server_address": "authentication_type=ldap",
        "ldap_server_port": "authentication_type=ldap",
        "ldap_secured": "authentication_type=ldap",
        "ldap_auth_method": "authentication_type=ldap",
        "ldap_bind_dn": "ldap_auth_method=searchbind",
        "ldap_bind_password": "******",
        "ldap_search_base": "ldap_auth_method=searchbind",
        "ldap_search_filter": "ldap_auth_method=searchbind",
        "ldap_user_dn_template": "ldap_auth_method=directbind",
        "ldap_password_attribute": "authentication_type=ldap",
        "ldap_is_active_directory": "authentication_type=ldap"
    }

    def __init__(self, *args, **kwargs):
        super(GeneralParametersForm, self).__init__(*args, **kwargs)
        self.fields["default_top_redirection"].choices = enabled_applications()
        hide_fields = False
        try:
            code, version = exec_cmd("dovecot --version")
        except OSError, e:
            hide_fields = True
        else:
Exemple #18
0
class UserSettings(UserParametersForm):
    app = "webmail"

    sep1 = SeparatorField(label=_("Display"))

    displaymode = forms.ChoiceField(
        initial="plain",
        label=_("Default message display mode"),
        choices=[("html", "html"), ("plain", "text")],
        help_text=_("The default mode used when displaying a message"),
        widget=InlineRadioSelect())

    enable_links = YesNoField(initial="no",
                              label=_("Enable HTML links display"),
                              help_text=_("Enable/Disable HTML links display"))

    messages_per_page = forms.IntegerField(
        initial=40,
        label=_("Number of displayed emails per page"),
        help_text=_("Sets the maximum number of messages displayed in a page"))

    refresh_interval = forms.IntegerField(
        initial=300,
        label=_("Listing refresh rate"),
        help_text=_("Automatic folder refresh rate (in seconds)"))

    mboxes_col_width = forms.IntegerField(
        initial=200,
        label=_("Mailboxes container's width"),
        help_text=_("The width of the mailbox list container"))

    sep2 = SeparatorField(label=_("Mailboxes"))

    trash_folder = forms.CharField(
        initial="Trash",
        label=_("Trash folder"),
        help_text=_("Folder where deleted messages go"))

    sent_folder = forms.CharField(
        initial="Sent",
        label=_("Sent folder"),
        help_text=_("Folder where copies of sent messages go"))

    drafts_folder = forms.CharField(initial="Drafts",
                                    label=_("Drafts folder"),
                                    help_text=_("Folder where drafts go"))

    sep3 = SeparatorField(label=_("Composing messages"))

    editor = forms.ChoiceField(
        initial="plain",
        label=_("Default editor"),
        choices=[("html", "html"), ("plain", "text")],
        help_text=_("The default editor to use when composing a message"),
        widget=InlineRadioSelect())

    signature = forms.CharField(initial="",
                                label=_("Signature text"),
                                help_text=_("User defined email signature"),
                                required=False)

    visibility_rules = {"enable_links": "displaymode=html"}

    @staticmethod
    def has_access(user):
        return user.mailbox_set.count() != 0

    def clean_mboxes_col_width(self):
        """Check if the entered value is a positive integer.

        It must also be different from 0.
        """
        if self.cleaned_data['mboxes_col_width'] <= 0:
            raise forms.ValidationError(
                _('Value must be a positive integer (> 0)'))
        return self.cleaned_data['mboxes_col_width']
Exemple #19
0
class AdminParametersForm(parameters.AdminParametersForm):
    app = "admin"

    mbsep = SeparatorField(label=ugettext_lazy("Mailboxes"))

    handle_mailboxes = YesNoField(
        label=ugettext_lazy("Handle mailboxes on filesystem"),
        initial="no",
        help_text=ugettext_lazy(
            "Rename or remove mailboxes on the filesystem when they get renamed or removed within Modoboa"
        ))

    mailboxes_owner = forms.CharField(
        label=ugettext_lazy("Mailboxes ower"),
        initial="vmail",
        help_text=ugettext_lazy(
            "The UNIX account who owns mailboxes on the filesystem"))

    default_domain_quota = forms.IntegerField(
        label=ugettext_lazy("Default domain quota"),
        initial=0,
        help_text=ugettext_lazy(
            "Default quota (in MB) applied to freshly created domains with no "
            "value specified. A value of 0 means no quota."),
        widget=forms.TextInput(attrs={'class': 'span2'}))

    auto_account_removal = YesNoField(
        label=ugettext_lazy("Automatic account removal"),
        initial="no",
        help_text=ugettext_lazy(
            "When a mailbox is removed, also remove the associated account"))

    # Visibility rules
    visibility_rules = {
        "mailboxes_owner": "handle_mailboxes=yes",
    }

    def __init__(self, *args, **kwargs):
        super(AdminParametersForm, self).__init__(*args, **kwargs)
        hide_fields = False
        dpath = None
        code, output = exec_cmd("which dovecot")
        if not code:
            dpath = output.strip()
        else:
            known_paths = getattr(
                settings, "DOVECOT_LOOKUP_PATH",
                ("/usr/sbin/dovecot", "/usr/local/sbin/dovecot"))
            for fpath in known_paths:
                if os.path.isfile(fpath) and os.access(fpath, os.X_OK):
                    dpath = fpath
        if dpath:
            try:
                code, version = exec_cmd("%s --version" % dpath)
            except OSError:
                hide_fields = True
            else:
                if code or not version.strip().startswith("2"):
                    hide_fields = True
        else:
            hide_fields = True
        if hide_fields:
            del self.fields["handle_mailboxes"]
            del self.fields["mailboxes_owner"]

    def clean_default_domain_quota(self):
        """Ensure quota is a positive integer."""
        if self.cleaned_data['default_domain_quota'] < 0:
            raise forms.ValidationError(
                ugettext_lazy('Must be a positive integer'))
        return self.cleaned_data['default_domain_quota']
Exemple #20
0
class UserSettings(UserParametersForm):
    app = "webmail"

    sep1 = SeparatorField(label=_("Display"))

    displaymode = forms.ChoiceField(
        initial="plain",
        label=_("Default message display mode"),
        choices=[("html", "html"), ("plain", "text")],
        help_text=_("The default mode used when displaying a message"),
        widget=InlineRadioSelect)

    enable_links = YesNoField(initial="no",
                              label=_("Enable HTML links display"),
                              help_text=_("Enable/Disable HTML links display"))

    messages_per_page = forms.IntegerField(
        initial=40,
        label=_("Number of displayed emails per page"),
        help_text=_("Sets the maximum number of messages displayed in a page"))

    refresh_interval = forms.IntegerField(
        initial=300,
        label=_("Listing refresh rate"),
        help_text=_("Automatic folder refresh rate (in seconds)"))

    sep2 = SeparatorField(label=_("Mailboxes"))

    trash_folder = forms.CharField(
        initial="Trash",
        label=_("Trash folder"),
        help_text=_("Folder where deleted messages go"))

    sent_folder = forms.CharField(
        initial="Sent",
        label=_("Sent folder"),
        help_text=_("Folder where copies of sent messages go"))

    drafts_folder = forms.CharField(initial="Drafts",
                                    label=_("Drafts folder"),
                                    help_text=_("Folder where drafts go"))

    sep3 = SeparatorField(label=_("Composing messages"))

    editor = forms.ChoiceField(
        initial="plain",
        label=_("Default editor"),
        choices=[("html", "html"), ("plain", "text")],
        help_text=_("The default editor to use when composing a message"),
        widget=InlineRadioSelect)

    signature = forms.CharField(initial="",
                                label=_("Signature text"),
                                help_text=_("User defined email signature"),
                                widget=forms.widgets.Textarea,
                                required=False)

    visibility_rules = {"enable_links": "displaymode=html"}

    @staticmethod
    def has_access(user):
        return user.has_mailbox
Exemple #21
0
class ParametersForm(AdminParametersForm):
    """Extension settings."""

    app = "amavis"

    qsettings_sep = SeparatorField(label=_("Quarantine settings"))

    max_messages_age = forms.IntegerField(
        label=_("Maximum message age"),
        initial=14,
        help_text=_(
            "Quarantine messages maximum age (in days) before deletion"))

    sep1 = SeparatorField(label=_("Messages releasing"))

    released_msgs_cleanup = YesNoField(
        label=_("Remove released messages"),
        initial="no",
        help_text=_("Remove messages marked as released while cleaning up "
                    "the database"))

    am_pdp_mode = forms.ChoiceField(
        label=_("Amavis connection mode"),
        choices=[("inet", "inet"), ("unix", "unix")],
        initial="unix",
        help_text=_("Mode used to access the PDP server"),
        widget=InlineRadioSelect(attrs={"type": "checkbox"}))

    am_pdp_host = forms.CharField(
        label=_("PDP server address"),
        initial="localhost",
        help_text=_("PDP server address (if inet mode)"),
        widget=forms.TextInput(attrs={"class": "form-control"}))

    am_pdp_port = forms.IntegerField(
        label=_("PDP server port"),
        initial=9998,
        help_text=_("PDP server port (if inet mode)"))

    am_pdp_socket = forms.CharField(
        label=_("PDP server socket"),
        initial="/var/amavis/amavisd.sock",
        help_text=_("Path to the PDP server socket (if unix mode)"))

    user_can_release = YesNoField(
        label=_("Allow direct release"),
        initial="no",
        help_text=_("Allow users to directly release their messages"))

    self_service = YesNoField(label=_("Enable self-service mode"),
                              initial="no",
                              help_text=_("Activate the 'self-service' mode"))

    notifications_sender = forms.EmailField(
        label=_("Notifications sender"),
        initial="*****@*****.**",
        help_text=_("The e-mail address used to send notitications"))

    lsep = SeparatorField(label=_("Manual learning"))

    manual_learning = YesNoField(
        label=_("Enable manual learning"),
        initial="yes",
        help_text=_(
            "Allow super administrators to manually train Spamassassin"))

    sa_is_local = YesNoField(
        label=_("Is Spamassassin local?"),
        initial="yes",
        help_text=_(
            "Tell if Spamassassin is running on the same server than modoboa"))

    default_user = forms.CharField(
        label=_("Default user"),
        initial="amavis",
        help_text=_("Name of the user owning the default bayesian database"))

    spamd_address = forms.CharField(
        label=_("Spamd address"),
        initial="127.0.0.1",
        help_text=_("The IP address where spamd can be reached"))

    spamd_port = forms.IntegerField(
        label=_("Spamd port"),
        initial=783,
        help_text=_("The TCP port spamd is listening on"))

    domain_level_learning = YesNoField(
        label=_("Enable per-domain manual learning"),
        initial="no",
        help_text=_("Allow domain administrators to train Spamassassin "
                    "(within dedicated per-domain databases)"))

    user_level_learning = YesNoField(
        label=_("Enable per-user manual learning"),
        initial="no",
        help_text=_("Allow simple users to personally train Spamassassin "
                    "(within a dedicated database)"))

    visibility_rules = {
        "am_pdp_host": "am_pdp_mode=inet",
        "am_pdp_port": "am_pdp_mode=inet",
        "am_pdp_socket": "am_pdp_mode=unix",
        "sa_is_local": "manual_learning=yes",
        "default_user": "******",
        "spamd_address": "sa_is_local=no",
        "spamd_port": "sa_is_local=no",
        "domain_level_learning": "manual_learning=yes",
        "user_level_learning": "manual_learning=yes"
    }