示例#1
0
 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)])
示例#3
0
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
示例#4
0
文件: start.py 项目: rbnis/Mailu
#!/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")
示例#5
0
 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}'])
示例#6
0
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))
示例#7
0
文件: test.py 项目: micw/socrate
 def test_resolve_address(self):
     self.assertEqual(
         system.resolve_address("one.one.one.one:80"),
         "1.1.1.1:80"
     )
示例#8
0
 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)])
示例#9
0
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")
示例#10
0
 def test_resolve_address(self):
     self.assertEqual(system.resolve_address("1.2.3.4.xip.io:80"),
                      "1.2.3.4:80")
示例#11
0
文件: start.py 项目: niulinlnc/Mailu
#!/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"])
示例#12
0
文件: start.py 项目: songwenbin/Mailu
#!/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"])
示例#13
0
文件: start.py 项目: sasi05/Mailu
#!/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"])
示例#14
0
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",
示例#15
0
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",