78 lines
2.7 KiB
Python
78 lines
2.7 KiB
Python
"""Postfix related tools."""
|
|
|
|
import os
|
|
|
|
from .. import package
|
|
from .. import utils
|
|
|
|
from . import base
|
|
|
|
|
|
class Postfix(base.Installer):
|
|
|
|
"""Postfix installer."""
|
|
|
|
appname = "postfix"
|
|
packages = {
|
|
"deb": ["postfix"],
|
|
"rpm": ["postfix"],
|
|
}
|
|
config_files = ["main.cf", "master.cf"]
|
|
|
|
def get_packages(self):
|
|
"""Additional packages."""
|
|
if package.backend.FORMAT == "deb":
|
|
packages = ["postfix-{}".format(self.db_driver)]
|
|
else:
|
|
packages = []
|
|
return super(Postfix, self).get_packages() + packages
|
|
|
|
def install_packages(self):
|
|
"""Preconfigure postfix package installation."""
|
|
package.backend.preconfigure(
|
|
"postfix", "main_mailer_type", "select", "No configuration")
|
|
super(Postfix, self).install_packages()
|
|
|
|
def get_template_context(self):
|
|
"""Additional variables."""
|
|
context = super(Postfix, self).get_template_context()
|
|
context.update({
|
|
"db_driver": self.db_driver,
|
|
"dovecot_mailboxes_owner": self.config.get(
|
|
"dovecot", "mailboxes_owner"),
|
|
"modoboa_venv_path": self.config.get(
|
|
"modoboa", "venv_path"),
|
|
"modoboa_instance_path": self.config.get(
|
|
"modoboa", "instance_path"),
|
|
})
|
|
return context
|
|
|
|
def post_run(self):
|
|
"""Additional tasks."""
|
|
venv_path = self.config.get("modoboa", "venv_path")
|
|
python_path = os.path.join(venv_path, "bin", "python")
|
|
script_path = os.path.join(venv_path, "bin", "modoboa-admin.py")
|
|
db_url = "{}://{}:{}@{}/{}".format(
|
|
self.dbengine, self.config.get("modoboa", "dbuser"),
|
|
self.config.get("modoboa", "dbpassword"),
|
|
self.dbhost, self.config.get("modoboa", "dbname"))
|
|
extensions = self.config.get("modoboa", "extensions")
|
|
exts_with_maps = ["modoboa-admin", "modoboa-admin-relaydomains",
|
|
"modoboa-postfix-autoreply"]
|
|
if extensions == "all":
|
|
extensions = exts_with_maps
|
|
else:
|
|
extensions = [ext for ext in exts_with_maps if ext in extensions]
|
|
if not extensions:
|
|
return
|
|
cmd = (
|
|
"{} {} postfix_maps --dbtype {} --extensions {} --dburl {} {}"
|
|
.format(python_path, script_path, self.dbengine,
|
|
" ".join(extensions), db_url, self.config_dir))
|
|
utils.exec_cmd(cmd)
|
|
|
|
# Generate EDH parameters
|
|
if not os.path.exists("{}/dh2048.pem".format(self.config_dir)):
|
|
cmd = "openssl dhparam -out dh2048.pem 2048"
|
|
utils.exec_cmd(cmd, cwd=self.config_dir)
|