From 9e1173eb9eca4e072cd7155c5db92b33bdfe3203 Mon Sep 17 00:00:00 2001 From: Leo Franchi Date: Fri, 25 Oct 2013 13:35:24 -0400 Subject: [PATCH] Add a generate_localserver_secrets.py script that populates local_settings.py (imported from commit ced1397d225efe0cf2f0eef7d43b495e3ab9b845) --- tools/generate_localserver_secrets.py | 61 +++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100755 tools/generate_localserver_secrets.py diff --git a/tools/generate_localserver_secrets.py b/tools/generate_localserver_secrets.py new file mode 100755 index 0000000000..a52a635478 --- /dev/null +++ b/tools/generate_localserver_secrets.py @@ -0,0 +1,61 @@ +#!/usr/bin/env python +# This tools generates local_settings_generated.py using the template + +import sys, os, os.path + +sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..')) +os.environ['DJANGO_SETTINGS_MODULE'] = 'zproject.settings' + +from django.utils.crypto import get_random_string +from zerver.lib.utils import generate_random_token + +SETTINGS_FILENAME = "zproject/local_settings_template.py" +OUTPUT_SETTINGS_FILENAME = "zproject/local_settings_generated.py" +CAMO_CONFIG_FILENAME = '/etc/defaults/camo' + +if not os.path.exists(SETTINGS_FILENAME): + print "Unable to find settings file at %s" % (SETTINGS_FILENAME,) + +AUTOGENERATED_SETTINGS = ['SHARED_SECRET', 'HASH_SALT', 'AVATAR_SALT', 'RABBITMQ_PASSWORD'] + +def generate_camo_config_file(camo_key): + camo_config = """ENABLED=yes +PORT=9292 +CAMO_KEY=%s +""" % (camo_key,) + with open(CAMO_CONFIG_FILENAME, 'w') as camo_file: + camo_file.write(camo_config) + print "Generated Camo config file %s" % (CAMO_CONFIG_FILENAME,) + +def generate_django_secretkey(): + # Secret key generation taken from Django's startproject.py + chars = 'abcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*(-_=+)' + return get_random_string(50, chars) + +if __name__ == '__main__': + f = open(SETTINGS_FILENAME, 'r') + lines = f.readlines() + + for idx, line in enumerate(lines): + parts = [part.strip() for part in line.split('=')] + if len(parts) != 2: + continue + + def config_line(var, value): + return "%s = '%s'\n" % (var, value) + + if parts[0] in AUTOGENERATED_SETTINGS: + lines[idx] = config_line(parts[0], generate_random_token(64)) + elif parts[0] == 'SECRET_KEY': + lines[idx] = config_line("SECRET_KEY", generate_django_secretkey()) + elif parts[0] == 'CAMO_KEY': + camo_key = get_random_string(64) + lines[idx] = config_line(parts[0], camo_key) + # Write the Camo config file directly + generate_camo_config_file(camo_key) + + out = open(OUTPUT_SETTINGS_FILENAME, 'w') + out.write("".join(lines)) + out.close() + + print "Generated %s with auto-generated secrets!" % (OUTPUT_SETTINGS_FILENAME,)