Skip to content
Snippets Groups Projects
vendorize.py 2.56 KiB
Newer Older
  • Learn to ignore specific revisions
  • Kali Kaneko's avatar
    Kali Kaneko committed
    #!/usr/bin/env python3
    
    
    # TODO: to be deprecated! use gen-providers-json.py instead
    
    
    Kali Kaneko's avatar
    Kali Kaneko committed
    import os
    import sys
    
    from string import Template
    import configparser
    
    
    Kali Kaneko's avatar
    Kali Kaneko committed
    from provider import getDefaultProvider
    from provider import getProviderData
    
    
    Kali Kaneko's avatar
    Kali Kaneko committed
    OUTFILE = 'config.go'
    
    INFILE = '../templates/bitmaskvpn/config.go'
    
    Kali Kaneko's avatar
    Kali Kaneko committed
    CONFIGFILE = '../config/vendor.conf'
    
    Kali Kaneko's avatar
    Kali Kaneko committed
    SCRIPT_NAME = 'vendorize'
    
    
    def addCaData(data, configfile):
        provider = data.get('name').lower()
        folder, f = os.path.split(configfile)
        caFile = os.path.join(folder, 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 writeOutput(data, infile, outfile):
    
        with open(infile) as infile:
            s = Template(infile.read())
    
        with open(outfile, 'w') as outf:
            outf.write(s.substitute(data))
    
    
    def bail(msg=None):
        if not msg:
            print('Usage: {scriptname}.py <template> <config> <output>'.format(
                scriptname=SCRIPT_NAME))
        else:
            print(msg)
        sys.exit(1)
    
    
    if __name__ == "__main__":
        infile = outfile = ""
    
        if len(sys.argv) > 4:
            bail()
    
        elif len(sys.argv) == 1:
            infile = INFILE
            outfile = OUTFILE
            configfile = CONFIGFILE
        else:
            try:
                infile = sys.argv[1]
                configfile = sys.argv[2]
                outfile = sys.argv[3]
            except IndexError:
                bail()
    
    
        env_provider_conf = os.environ.get('PROVIDER_CONFIG')
        if env_provider_conf:
            if os.path.isfile(env_provider_conf):
    
    Kali Kaneko's avatar
    Kali Kaneko committed
                print("[+] Overriding provider config per "
                      "PROVIDER_CONFIG variable")
    
                configfile = env_provider_conf
    
    
    Kali Kaneko's avatar
    Kali Kaneko committed
        if not os.path.isfile(infile):
            bail('[!] Cannot find template in {path}'.format(
                path=os.path.abspath(infile)))
        elif not os.path.isfile(configfile):
            bail('[!] Cannot find config in {path}'.format(
                path=os.path.abspath(configfile)))
        else:
            print('[+] Using {path} as template'.format(
                path=os.path.abspath(infile)))
            print('[+] Using {path} as config'.format(
                path=os.path.abspath(configfile)))
    
        config = configparser.ConfigParser()
        config.read(configfile)
    
    
        provider = getDefaultProvider(config)
        data = getProviderData(provider, config)
    
    Kali Kaneko's avatar
    Kali Kaneko committed
        addCaData(data, configfile)
        writeOutput(data, infile, outfile)
    
        print('[+] Wrote configuration for {provider} to {outf}'.format(
            provider=data.get('name'),
            outf=os.path.abspath(outfile)))