From bc4f7b5837c9cd475858742d810023e1d9fc5d64 Mon Sep 17 00:00:00 2001 From: Kali Kaneko Date: Tue, 17 Sep 2019 19:03:03 -0600 Subject: add simple provider.json --- .gitignore | 1 + Makefile | 3 ++- config/demo.yaml | 7 ++++++ main.go | 4 +++- scripts/simplevpn.py | 41 +++++++++++++++++++++++++---------- scripts/templates/provider.json.jinja | 37 +++++++++++++++++++++++++++++++ 6 files changed, 80 insertions(+), 13 deletions(-) create mode 100644 scripts/templates/provider.json.jinja diff --git a/.gitignore b/.gitignore index ce9fb40..f352413 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ vpnweb deploy/* +.mypy_cache *.swp *.swo diff --git a/Makefile b/Makefile index d2b9fb2..06ed11c 100644 --- a/Makefile +++ b/Makefile @@ -9,7 +9,8 @@ gen-shapeshifter: scripts/gen-shapeshifter-state.py deploy/shapeshifter-state gen-provider: mkdir -p deploy/public/3 - python3 scripts/simplevpn.py config/demo.yaml scripts/templates/eip-service.json.jinja --obfs4_state deploy/shapeshifter-state > deploy/public/3/eip-service.json + python3 scripts/simplevpn.py --file=eip --config=config/demo.yaml --template=scripts/templates/eip-service.json.jinja --obfs4_state deploy/shapeshifter-state > deploy/public/3/eip-service.json + python3 scripts/simplevpn.py --file=provider --config=config/demo.yaml --template=scripts/templates/provider.json.jinja > deploy/public/provider.json populate: cp test/1/* public/1/ cp test/files/ca.crt public/ diff --git a/config/demo.yaml b/config/demo.yaml index 5743304..91d0430 100644 --- a/config/demo.yaml +++ b/config/demo.yaml @@ -31,3 +31,10 @@ gateways: - transports: - [ "openvpn", "tcp", "443"] - [ "obfs4", "tcp", "23042"] + +provider: + - name: "demo provider" + - description: "this is a demo provider" + - domain: pt.demo.bitmask.net:8000 + - api_uri: pt.demo.bitmask.net:8000 + - fingerprint: "SHA256: 13A6456F7A303E55B8E575D7C53A967C6A524307E69A47A86DA232830AD283DB" diff --git a/main.go b/main.go index a66a281..8992dae 100644 --- a/main.go +++ b/main.go @@ -66,10 +66,12 @@ func main() { // add routes here http.HandleFunc("/3/cert", ch.certResponder) - httpFileHandler("/3/ca.crt", "./public/ca.crt") httpFileHandler("/3/configs.json", "./public/3/configs.json") httpFileHandler("/3/service.json", "./public/3/service.json") httpFileHandler("/3/config/eip-service.json", "./public/3/eip-service.json") + httpFileHandler("/provider.json", "./public/provider.json") + httpFileHandler("/ca.crt", "./public/ca.crt") + httpFileHandler("/3/ca.crt", "./public/ca.crt") pstr := ":" + strconv.Itoa(*port) diff --git a/scripts/simplevpn.py b/scripts/simplevpn.py index ead834d..97892ed 100755 --- a/scripts/simplevpn.py +++ b/scripts/simplevpn.py @@ -12,6 +12,7 @@ class EIPConfig: self.openvpn = dict() self.locations = dict() self.gateways = dict() + self.provider = dict() def parseConfig(provider_config): @@ -24,6 +25,7 @@ def parseConfig(provider_config): eip.locations.update(yamlIdListToDict(loc)) for gw in config['gateways']: eip.gateways.update(yamlIdListToDict(gw)) + eip.provider.update(yamlListToDict(config['provider'])) return eip @@ -60,25 +62,42 @@ def dictToStr(d): return d -if __name__ == "__main__": - parser = argparse.ArgumentParser() - parser.add_argument("provider_config") - parser.add_argument("eip_template") - parser.add_argument("--obfs4_state") - args = parser.parse_args() +def produceEipConfig(config, obfs4_state, template): + config = parseConfig(os.path.abspath(config)) - config = parseConfig(os.path.abspath(args.provider_config)) - - if args.obfs4_state: + if obfs4_state: obfs4_cert = open( - args.obfs4_state + '/obfs4_cert.txt').read().rstrip() + obfs4_state + '/obfs4_cert.txt').read().rstrip() else: obfs4_cert = None patchObfs4Cert(config, obfs4_cert) - t = Template(open(args.eip_template).read()) + t = Template(open(template).read()) print(t.render( locations=config.locations, gateways=config.gateways, openvpn=dictToStr(config.openvpn))) + + +def produceProviderConfig(config, template): + config = parseConfig(os.path.abspath(config)) + t = Template(open(template).read()) + print(t.render( + provider=config.provider)) + + +if __name__ == "__main__": + parser = argparse.ArgumentParser() + parser.add_argument("-f", "--file") + parser.add_argument("-c", "--config") + parser.add_argument("-t", "--template") + parser.add_argument("--obfs4_state") + args = parser.parse_args() + + if args.file == "eip": + produceEipConfig(args.config, args.obfs4_state, args.template) + elif args.file == "provider": + produceProviderConfig(args.config, args.template) + else: + print("unknown type of file:", args.file) diff --git a/scripts/templates/provider.json.jinja b/scripts/templates/provider.json.jinja new file mode 100644 index 0000000..f54a3c0 --- /dev/null +++ b/scripts/templates/provider.json.jinja @@ -0,0 +1,37 @@ +{ + "api_uri": "https://{{ provider.api_uri }}", + "api_version": "3", + "ca_cert_fingerprint": "{{ provider.fingerprint }}", + "ca_cert_uri": "https://{{ provider.domain }}/ca.crt", + "default_language": "en", + "description": { + "en": "{{ provider.description }}" + }, + "domain": "{{ provider.domain }}", + "enrollment_policy": "open", + "languages": [ + "en" + ], + "name": { + "en": "{{ provider.name }}" + }, + "service": { + "allow_anonymous": true, + "allow_free": true, + "allow_limited_bandwidth": false, + "allow_paid": false, + "allow_registration": false, + "allow_unlimited_bandwidth": true, + "bandwidth_limit": 102400, + "default_service_level": 1, + "levels": { + "1": { + "description": "Please donate.", + "name": "free" + } + } + }, + "services": [ + "openvpn" + ] +} -- cgit v1.2.3