def resolve_host(self): optional = [ item for item in self.OPTIONAL_HOSTS if item in self.config and self.config[item] != "none" ] for item in list(self.HOSTS) + optional: host = 'HOST_' + item self.config[host] = system.resolve_address(self.config[host])
def get_host_address(self, name): """ resolve addresses from internal dictionary or socrate system resolver """ if name in self.NET: return self.NET[name] else: return system.resolve_address(self.HOST['{}'.format(name)])
def get_server(protocol, authenticated=False): if protocol == "imap": hostname, port = extract_host_port(app.config['IMAP_ADDRESS'], 143) elif protocol == "pop3": hostname, port = extract_host_port(app.config['POP3_ADDRESS'], 110) elif protocol == "smtp": if authenticated: # We make them the same because both cases, nginx does its job hostname, port = extract_host_port(app.config['SMTP_ADDRESS'], 10025) else: hostname, port = extract_host_port(app.config['SMTP_ADDRESS'], 25) try: # test if hostname is already resolved to an ip adddress ipaddress.ip_address(hostname) except: # hostname is not an ip address - so we need to resolve it hostname = system.resolve_address(hostname) return hostname, port
#!/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.resolve_address( os.environ.get("HOST_FRONT", "front")) os.environ["IMAP_ADDRESS"] = system.resolve_address( os.environ.get("HOST_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("/defaults/default.ini", os.environ, "/data/_data_/_default_/domains/default.ini") conf.jinja("/defaults/application.ini", os.environ, "/data/_data_/_default_/configs/application.ini") conf.jinja("/defaults/php.ini", os.environ, "/etc/php7/php.ini")
def get_host_address(self, name): # if MYSERVICE_ADDRESS is defined, use this if f'{name}_ADDRESS' in os.environ: return os.environ.get(f'{name}_ADDRESS') # otherwise use the host name and resolve it return system.resolve_address(self.config[f'HOST_{name}'])
def start_podop(): os.setuid(100) url = "http://" + os.environ["ADMIN_ADDRESS"] + "/internal/postfix/" # TODO: Remove verbosity setting from Podop? run_server(0, "postfix", "/tmp/podop.socket", [("transport", "url", url + "transport/§"), ("alias", "url", url + "alias/§"), ("domain", "url", url + "domain/§"), ("mailbox", "url", url + "mailbox/§"), ("senderaccess", "url", url + "sender/access/§"), ("senderlogin", "url", url + "sender/login/§")]) # Actual startup script os.environ["FRONT_ADDRESS"] = system.resolve_address( os.environ.get("FRONT_ADDRESS", "front")) os.environ["ADMIN_ADDRESS"] = system.resolve_address( os.environ.get("ADMIN_ADDRESS", "admin")) os.environ["HOST_ANTISPAM"] = system.resolve_address( os.environ.get("HOST_ANTISPAM", "antispam:11332")) os.environ["HOST_LMTP"] = system.resolve_address( os.environ.get("HOST_LMTP", "imap:2525")) for postfix_file in glob.glob("/conf/*.cf"): conf.jinja(postfix_file, os.environ, os.path.join("/etc/postfix", os.path.basename(postfix_file))) if os.path.exists("/overrides/postfix.cf"): for line in open("/overrides/postfix.cf").read().strip().split("\n"): os.system('postconf -e "{}"'.format(line))
def test_resolve_address(self): self.assertEqual( system.resolve_address("one.one.one.one:80"), "1.1.1.1:80" )
def get_host_address(self, name): # if MYSERVICE_ADDRESS is defined, use this if '{}_ADDRESS'.format(name) in os.environ: return os.environ.get('{}_ADDRESS'.format(name)) # otherwise use the host name and resolve it return system.resolve_address(self.config['HOST_{}'.format(name)])
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.resolve_address( os.environ.get("HOST_FRONT", "front")) os.environ["REDIS_ADDRESS"] = system.resolve_address( os.environ.get("HOST_REDIS", "redis")) os.environ["ADMIN_ADDRESS"] = system.resolve_address( os.environ.get("HOST_ADMIN", "admin")) if os.environ["WEBMAIL"] != "none": os.environ["WEBMAIL_ADDRESS"] = system.resolve_address( os.environ.get("HOST_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))) # Run Podop, then postfix multiprocessing.Process(target=start_podop).start() os.system("chown mail:mail /mail")
def test_resolve_address(self): self.assertEqual(system.resolve_address("1.2.3.4.xip.io:80"), "1.2.3.4:80")
#!/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.resolve_address( os.environ.get("FRONT_ADDRESS", "front")) if "HOST_REDIS" not in os.environ: os.environ["HOST_REDIS"] = "redis" 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 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.resolve_address( os.environ.get("HOST_FRONT", "front")) os.environ["REDIS_ADDRESS"] = system.resolve_address( os.environ.get("HOST_REDIS", "redis")) if os.environ.get("ANTIVIRUS") == 'clamav': os.environ["ANTIVIRUS_ADDRESS"] = system.resolve_address( os.environ.get("HOST_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 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.resolve_address( os.environ.get("HOST_FRONT", "front")) if "HOST_REDIS" not in os.environ: os.environ["REDIS_ADDRESS"] = system.resolve_address( os.environ.get("HOST_REDIS", "redis")) 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"])
import os import logging as log import sys from socrate import system, conf 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() args["RESOLVER"] = content[content.index("nameserver") + 1] args["HOST_ADMIN"] = system.resolve_address(args.get("HOST_ADMIN", "admin")) args["HOST_ANTISPAM"] = system.resolve_address( args.get("HOST_ANTISPAM", "antispam:11334")) args["HOST_WEBMAIL"] = args.get("HOST_WEBMAIL", "webmail") if args["WEBMAIL"] != "none": args["HOST_WEBMAIL"] = system.resolve_address(args.get("HOST_WEBMAIL")) args["HOST_WEBDAV"] = args.get("HOST_WEBDAV", "webdav:5232") if args["WEBDAV"] != "none": args["HOST_WEBDAV"] = system.resolve_address(args.get("HOST_WEBDAV")) # 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",
import os import logging as log import sys from socrate import system, conf 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() args["RESOLVER"] = content[content.index("nameserver") + 1] args["ADMIN_ADDRESS"] = system.resolve_address(args.get("HOST_ADMIN", "admin")) args["ANTISPAM_ADDRESS"] = system.resolve_address(args.get("HOST_ANTISPAM", "antispam:11334")) if args["WEBMAIL"] != "none": args["WEBMAIL_ADDRESS"] = system.resolve_address(args.get("HOST_WEBMAIL", "webmail")) if args["WEBDAV"] != "none": args["WEBDAV_ADDRESS"] = system.resolve_address(args.get("HOST_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", "/certs/letsencrypt/live/mailu/privkey.pem"), "mail": ("/certs/%s" % cert_name, "/certs/%s" % keypair_name), "mail-letsencrypt": ("/certs/letsencrypt/live/mailu/fullchain.pem",