#!/usr/bin/env python3 import os import base64 import configparser from typing import Optional from aws_cdk import core from once.once_stack import OnceStack, CustomDomainStack ONCE_CONFIG_FILE = os.getenv('ONCE_CONFIG_FILE', os.path.expanduser('~/.once')) SECRET_KEY = os.getenv('SECRET_KEY') CUSTOM_DOMAIN = os.getenv('CUSTOM_DOMAIN') HOSTED_ZONE_NAME = os.getenv('HOSTED_ZONE_NAME') HOSTED_ZONE_ID = os.getenv('HOSTED_ZONE_ID') def generate_random_key() -> str: return base64.b64encode(os.urandom(128)).decode('utf-8') def generate_config(secret_key: Optional[str] = None, custom_domain: str = None, hosted_zone_name: str = None, hosted_zone_id: str = None) -> configparser.ConfigParser: config = configparser.ConfigParser() config['once'] = { 'secret_key': secret_key or generate_random_key(), } config['deployment'] = {} if all([custom_domain, hosted_zone_name, hosted_zone_id]): config['once']['base_url'] = f'https://{custom_domain}' config['deployment'] = { 'custom_domain': custom_domain, 'hosted_zone_name': hosted_zone_name, 'hosted_zone_id': hosted_zone_id } return config def get_config(config_gile: str = ONCE_CONFIG_FILE) -> configparser.ConfigParser: if not os.path.exists(ONCE_CONFIG_FILE): print(f'Generating configuration file at {ONCE_CONFIG_FILE}') with open(ONCE_CONFIG_FILE, 'w') as config_file: config = generate_config( secret_key=SECRET_KEY, custom_domain=CUSTOM_DOMAIN, hosted_zone_name=HOSTED_ZONE_NAME, hosted_zone_id=HOSTED_ZONE_ID) config.write(config_file) else: config = configparser.ConfigParser() config.read(ONCE_CONFIG_FILE) return config def main(): config = get_config() kwargs = {'secret_key': config['once']['secret_key']} if config.has_section('deployment'): kwargs.update(config['deployment']) app = core.App() once = OnceStack(app, 'once', **kwargs) app.synth() if __name__ == '__main__': main()