blob: 20b0230458cdae6a3f815685c877f75959060bb6 [file]
import logging
import pathlib
import secrets
import jinja2
import yaml
CONFIG_MSG_TEMPLATE = jinja2.Template("""
Log into Caldera with the following admin credentials:
Red:
{%- if users.red.red %}
USERNAME: red
PASSWORD: {{ users.red.red }}
{%- endif %}
API_TOKEN: {{ api_key_red }}
Blue:
{%- if users.blue.blue %}
USERNAME: blue
PASSWORD: {{ users.blue.blue }}
{%- endif %}
API_TOKEN: {{ api_key_blue }}
To modify these values, edit the {{ config_path }} file.
""")
def log_config_message(config_path):
with pathlib.Path(config_path).open('r') as fle:
config = yaml.safe_load(fle)
logging.info(CONFIG_MSG_TEMPLATE.render(config_path=str(config_path), **config))
def make_secure_config():
with open('conf/default.yml', 'r') as fle:
config = yaml.safe_load(fle)
secret_options = ('api_key_blue', 'api_key_red', 'crypt_salt', 'encryption_key')
for option in secret_options:
config[option] = secrets.token_urlsafe()
config['users'] = dict(red=dict(red=secrets.token_urlsafe()),
blue=dict(blue=secrets.token_urlsafe()))
return config
def ensure_local_config():
"""
Checks if a local.yml config file exists. If not, generates a new local.yml file using secure random values.
"""
local_conf_path = pathlib.Path('conf/local.yml')
if local_conf_path.exists():
return
logging.info('Creating new secure config in %s' % local_conf_path)
with local_conf_path.open('w') as fle:
yaml.safe_dump(make_secure_config(), fle, default_flow_style=False)
log_config_message(local_conf_path)