546 lines
14 KiB
Python
546 lines
14 KiB
Python
import random
|
|
import string
|
|
|
|
from .constants import DEFAULT_BACKUP_DIRECTORY
|
|
|
|
|
|
def make_password(length=16):
|
|
"""Create a random password."""
|
|
return "".join(
|
|
random.SystemRandom().choice(
|
|
string.ascii_letters + string.digits) for _ in range(length))
|
|
|
|
|
|
# Validators should return a tuple bool, error message
|
|
def is_email(user_input):
|
|
"""Return True in input is a valid email"""
|
|
return "@" in user_input, "Please enter a valid email"
|
|
|
|
|
|
ConfigDictTemplate = [
|
|
{
|
|
"name": "general",
|
|
"values": [
|
|
{
|
|
"option": "hostname",
|
|
"default": "mail.%(domain)s",
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"name": "antispam",
|
|
"values": [
|
|
{
|
|
"option": "enabled",
|
|
"default": "true",
|
|
"question": "Do you want to setup an antispam utility?"
|
|
},
|
|
{
|
|
"option": "type",
|
|
"default": "rspamd",
|
|
"question": "Please select your antispam utility",
|
|
"values": ["rspamd", "amavis"]
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"name": "certificate",
|
|
"values": [
|
|
{
|
|
"option": "type",
|
|
"default": "self-signed",
|
|
"customizable": True,
|
|
"question": "Please choose your certificate type",
|
|
"values": ["self-signed", "letsencrypt", "manual"],
|
|
"non_interactive_values": ["manual"],
|
|
},
|
|
{
|
|
"option": "tls_cert_file_path",
|
|
"default": ""
|
|
},
|
|
{
|
|
"option": "tls_key_file_path",
|
|
"default": ""
|
|
}
|
|
],
|
|
},
|
|
{
|
|
"name": "letsencrypt",
|
|
"if": ["certificate.type=letsencrypt"],
|
|
"values": [
|
|
{
|
|
"option": "email",
|
|
"default": "admin@example.com",
|
|
"question": (
|
|
"Please enter the mail you wish to use for "
|
|
"letsencrypt"),
|
|
"customizable": True,
|
|
"validators": [is_email]
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"name": "database",
|
|
"values": [
|
|
{
|
|
"option": "engine",
|
|
"default": "postgres",
|
|
"customizable": True,
|
|
"question": "Please choose your database engine",
|
|
"values": ["postgres", "mysql"],
|
|
},
|
|
{
|
|
"option": "host",
|
|
"default": "127.0.0.1",
|
|
},
|
|
{
|
|
"option": "install",
|
|
"default": "true",
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"name": "postgres",
|
|
"if": ["database.engine=postgres"],
|
|
"values": [
|
|
{
|
|
"option": "user",
|
|
"default": "postgres",
|
|
},
|
|
{
|
|
"option": "password",
|
|
"default": "",
|
|
"customizable": True,
|
|
"question": "Please enter postgres password",
|
|
},
|
|
]
|
|
},
|
|
{
|
|
"name": "mysql",
|
|
"if": ["database.engine=mysql"],
|
|
"values": [
|
|
{
|
|
"option": "user",
|
|
"default": "root",
|
|
},
|
|
{
|
|
"option": "password",
|
|
"default": make_password,
|
|
"customizable": True,
|
|
"question": "Please enter mysql root password"
|
|
},
|
|
{
|
|
"option": "charset",
|
|
"default": "utf8",
|
|
},
|
|
{
|
|
"option": "collation",
|
|
"default": "utf8_general_ci",
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"name": "fail2ban",
|
|
"values": [
|
|
{
|
|
"option": "enabled",
|
|
"default": "true",
|
|
},
|
|
{
|
|
"option": "config_dir",
|
|
"default": "/etc/fail2ban"
|
|
},
|
|
{
|
|
"option": "max_retry",
|
|
"default": "20"
|
|
},
|
|
{
|
|
"option": "ban_time",
|
|
"default": "3600"
|
|
},
|
|
{
|
|
"option": "find_time",
|
|
"default": "30"
|
|
},
|
|
]
|
|
},
|
|
{
|
|
"name": "modoboa",
|
|
"values": [
|
|
{
|
|
"option": "user",
|
|
"default": "modoboa",
|
|
},
|
|
{
|
|
"option": "home_dir",
|
|
"default": "/srv/modoboa",
|
|
},
|
|
{
|
|
"option": "venv_path",
|
|
"default": "%(home_dir)s/env",
|
|
},
|
|
{
|
|
"option": "instance_path",
|
|
"default": "%(home_dir)s/instance",
|
|
},
|
|
{
|
|
"option": "timezone",
|
|
"default": "Europe/Paris",
|
|
},
|
|
{
|
|
"option": "dbname",
|
|
"default": "modoboa",
|
|
},
|
|
{
|
|
"option": "dbuser",
|
|
"default": "modoboa",
|
|
},
|
|
{
|
|
"option": "dbpassword",
|
|
"default": make_password,
|
|
"customizable": True,
|
|
"question": "Please enter Modoboa db password",
|
|
},
|
|
{
|
|
"option": "extensions",
|
|
"default": ""
|
|
},
|
|
{
|
|
"option": "devmode",
|
|
"default": "false",
|
|
},
|
|
]
|
|
},
|
|
{
|
|
"name": "automx",
|
|
"values": [
|
|
{
|
|
"option": "enabled",
|
|
"default": "true",
|
|
},
|
|
{
|
|
"option": "user",
|
|
"default": "automx",
|
|
},
|
|
{
|
|
"option": "config_dir",
|
|
"default": "/etc",
|
|
},
|
|
{
|
|
"option": "home_dir",
|
|
"default": "/srv/automx",
|
|
},
|
|
{
|
|
"option": "venv_path",
|
|
"default": "%(home_dir)s/env",
|
|
},
|
|
{
|
|
"option": "instance_path",
|
|
"default": "%(home_dir)s/instance",
|
|
},
|
|
]
|
|
},
|
|
{
|
|
"name": "rspamd",
|
|
"values": [
|
|
{
|
|
"option": "enabled",
|
|
"default": "true",
|
|
},
|
|
{
|
|
"option": "user",
|
|
"default": "_rspamd",
|
|
},
|
|
{
|
|
"option": "password",
|
|
"default": make_password,
|
|
},
|
|
{
|
|
"option": "dnsbl",
|
|
"default": "true",
|
|
},
|
|
{
|
|
"option": "dkim_keys_storage_dir",
|
|
"default": "/var/lib/dkim"
|
|
},
|
|
{
|
|
"option": "key_map_path",
|
|
"default": "/var/lib/dkim/keys.path.map"
|
|
},
|
|
{
|
|
"option": "selector_map_path",
|
|
"default": "/var/lib/dkim/selectors.path.map"
|
|
},
|
|
{
|
|
"option": "greylisting",
|
|
"default": "true"
|
|
},
|
|
{
|
|
"option": "whitelist_auth",
|
|
"default": "true"
|
|
},
|
|
{
|
|
"option": "whitelist_auth_weigth",
|
|
"default": "-5"
|
|
}
|
|
],
|
|
},
|
|
{
|
|
"name": "amavis",
|
|
"if": ["antispam.enabled=true", "antispam.type=amavis"],
|
|
"values": [
|
|
{
|
|
"option": "enabled",
|
|
"default-if": "true",
|
|
"default": "false",
|
|
},
|
|
{
|
|
"option": "user",
|
|
"default": "amavis",
|
|
},
|
|
{
|
|
"option": "max_servers",
|
|
"default": "2",
|
|
},
|
|
{
|
|
"option": "dbname",
|
|
"default": "amavis",
|
|
},
|
|
{
|
|
"option": "dbuser",
|
|
"default": "amavis",
|
|
},
|
|
{
|
|
"option": "dbpassword",
|
|
"default": make_password,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"name": "clamav",
|
|
"values": [
|
|
{
|
|
"option": "enabled",
|
|
"default": "true",
|
|
},
|
|
{
|
|
"option": "user",
|
|
"default": "clamav",
|
|
},
|
|
]
|
|
},
|
|
{
|
|
"name": "dovecot",
|
|
"values": [
|
|
{
|
|
"option": "enabled",
|
|
"default": "true",
|
|
},
|
|
{
|
|
"option": "config_dir",
|
|
"default": "/etc/dovecot",
|
|
},
|
|
{
|
|
"option": "user",
|
|
"default": "dovecot",
|
|
},
|
|
{
|
|
"option": "home_dir",
|
|
"default": "/srv/vmail",
|
|
},
|
|
{
|
|
"option": "mailboxes_owner",
|
|
"default": "vmail",
|
|
},
|
|
{
|
|
"option": "extra_protocols",
|
|
"default": "",
|
|
},
|
|
{
|
|
"option": "postmaster_address",
|
|
"default": "postmaster@%(domain)s",
|
|
},
|
|
]
|
|
},
|
|
{
|
|
"name": "nginx",
|
|
"values": [
|
|
{
|
|
"option": "enabled",
|
|
"default": "true",
|
|
},
|
|
{
|
|
"option": "config_dir",
|
|
"default": "/etc/nginx",
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"name": "razor",
|
|
"values": [
|
|
{
|
|
"option": "enabled",
|
|
"default": "false",
|
|
},
|
|
{
|
|
"option": "config_dir",
|
|
"default": "/etc/razor",
|
|
},
|
|
]
|
|
},
|
|
{
|
|
"name": "postfix",
|
|
"values": [
|
|
{
|
|
"option": "enabled",
|
|
"default": "true",
|
|
},
|
|
{
|
|
"option": "config_dir",
|
|
"default": "/etc/postfix",
|
|
},
|
|
{
|
|
"option": "message_size_limit",
|
|
"default": "11534336",
|
|
},
|
|
{
|
|
"option": "dhe_group",
|
|
"default": "4096"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"name": "postwhite",
|
|
"if": ["antispam.enabled=true", "antispam.type=amavis"],
|
|
"values": [
|
|
{
|
|
"option": "enabled",
|
|
"default-if": "true",
|
|
"default": "false",
|
|
},
|
|
{
|
|
"option": "config_dir",
|
|
"default": "/etc",
|
|
},
|
|
]
|
|
},
|
|
{
|
|
"name": "spamassassin",
|
|
"if": ["antispam.enabled=true", "antispam.type=amavis"],
|
|
"values": [
|
|
{
|
|
"option": "enabled",
|
|
"default-if": "true",
|
|
"default": "false",
|
|
},
|
|
{
|
|
"option": "config_dir",
|
|
"default": "/etc/mail/spamassassin",
|
|
},
|
|
{
|
|
"option": "dbname",
|
|
"default": "spamassassin",
|
|
},
|
|
{
|
|
"option": "dbuser",
|
|
"default": "spamassassin",
|
|
},
|
|
{
|
|
"option": "dbpassword",
|
|
"default": make_password,
|
|
"customizable": True,
|
|
"question": "Please enter spamassassin db password"
|
|
},
|
|
]
|
|
},
|
|
{
|
|
"name": "uwsgi",
|
|
"values": [
|
|
{
|
|
"option": "enabled",
|
|
"default": "true",
|
|
},
|
|
{
|
|
"option": "config_dir",
|
|
"default": "/etc/uwsgi",
|
|
},
|
|
{
|
|
"option": "nb_processes",
|
|
"default": "4",
|
|
},
|
|
]
|
|
},
|
|
{
|
|
"name": "radicale",
|
|
"values": [
|
|
{
|
|
"option": "enabled",
|
|
"default": "true",
|
|
},
|
|
{
|
|
"option": "user",
|
|
"default": "radicale",
|
|
},
|
|
{
|
|
"option": "config_dir",
|
|
"default": "/etc/radicale",
|
|
},
|
|
{
|
|
"option": "home_dir",
|
|
"default": "/srv/radicale",
|
|
},
|
|
{
|
|
"option": "venv_path",
|
|
"default": "%(home_dir)s/env",
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"name": "opendkim",
|
|
"if": ["antispam.enabled=true", "antispam.type=amavis"],
|
|
"values": [
|
|
{
|
|
"option": "enabled",
|
|
"default-if": "true",
|
|
"default": "false",
|
|
},
|
|
{
|
|
"option": "user",
|
|
"default": "opendkim",
|
|
},
|
|
{
|
|
"option": "config_dir",
|
|
"default": "/etc",
|
|
},
|
|
{
|
|
"option": "port",
|
|
"default": "12345"
|
|
},
|
|
{
|
|
"option": "keys_storage_dir",
|
|
"default": "/var/lib/dkim"
|
|
},
|
|
{
|
|
"option": "dbuser",
|
|
"default": "opendkim",
|
|
},
|
|
{
|
|
"option": "dbpassword",
|
|
"default": make_password,
|
|
"customizable": True,
|
|
"question": "Please enter OpenDKIM db password"
|
|
},
|
|
|
|
]
|
|
},
|
|
{
|
|
"name": "backup",
|
|
"values": [
|
|
{
|
|
"option": "default_path",
|
|
"default": DEFAULT_BACKUP_DIRECTORY
|
|
}
|
|
]
|
|
}
|
|
]
|