Skip to content
Snippets Groups Projects
gen-providers-json 1.84 KiB
Newer Older
  • Learn to ignore specific revisions
  • #!/usr/bin/env python3
    
    import configparser
    import json
    import os
    import sys
    
    
    Kali Kaneko's avatar
    Kali Kaneko committed
    from provider import getDefaultProviders
    
    from provider import getProviderData
    
    OUTFILE = 'providers.json'
    SCRIPT_NAME = 'gen-providers-json'
    
    
    def generateProvidersJSON(configPath, outputJSONPath):
        print("output:", outputJSONPath)
        config = configparser.ConfigParser()
        config.read(configPath)
    
        # TODO as a first step, we just get the defaultProvider.
        # For multi-provider, just add more providers to the dict
    
        providers = {}
    
    Kali Kaneko's avatar
    Kali Kaneko committed
        defaultProviders = getDefaultProviders(config)
    
    Kali Kaneko's avatar
    Kali Kaneko committed
        providers['default'] = defaultProviders[0]
    
        providers['providers'] = []
    
    Kali Kaneko's avatar
    Kali Kaneko committed
        for p in defaultProviders:
            providerData = getProviderData(p, config)
            addCaData(providerData, configPath)
            providers['providers'].append(providerData)
    
        os.makedirs(os.path.dirname(outputJSONPath), exist_ok=True)
    
        with open(outputJSONPath, 'w', encoding='utf-8') as f:
            json.dump(providers, f, ensure_ascii=False, indent=4)
    
    def addCaData(data, configfile):
        provider = data.get('name').lower()
        folder, f = os.path.split(configfile)
    
        caFile = os.path.join(folder, provider, provider + '-ca.crt')
    
        if not os.path.isfile(caFile):
            bail('[!] Cannot find CA file in {path}'.format(path=caFile))
        with open(caFile) as ca:
            data['caCertString'] = ca.read().strip()
    
    def bail(msg=None):
        if not msg:
            print("ERROR: not enough arguments!")
    
            print('Usage: {scriptname}.py <output>'.format(
    
                scriptname=SCRIPT_NAME))
        else:
            print(msg)
        sys.exit(1)
    
    if __name__ == "__main__":
        print("[+] Generating providers.json...")
    
        if len(sys.argv) != 2:
    
            bail()
    
    
        VENDOR_PATH = os.environ.get('VENDOR_PATH')
        conf = os.path.join(VENDOR_PATH, 'vendor.conf')
        output = sys.argv[1]
        generateProvidersJSON(conf, output)