#!/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,)

Add a generate_localserver_secrets.py script that populates local_settings.py