From 481bd7db1d9c3937373c643d6d6aa3164b179839 Mon Sep 17 00:00:00 2001
From: "kali kaneko (leap communications)" <kali@leap.se>
Date: Fri, 9 Oct 2020 22:35:45 +0200
Subject: [PATCH] [pkg] some extra branding refactor

---
 Makefile                                      | 38 ++++++++--------
 ...n-providers-json.py => gen-providers-json} | 20 ++++-----
 .../{generate-debian.py => generate-debian}   | 12 ++---
 branding/scripts/generate-osx.py              | 44 -------------------
 .../{generate-snap.py => generate-snap}       | 11 ++---
 ...te-vendor-make.py => generate-vendor-make} | 13 ++----
 branding/scripts/generate-win.py              | 44 -------------------
 branding/scripts/provider.py                  |  9 ++--
 8 files changed, 42 insertions(+), 149 deletions(-)
 rename branding/scripts/{gen-providers-json.py => gen-providers-json} (72%)
 mode change 100644 => 100755
 rename branding/scripts/{generate-debian.py => generate-debian} (69%)
 delete mode 100755 branding/scripts/generate-osx.py
 rename branding/scripts/{generate-snap.py => generate-snap} (69%)
 rename branding/scripts/{generate-vendor-make.py => generate-vendor-make} (74%)
 delete mode 100755 branding/scripts/generate-win.py

diff --git a/Makefile b/Makefile
index f2c462d8..1483a9f7 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.py b/branding/scripts/gen-providers-json
old mode 100644
new mode 100755
similarity index 72%
rename from branding/scripts/gen-providers-json.py
rename to branding/scripts/gen-providers-json
index c89217a5..0c95cb99
--- a/branding/scripts/gen-providers-json.py
+++ b/branding/scripts/gen-providers-json
@@ -23,6 +23,7 @@ def generateProvidersJSON(configPath, outputJSONPath):
 
     providers = {}
     defaultProvider = getDefaultProvider(config)
+
     providers['default'] = defaultProvider
     providers['providers'] = []
     providerData = getProviderData(defaultProvider, config)
@@ -35,7 +36,7 @@ def generateProvidersJSON(configPath, outputJSONPath):
 def addCaData(data, configfile):
     provider = data.get('name').lower()
     folder, f = os.path.split(configfile)
-    caFile = os.path.join(folder, provider + '-ca.crt')
+    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:
@@ -44,7 +45,7 @@ def addCaData(data, configfile):
 def bail(msg=None):
     if not msg:
         print("ERROR: not enough arguments!")
-        print('Usage: {scriptname}.py <config> <output>'.format(
+        print('Usage: {scriptname}.py <output>'.format(
             scriptname=SCRIPT_NAME))
     else:
         print(msg)
@@ -52,13 +53,10 @@ def bail(msg=None):
 
 if __name__ == "__main__":
     print("[+] Generating providers.json...")
-    if len(sys.argv) != 3:
+    if len(sys.argv) != 2:
         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])
+
+    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/generate-debian.py b/branding/scripts/generate-debian
similarity index 69%
rename from branding/scripts/generate-debian.py
rename to branding/scripts/generate-debian
index 56e533bc..0db1fde6 100755
--- a/branding/scripts/generate-debian.py
+++ b/branding/scripts/generate-debian
@@ -19,17 +19,11 @@ 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
-
+    VENDOR_PATH = os.environ.get('VENDOR_PATH')
+    configFile = os.path.join(VENDOR_PATH, 'vendor.conf')
     config = configparser.ConfigParser()
-    config.read(configfile)
+    config.read(configFile)
     provider = getDefaultProvider(config)
     data = getProviderData(provider, config)
 
diff --git a/branding/scripts/generate-osx.py b/branding/scripts/generate-osx.py
deleted file mode 100755
index 44307623..00000000
--- 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 <output_file>')
-        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.py b/branding/scripts/generate-snap
similarity index 69%
rename from branding/scripts/generate-snap.py
rename to branding/scripts/generate-snap
index c3c54197..3271d9e9 100755
--- a/branding/scripts/generate-snap.py
+++ b/branding/scripts/generate-snap
@@ -21,15 +21,10 @@ def writeOutput(data, outfile):
 
 
 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
-
+    VENDOR_PATH = os.environ.get('VENDOR_PATH')
+    configFile = os.path.join(VENDOR_PATH, 'vendor.conf')
     config = configparser.ConfigParser()
-    config.read(configfile)
+    config.read(configFile)
     provider = getDefaultProvider(config)
     data = getProviderData(provider, config)
 
diff --git a/branding/scripts/generate-vendor-make.py b/branding/scripts/generate-vendor-make
similarity index 74%
rename from branding/scripts/generate-vendor-make.py
rename to branding/scripts/generate-vendor-make
index e7794c37..60dc180e 100755
--- a/branding/scripts/generate-vendor-make.py
+++ b/branding/scripts/generate-vendor-make
@@ -36,20 +36,15 @@ def writeOutput(data, outfile):
 
 
 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
-
+    VENDOR_PATH = os.environ.get('VENDOR_PATH')
+    configFile = os.path.join(VENDOR_PATH, 'vendor.conf')
     config = configparser.ConfigParser()
-    config.read(configfile)
+    config.read(configFile)
     provider = getDefaultProvider(config)
     data = getProviderData(provider, config)
 
     if len(sys.argv) != 2:
-        print('Usage: generate-vendor-make.py <output_file>')
+        print('Usage: generate-vendor-make <output_file>')
         sys.exit(1)
 
     outputf = sys.argv[1]
diff --git a/branding/scripts/generate-win.py b/branding/scripts/generate-win.py
deleted file mode 100755
index fb15f22a..00000000
--- 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 <output_file>')
-        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 ec8c80af..9f6bb088 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
 
 
-- 
GitLab