From 481bd7db1d9c3937373c643d6d6aa3164b179839 Mon Sep 17 00:00:00 2001 From: "kali kaneko (leap communications)" Date: Fri, 9 Oct 2020 22:35:45 +0200 Subject: [pkg] some extra branding refactor --- Makefile | 38 +++++++++---------- branding/scripts/gen-providers-json | 62 +++++++++++++++++++++++++++++++ branding/scripts/gen-providers-json.py | 64 -------------------------------- branding/scripts/generate-debian | 37 ++++++++++++++++++ branding/scripts/generate-debian.py | 43 --------------------- branding/scripts/generate-osx.py | 44 ---------------------- branding/scripts/generate-snap | 38 +++++++++++++++++++ branding/scripts/generate-snap.py | 43 --------------------- branding/scripts/generate-vendor-make | 53 ++++++++++++++++++++++++++ branding/scripts/generate-vendor-make.py | 58 ----------------------------- branding/scripts/generate-win.py | 44 ---------------------- branding/scripts/provider.py | 9 +++-- 12 files changed, 213 insertions(+), 320 deletions(-) create mode 100755 branding/scripts/gen-providers-json delete mode 100644 branding/scripts/gen-providers-json.py create mode 100755 branding/scripts/generate-debian delete mode 100755 branding/scripts/generate-debian.py delete mode 100755 branding/scripts/generate-osx.py create mode 100755 branding/scripts/generate-snap delete mode 100755 branding/scripts/generate-snap.py create mode 100755 branding/scripts/generate-vendor-make delete mode 100755 branding/scripts/generate-vendor-make.py delete mode 100755 branding/scripts/generate-win.py diff --git a/Makefile b/Makefile index f2c462d..1483a9f 100644 --- a/Makefile +++ b/Makefile @@ -78,8 +78,8 @@ EXTRA_GO_LDFLAGS = "-H windowsgui" endif golib: - # TODO stop building golib in gui/build.sh, it's redundant. - # we should port the buildGoLib parts of the gui/build.sh script here + # TODO port the buildGoLib parts of the gui/build.sh script here (issue #363) + # or at least call that function from here -- @echo "doing nothing" build_gui: @@ -90,8 +90,7 @@ build: golib build_helper build_openvpn build_gui build_helper: @echo "PLATFORM: ${PLATFORM}" @mkdir -p build/bin/${PLATFORM} - - go build -o build/bin/${PLATFORM}/bitmask-helper -ldflags "-X main.AppName=${APPNAME} -X main.Version=${VERSION} ${EXTRA_GO_LDFLAGS}" ./cmd/bitmask-helper/ + @go build -o build/bin/${PLATFORM}/bitmask-helper -ldflags "-X main.AppName=${APPNAME} -X main.Version=${VERSION} ${EXTRA_GO_LDFLAGS}" ./cmd/bitmask-helper/ @echo "build helper done." build_openvpn: @@ -100,15 +99,13 @@ build_openvpn: debug_installer: @VERSION=${VERSION} ${SCRIPTS}/gen-qtinstaller osx ${INSTALLER} -build_installer: # TODO re-add check_qtifw build - echo "mkdir osx data" +build_installer: check_qtifw build @mkdir -p ${INST_DATA} @cp -r ${TEMPLATES}/qtinstaller/packages ${INSTALLER} @cp -r ${TEMPLATES}/qtinstaller/installer.pro ${INSTALLER} @cp -r ${TEMPLATES}/qtinstaller/config ${INSTALLER} ifeq (${PLATFORM}, darwin) @mkdir -p ${INST_DATA}/helper - # TODO need to write this @VERSION=${VERSION} ${SCRIPTS}/gen-qtinstaller osx ${INSTALLER} @cp "${TEMPLATES}/osx/bitmask.pf.conf" ${INST_DATA}helper/bitmask.pf.conf @cp "${TEMPLATES}/osx/client.up.sh" ${INST_DATA} @@ -120,9 +117,9 @@ ifeq (${PLATFORM}, darwin) # FIXME our static openvpn build fails with an "Assertion failed at crypto.c". Needs to be fixed!!! - kali # a working (old) version: #@curl -L https://downloads.leap.se/thirdparty/osx/openvpn/openvpn -o build/${PROVIDER}/staging/openvpn-osx - #@cp $(OPENVPN_BIN) ${INST_DATA}/openvpn.leap - @echo "WARNING: workaround for broken static build. Shipping homebrew dynamically linked instead" + #FIXME FIXME @cp $(OPENVPN_BIN) ${INST_DATA}/openvpn.leap @rm -f ${INST_DATA}openvpn.leap && cp /usr/local/bin/openvpn ${OSX_DATA}openvpn.leap + @echo "WARNING: workaround for broken static build. Shipping homebrew dynamically linked instead" @echo "[+] Running macdeployqt" @macdeployqt ${QTBUILD}/release/${PROVIDER}-vpn.app ${MACDEPLOYQT_OPTS} @cp -r "${QTBUILD}/release/${TARGET}.app"/ ${OSX_DATA}/ @@ -159,7 +156,7 @@ PLATFORM_WIN = PLATFORM=windows EXTRA_LDFLAGS_WIN = EXTRA_LDFLAGS="-H windowsgui" build_cross_win: @echo "[+] Cross-building for windows..." - $(CROSS_WIN_FLAGS) $(PLATFORM_WIN) $(EXTRA_LDFLAGS_WIN) $(MAKE) _buildparts + @$(CROSS_WIN_FLAGS) $(PLATFORM_WIN) $(EXTRA_LDFLAGS_WIN) $(MAKE) _buildparts # workaround for helper: we use the go compiler @echo "[+] Compiling helper with the Go compiler to work around missing stdout bug..." cd cmd/bitmask-helper && GOOS=windows GOARCH=386 go build -ldflags "-X main.version=`git describe --tags` -H windowsgui" -o ../../build/bin/windows/bitmask-helper-go @@ -213,12 +210,12 @@ endif vendor: gen_providers_json prepare_templates gen_pkg_snap gen_pkg_deb gen_providers_json: - @python3 branding/scripts/gen-providers-json.py branding/config/vendor.conf gui/providers/providers.json + @VENDOR_PATH=${VENDOR_PATH} branding/scripts/gen-providers-json gui/providers/providers.json -prepare_templates: generate relink_default tgz +prepare_templates: generate tgz @mkdir -p build/${PROVIDER}/bin/ deploy @cp ${TEMPLATES}/makefile/Makefile build/${PROVIDER}/Makefile - @VERSION=${VERSION} PROVIDER_CONFIG=${PROVIDER_CONFIG} ${SCRIPTS}/generate-vendor-make.py build/${PROVIDER}/vendor.mk + @VERSION=${VERSION} VENDOR_PATH=${VENDOR_PATH} ${SCRIPTS}/generate-vendor-make build/${PROVIDER}/vendor.mk generate: @go generate gui/backend.go @@ -232,25 +229,26 @@ tgz: @cd build/ && tar czf bitmask-vpn_$(VERSION).tgz ${TGZ_NAME} @rm -rf $(TGZ_PATH) -# XXX port/deprecate -------------------------------------------------------------------------------------------------- +# FIXME port -------------------------------------------------------------------------------------------------- gen_pkg_deb: @cp -r ${TEMPLATES}/debian build/${PROVIDER} - @VERSION=${VERSION} PROVIDER_CONFIG=${PROVIDER_CONFIG} ${SCRIPTS}/generate-debian.py build/${PROVIDER}/debian/data.json - @mkdir -p build/${PROVIDER}/debian/icons/scalable && cp branding/assets/default/icon.svg build/${PROVIDER}/debian/icons/scalable/icon.svg + @VERSION=${VERSION} VENDOR_PATH=${VENDOR_PATH} ${SCRIPTS}/generate-debian build/${PROVIDER}/debian/data.json + @mkdir -p build/${PROVIDER}/debian/icons/scalable && cp ${VENDOR_PATH}/${PROVIDER}/assets/icon.svg build/${PROVIDER}/debian/icons/scalable/icon.svg @cd build/${PROVIDER}/debian && python3 generate.py @cd build/${PROVIDER}/debian && rm app.desktop-template changelog-template rules-template control-template generate.py data.json && chmod +x rules gen_pkg_snap: @cp -r ${TEMPLATES}/snap build/${PROVIDER} - @VERSION=${VERSION} PROVIDER_CONFIG=${PROVIDER_CONFIG} ${SCRIPTS}/generate-snap.py build/${PROVIDER}/snap/data.json + @VERSION=${VERSION} VENDOR_PATH=${VENDOR_PATH} ${SCRIPTS}/generate-snap build/${PROVIDER}/snap/data.json @cp helpers/se.leap.bitmask.snap.policy build/${PROVIDER}/snap/local/pre/ @cp helpers/bitmask-root build/${PROVIDER}/snap/local/pre/ @cd build/${PROVIDER}/snap && python3 generate.py @rm build/${PROVIDER}/snap/data.json build/${PROVIDER}/snap/snapcraft-template.yaml - @mkdir -p build/${PROVIDER}/snap/gui && cp branding/assets/default/icon.svg build/${PROVIDER}/snap/gui/icon.svg - @cp branding/assets/default/icon.png build/${PROVIDER}/snap/gui/${PROVIDER}-vpn.png - rm build/${PROVIDER}/snap/generate.py + @mkdir -p build/${PROVIDER}/snap/gui && cp ${VENDOR_PATH}/${PROVIDER}/assets/icon.svg build/${PROVIDER}/snap/gui/icon.svg + # FIXME is this png needed?? then add it to ASSETS_REQUIRED + @cp ${VENDOR_PATH}/${PROVIDER}/assets/icon.png build/${PROVIDER}/snap/gui/${PROVIDER}-vpn.png + @rm build/${PROVIDER}/snap/generate.py # --------------------------------------------------------------------------------------------------------------------- diff --git a/branding/scripts/gen-providers-json b/branding/scripts/gen-providers-json new file mode 100755 index 0000000..0c95cb9 --- /dev/null +++ b/branding/scripts/gen-providers-json @@ -0,0 +1,62 @@ +#!/usr/bin/env python3 + +import configparser +import json +import os +import sys + + +from provider import getDefaultProvider +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 = {} + defaultProvider = getDefaultProvider(config) + + providers['default'] = defaultProvider + providers['providers'] = [] + providerData = getProviderData(defaultProvider, config) + addCaData(providerData, configPath) + + providers['providers'].append(providerData) + 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 '.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) diff --git a/branding/scripts/gen-providers-json.py b/branding/scripts/gen-providers-json.py deleted file mode 100644 index c89217a..0000000 --- a/branding/scripts/gen-providers-json.py +++ /dev/null @@ -1,64 +0,0 @@ -#!/usr/bin/env python3 - -import configparser -import json -import os -import sys - - -from provider import getDefaultProvider -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 = {} - defaultProvider = getDefaultProvider(config) - providers['default'] = defaultProvider - providers['providers'] = [] - providerData = getProviderData(defaultProvider, config) - addCaData(providerData, configPath) - - providers['providers'].append(providerData) - 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 + '-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 '.format( - scriptname=SCRIPT_NAME)) - else: - print(msg) - sys.exit(1) - -if __name__ == "__main__": - print("[+] Generating providers.json...") - if len(sys.argv) != 3: - bail() - # TODO get BITMASK_BRANDING folder - get config from there, if possible. - env_provider_conf = os.environ.get('PROVIDER_CONFIG') - if env_provider_conf: - if os.path.isfile(env_provider_conf): - print("[+] Overriding provider config per " - "PROVIDER_CONFIG variable") - configfile = env_provider_conf - generateProvidersJSON(sys.argv[1], sys.argv[2]) diff --git a/branding/scripts/generate-debian b/branding/scripts/generate-debian new file mode 100755 index 0000000..0db1fde --- /dev/null +++ b/branding/scripts/generate-debian @@ -0,0 +1,37 @@ +#!/usr/bin/env python3 + +import json +import os +import sys + +import configparser + +from provider import getDefaultProvider +from provider import getProviderData + + +VERSION = os.environ.get('VERSION', 'unknown') +SCRIPT = 'generate-debian.py' + + +def writeOutput(data, outfile): + + with open(outfile, 'w') as outf: + outf.write(json.dumps(data)) + +if __name__ == "__main__": + VENDOR_PATH = os.environ.get('VENDOR_PATH') + configFile = os.path.join(VENDOR_PATH, 'vendor.conf') + config = configparser.ConfigParser() + config.read(configFile) + provider = getDefaultProvider(config) + data = getProviderData(provider, config) + + if len(sys.argv) != 2: + print('Usage: {} '.format(SCRIPT)) + sys.exit(1) + + outputf = sys.argv[1] + + data['version'] = VERSION + writeOutput(data, outputf) diff --git a/branding/scripts/generate-debian.py b/branding/scripts/generate-debian.py deleted file mode 100755 index 56e533b..0000000 --- a/branding/scripts/generate-debian.py +++ /dev/null @@ -1,43 +0,0 @@ -#!/usr/bin/env python3 - -import json -import os -import sys - -import configparser - -from provider import getDefaultProvider -from provider import getProviderData - - -VERSION = os.environ.get('VERSION', 'unknown') -SCRIPT = 'generate-debian.py' - - -def writeOutput(data, outfile): - - with open(outfile, 'w') as outf: - outf.write(json.dumps(data)) - - -if __name__ == "__main__": - env_provider_conf = os.environ.get('PROVIDER_CONFIG') - if env_provider_conf: - if os.path.isfile(env_provider_conf): - print("[+] Overriding provider config per " - "PROVIDER_CONFIG variable") - configfile = env_provider_conf - - config = configparser.ConfigParser() - config.read(configfile) - provider = getDefaultProvider(config) - data = getProviderData(provider, config) - - if len(sys.argv) != 2: - print('Usage: {} '.format(SCRIPT)) - sys.exit(1) - - outputf = sys.argv[1] - - data['version'] = VERSION - writeOutput(data, outputf) diff --git a/branding/scripts/generate-osx.py b/branding/scripts/generate-osx.py deleted file mode 100755 index 4430762..0000000 --- a/branding/scripts/generate-osx.py +++ /dev/null @@ -1,44 +0,0 @@ -#!/usr/bin/env python3 - -import json -import os -import sys - -import configparser - -from provider import getDefaultProvider -from provider import getProviderData - - -VERSION = os.environ.get('VERSION', 'unknown') - - -def writeOutput(data, outfile): - - with open(outfile, 'w') as outf: - outf.write(json.dumps(data)) - - -if __name__ == "__main__": - env_provider_conf = os.environ.get('PROVIDER_CONFIG') - if env_provider_conf: - if os.path.isfile(env_provider_conf): - print("[+] Overriding provider config per " - "PROVIDER_CONFIG variable") - configfile = env_provider_conf - - config = configparser.ConfigParser() - config.read(configfile) - provider = getDefaultProvider(config) - data = getProviderData(provider, config) - - if len(sys.argv) != 2: - print('Usage: generate-osx.py ') - sys.exit(1) - - outputf = sys.argv[1] - - data['applicationNameLower'] = data.get('applicationName').lower() - data['URL'] = data.get('infoURL') - data['version'] = VERSION - writeOutput(data, outputf) diff --git a/branding/scripts/generate-snap b/branding/scripts/generate-snap new file mode 100755 index 0000000..3271d9e --- /dev/null +++ b/branding/scripts/generate-snap @@ -0,0 +1,38 @@ +#!/usr/bin/env python3 + +import json +import os +import sys + +import configparser + +from provider import getDefaultProvider +from provider import getProviderData + + +VERSION = os.environ.get('VERSION', 'unknown') +SCRIPT = 'generate-snap.py' + + +def writeOutput(data, outfile): + + with open(outfile, 'w') as outf: + outf.write(json.dumps(data)) + + +if __name__ == "__main__": + VENDOR_PATH = os.environ.get('VENDOR_PATH') + configFile = os.path.join(VENDOR_PATH, 'vendor.conf') + config = configparser.ConfigParser() + config.read(configFile) + provider = getDefaultProvider(config) + data = getProviderData(provider, config) + + if len(sys.argv) != 2: + print('Usage: {} '.format(SCRIPT)) + sys.exit(1) + + outputf = sys.argv[1] + + data['version'] = VERSION + writeOutput(data, outputf) diff --git a/branding/scripts/generate-snap.py b/branding/scripts/generate-snap.py deleted file mode 100755 index c3c5419..0000000 --- a/branding/scripts/generate-snap.py +++ /dev/null @@ -1,43 +0,0 @@ -#!/usr/bin/env python3 - -import json -import os -import sys - -import configparser - -from provider import getDefaultProvider -from provider import getProviderData - - -VERSION = os.environ.get('VERSION', 'unknown') -SCRIPT = 'generate-snap.py' - - -def writeOutput(data, outfile): - - with open(outfile, 'w') as outf: - outf.write(json.dumps(data)) - - -if __name__ == "__main__": - env_provider_conf = os.environ.get('PROVIDER_CONFIG') - if env_provider_conf: - if os.path.isfile(env_provider_conf): - print("[+] Overriding provider config per " - "PROVIDER_CONFIG variable") - configfile = env_provider_conf - - config = configparser.ConfigParser() - config.read(configfile) - provider = getDefaultProvider(config) - data = getProviderData(provider, config) - - if len(sys.argv) != 2: - print('Usage: {} '.format(SCRIPT)) - sys.exit(1) - - outputf = sys.argv[1] - - data['version'] = VERSION - writeOutput(data, outputf) diff --git a/branding/scripts/generate-vendor-make b/branding/scripts/generate-vendor-make new file mode 100755 index 0000000..60dc180 --- /dev/null +++ b/branding/scripts/generate-vendor-make @@ -0,0 +1,53 @@ +#!/usr/bin/env python3 + +# Generates a simplified file with variables that +# can be imported from the main vendorized Makefile. + +import os +import sys + +import configparser + +from provider import getDefaultProvider +from provider import getProviderData + + +VERSION = os.environ.get('VERSION', 'unknown') + +TEMPLATE = """ +# Variables for the build of {applicationName}. +# Generated automatically. Do not edit. +APPNAME := {applicationName} +BINNAME := {binaryName} +VERSION := {version} +""" + + +def writeOutput(data, outfile): + + configString = TEMPLATE.format( + binaryName=data['binaryName'], + applicationName=data['applicationName'], + version=data['version'], + ) + + with open(outfile, 'w') as outf: + outf.write(configString) + + +if __name__ == "__main__": + VENDOR_PATH = os.environ.get('VENDOR_PATH') + configFile = os.path.join(VENDOR_PATH, 'vendor.conf') + config = configparser.ConfigParser() + config.read(configFile) + provider = getDefaultProvider(config) + data = getProviderData(provider, config) + + if len(sys.argv) != 2: + print('Usage: generate-vendor-make ') + sys.exit(1) + + outputf = sys.argv[1] + data['version'] = VERSION + + writeOutput(data, outputf) diff --git a/branding/scripts/generate-vendor-make.py b/branding/scripts/generate-vendor-make.py deleted file mode 100755 index e7794c3..0000000 --- a/branding/scripts/generate-vendor-make.py +++ /dev/null @@ -1,58 +0,0 @@ -#!/usr/bin/env python3 - -# Generates a simplified file with variables that -# can be imported from the main vendorized Makefile. - -import os -import sys - -import configparser - -from provider import getDefaultProvider -from provider import getProviderData - - -VERSION = os.environ.get('VERSION', 'unknown') - -TEMPLATE = """ -# Variables for the build of {applicationName}. -# Generated automatically. Do not edit. -APPNAME := {applicationName} -BINNAME := {binaryName} -VERSION := {version} -""" - - -def writeOutput(data, outfile): - - configString = TEMPLATE.format( - binaryName=data['binaryName'], - applicationName=data['applicationName'], - version=data['version'], - ) - - with open(outfile, 'w') as outf: - outf.write(configString) - - -if __name__ == "__main__": - env_provider_conf = os.environ.get('PROVIDER_CONFIG') - if env_provider_conf: - if os.path.isfile(env_provider_conf): - print("[+] Overriding provider config per " - "PROVIDER_CONFIG variable") - configfile = env_provider_conf - - config = configparser.ConfigParser() - config.read(configfile) - provider = getDefaultProvider(config) - data = getProviderData(provider, config) - - if len(sys.argv) != 2: - print('Usage: generate-vendor-make.py ') - sys.exit(1) - - outputf = sys.argv[1] - data['version'] = VERSION - - writeOutput(data, outputf) diff --git a/branding/scripts/generate-win.py b/branding/scripts/generate-win.py deleted file mode 100755 index fb15f22..0000000 --- a/branding/scripts/generate-win.py +++ /dev/null @@ -1,44 +0,0 @@ -#!/usr/bin/env python3 - -import json -import os -import sys - -import configparser - -from provider import getDefaultProvider -from provider import getProviderData - - -VERSION = os.environ.get('VERSION', 'unknown') - - -def writeOutput(data, outfile): - - with open(outfile, 'w') as outf: - outf.write(json.dumps(data)) - - -if __name__ == "__main__": - env_provider_conf = os.environ.get('PROVIDER_CONFIG') - if env_provider_conf: - if os.path.isfile(env_provider_conf): - print("[+] Overriding provider config per " - "PROVIDER_CONFIG variable") - configfile = env_provider_conf - - config = configparser.ConfigParser() - config.read(configfile) - provider = getDefaultProvider(config) - data = getProviderData(provider, config) - - if len(sys.argv) != 2: - print('Usage: generate-win.py ') - sys.exit(1) - - outputf = sys.argv[1] - - data['applicationNameLower'] = data.get('applicationName').lower() - data['URL'] = data.get('infoURL') - data['version'] = VERSION - writeOutput(data, outputf) diff --git a/branding/scripts/provider.py b/branding/scripts/provider.py index ec8c80a..9f6bb08 100644 --- a/branding/scripts/provider.py +++ b/branding/scripts/provider.py @@ -3,12 +3,13 @@ import os def getDefaultProvider(config): - provider = os.environ.get('PROVIDER') - if provider: - print('[+] Got provider {} from environment'.format(provider)) - else: + if os.environ.get('VENDOR_PATH'): print('[+] Using default provider from config file') provider = config['default']['provider'] + else: + provider = os.environ.get('PROVIDER') + if provider: + print('[+] Got provider {} from environment'.format(provider)) return provider -- cgit v1.2.3