import ipaddress args = os.environ.copy() log.basicConfig(stream=sys.stderr, level=args.get("LOG_LEVEL", "WARNING")) # Get the first DNS server with open("/etc/resolv.conf") as handle: content = handle.read().split() resolver_ip = content[content.index("nameserver") + 1] if type(ipaddress.ip_address(resolver_ip)) is ipaddress.IPv6Address: args["RESOLVER"] = "[{}]".format(resolver_ip) else: args["RESOLVER"] = resolver_ip args["ADMIN_ADDRESS"] = system.get_host_address_from_environment( "ADMIN", "admin") args["ANTISPAM_WEBUI_ADDRESS"] = system.get_host_address_from_environment( "ANTISPAM_WEBUI", "antispam:11334") if args["WEBMAIL"] != "none": args["WEBMAIL_ADDRESS"] = system.get_host_address_from_environment( "WEBMAIL", "webmail") if args["WEBDAV"] != "none": args["WEBDAV_ADDRESS"] = system.get_host_address_from_environment( "WEBDAV", "webdav:5232") # TLS configuration cert_name = os.getenv("TLS_CERT_FILENAME", default="cert.pem") keypair_name = os.getenv("TLS_KEYPAIR_FILENAME", default="key.pem") args["TLS"] = { "cert": ("/certs/%s" % cert_name, "/certs/%s" % keypair_name), "letsencrypt": ("/certs/letsencrypt/live/mailu/fullchain.pem",
("senderlogin", "url", url + "sender/login/§")]) def is_valid_postconf_line(line): return not line.startswith("#") \ and not line == '' def get_outclean_host(): hostnames = os.environ["HOSTNAMES"] if hostnames: return hostnames.split(",")[0] # Actual startup script os.environ["FRONT_ADDRESS"] = system.get_host_address_from_environment( "FRONT", "front") os.environ["ADMIN_ADDRESS"] = system.get_host_address_from_environment( "ADMIN", "admin") os.environ[ "ANTISPAM_MILTER_ADDRESS"] = system.get_host_address_from_environment( "ANTISPAM_MILTER", "antispam:11332") os.environ["LMTP_ADDRESS"] = system.get_host_address_from_environment( "LMTP", "imap:2525") # Advanced setting to set mail server as originating message IP os.environ["HOST_OUTCLEAN"] = get_outclean_host() os.environ["OUTCLEAN_ADDRESS"] = system.get_host_address_from_environment( "OUTCLEAN", "") for postfix_file in glob.glob("/conf/*.cf"): conf.jinja(postfix_file, os.environ,
level=os.environ.get("LOG_LEVEL", "WARNING")) def start_podop(): os.setuid(8) url = "http://" + os.environ["ADMIN_ADDRESS"] + "/internal/dovecot/§" run_server(0, "dovecot", "/tmp/podop.socket", [ ("quota", "url", url), ("auth", "url", url), ("sieve", "url", url), ]) # Actual startup script os.environ["FRONT_ADDRESS"] = system.get_host_address_from_environment( "FRONT", "front") os.environ["REDIS_ADDRESS"] = system.get_host_address_from_environment( "REDIS", "redis") os.environ["ADMIN_ADDRESS"] = system.get_host_address_from_environment( "ADMIN", "admin") os.environ[ "ANTISPAM_WEBUI_ADDRESS"] = system.get_host_address_from_environment( "ANTISPAM_WEBUI", "antispam:11334") if os.environ["WEBMAIL"] != "none": os.environ["WEBMAIL_ADDRESS"] = system.get_host_address_from_environment( "WEBMAIL", "webmail") for dovecot_file in glob.glob("/conf/*.conf"): conf.jinja(dovecot_file, os.environ, os.path.join("/etc/dovecot", os.path.basename(dovecot_file)))
#!/usr/bin/python3 import os import glob import logging as log import sys from socrate import system, conf log.basicConfig(stream=sys.stderr, level=os.environ.get("LOG_LEVEL", "WARNING")) # Actual startup script os.environ["FRONT_ADDRESS"] = system.get_host_address_from_environment( "FRONT", "front") os.environ["REDIS_ADDRESS"] = system.get_host_address_from_environment( "REDIS", "redis") if os.environ.get("ANTIVIRUS") == 'clamav': os.environ["ANTIVIRUS_ADDRESS"] = system.get_host_address_from_environment( "ANTIVIRUS", "antivirus:3310") for rspamd_file in glob.glob("/conf/*"): conf.jinja( rspamd_file, os.environ, os.path.join("/etc/rspamd/local.d", os.path.basename(rspamd_file))) # Run rspamd os.execv("/usr/bin/rspamd", ["rspamd", "-i", "-f"])
log.basicConfig(stream=sys.stderr, level=os.environ.get("LOG_LEVEL", "WARNING")) def start_podop(): os.setuid(8) url = "http://" + os.environ["ADMIN_ADDRESS"] + "/internal/dovecot/§" run_server(0, "dovecot", "/tmp/podop.socket", [ ("quota", "url", url), ("auth", "url", url), ("sieve", "url", url), ]) # Actual startup script os.environ["FRONT_ADDRESS"] = system.get_host_address_from_environment( "FRONT", "front") os.environ["ADMIN_ADDRESS"] = system.get_host_address_from_environment( "ADMIN", "admin") os.environ[ "ANTISPAM_WEBUI_ADDRESS"] = system.get_host_address_from_environment( "ANTISPAM_WEBUI", "antispam:11334") for dovecot_file in glob.glob("/conf/*.conf"): conf.jinja(dovecot_file, os.environ, os.path.join("/etc/dovecot", os.path.basename(dovecot_file))) os.makedirs("/conf/bin", exist_ok=True) for script_file in glob.glob("/conf/*.script"): out_file = os.path.join( "/conf/bin/", os.path.basename(script_file).replace('.script', ''))
#!/usr/bin/python3 import os import glob import logging as log import sys from socrate import system, conf log.basicConfig(stream=sys.stderr, level=os.environ.get("LOG_LEVEL", "WARNING")) # Actual startup script os.environ["REDIS_ADDRESS"] = system.get_host_address_from_environment( "REDIS", "redis") os.environ["ADMIN_ADDRESS"] = system.get_host_address_from_environment( "ADMIN", "admin") if os.environ.get("ANTIVIRUS") == 'clamav': os.environ["ANTIVIRUS_ADDRESS"] = system.get_host_address_from_environment( "ANTIVIRUS", "antivirus:3310") for rspamd_file in glob.glob("/conf/*"): conf.jinja( rspamd_file, os.environ, os.path.join("/etc/rspamd/local.d", os.path.basename(rspamd_file))) # Run rspamd os.execv("/usr/sbin/rspamd", ["rspamd", "-i", "-f"])
#!/usr/bin/python3 import os import shutil import logging as log import sys from socrate import system, conf log.basicConfig(stream=sys.stderr, level=os.environ.get("LOG_LEVEL", "WARNING")) # Actual startup script os.environ["FRONT_ADDRESS"] = system.get_host_address_from_environment( "FRONT", "front") os.environ["IMAP_ADDRESS"] = system.get_host_address_from_environment( "IMAP", "imap") os.environ["MAX_FILESIZE"] = str( int(int(os.environ.get("MESSAGE_SIZE_LIMIT")) * 0.66 / 1048576)) base = "/data/_data_/_default_/" shutil.rmtree(base + "domains/", ignore_errors=True) os.makedirs(base + "domains", exist_ok=True) os.makedirs(base + "configs", exist_ok=True) conf.jinja("/default.ini", os.environ, "/data/_data_/_default_/domains/default.ini") conf.jinja("/application.ini", os.environ, "/data/_data_/_default_/configs/application.ini") conf.jinja("/php.ini", os.environ, "/usr/local/etc/php/conf.d/rainloop.ini")