From 0196eda3f1c5e41e5af62edb098021e0ffe6a464 Mon Sep 17 00:00:00 2001 From: Paul Eggleton Date: Mon, 4 Mar 2019 10:14:48 +1300 Subject: [PATCH] dockersetup: enable error report emails Error reports get emailed to the addresses specified in the ADMINS setting, but up until now dockersetup wasn't setting this and so the details of any internal error were not visible anywhere. If we're not updating, prompt the user for an email address early in the process, and use this for the ADMINS setting, the superuser account, and Let's Encrypt (if selected). Signed-off-by: Paul Eggleton --- dockersetup.py | 45 +++++++++++++++++++++++++++++++++++++-------- 1 file changed, 37 insertions(+), 8 deletions(-) diff --git a/dockersetup.py b/dockersetup.py index 67afd99..5a899c1 100755 --- a/dockersetup.py +++ b/dockersetup.py @@ -272,6 +272,28 @@ def edit_nginx_ssl_conf(hostname, https_port, certdir, certfile, keyfile): writefile("docker/nginx-ssl-edited.conf", ''.join(newlines)) +def edit_settings_py(emailaddr): + filedata = readfile('docker/settings.py') + newlines = [] + lines = filedata.splitlines() + in_admins = False + for line in lines: + if in_admins: + if line.strip() == ')': + in_admins = False + continue + elif line.lstrip().startswith('ADMINS = ('): + if line.count('(') > line.count(')'): + in_admins = True + newlines.append("ADMINS = (\n") + if emailaddr: + newlines.append(" ('Admin', '%s'),\n" % emailaddr) + newlines.append(")\n") + continue + newlines.append(line + "\n") + writefile("docker/settings.py", ''.join(newlines)) + + def edit_dockerfile_web(hostname, no_https): filedata = readfile('Dockerfile.web') newlines = [] @@ -287,14 +309,10 @@ def edit_dockerfile_web(hostname, no_https): writefile("Dockerfile.web", ''.join(newlines)) -def setup_https(hostname, http_port, https_port, letsencrypt, cert, cert_key): - emailaddr = None +def setup_https(hostname, http_port, https_port, letsencrypt, cert, cert_key, emailaddr): local_cert_dir = os.path.abspath('docker/certs') container_cert_dir = '/opt/cert' if letsencrypt: - # Get email address - emailaddr = input('Enter your email address (for letsencrypt): ') - # Create dummy cert container_cert_dir = '/etc/letsencrypt' letsencrypt_cert_subdir = 'live/' + hostname @@ -482,6 +500,15 @@ except KeyboardInterrupt: print('') sys.exit(2) +if not updatemode: + # Get email address + print('') + if letsencrypt: + print('You will now be asked for an email address. This will be used for the superuser account, to send error reports to and for Let\'s Encrypt.') + else: + print('You will now be asked for an email address. This will be used for the superuser account and to send error reports to.') + emailaddr = input('Enter your email address: ') + if reinstmode: return_code = subprocess.call("docker-compose down -v", shell=True) @@ -495,8 +522,10 @@ if not updatemode: edit_dockerfile_web(hostname, no_https) + edit_settings_py(emailaddr) + if not no_https: - setup_https(hostname, http_port, https_port, letsencrypt, cert, cert_key) + setup_https(hostname, http_port, https_port, letsencrypt, cert, cert_key, emailaddr) ## Start up containers return_code = subprocess.call("docker-compose up -d --build", shell=True) @@ -582,8 +611,8 @@ if not updatemode: return_code = subprocess.call("docker-compose run --rm layersapp /opt/layerindex/layerindex/tools/site_name.py %s 'OpenEmbedded Layer Index'" % hostname, shell=True) ## For a fresh database, create an admin account - print("Creating database superuser. Input user name, email, and password when prompted.") - return_code = subprocess.call("docker-compose run --rm layersapp /opt/layerindex/manage.py createsuperuser", shell=True) + print("Creating database superuser. Input user name and password when prompted.") + return_code = subprocess.call("docker-compose run --rm layersapp /opt/layerindex/manage.py createsuperuser --email %s" % emailaddr, shell=True) if return_code != 0: print("Creating superuser failed") sys.exit(1)