diff --git a/Makefile b/Makefile index 3525c4402edf767269a3cbc13a13773045bd02ef..f2c462d8aad0858b01b8b6f16381a4512d468338 100644 --- a/Makefile +++ b/Makefile @@ -73,18 +73,26 @@ else EXTRA_FLAGS = endif +ifeq ($(PLATFORM), windows) +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 @echo "doing nothing" -build: golib build_helper build_openvpn - @XBUILD=no TARGET=${TARGET} gui/build.sh +build_gui: + @XBUILD=no TARGET=${TARGET} VENDOR_PATH=${VENDOR_PATH}/${PROVIDER} gui/build.sh + +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} -H windowsgui" ./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: @[ -f $(OPENVPN_BIN) ] && echo "OpenVPN already built at" $(OPENVPN_BIN) || ./branding/thirdparty/openvpn/build_openvpn.sh diff --git a/bitmask.pro b/bitmask.pro index 795a3d52d2e49de4ee3adef74a8bcbd4b5786508..c22ee8c7d235f4061d39f8540c2a002ede50a76a 100644 --- a/bitmask.pro +++ b/bitmask.pro @@ -6,13 +6,19 @@ unix:DEBUG:CONFIG += debug lessThan(QT_MAJOR_VERSION, 5): error("requires Qt 5") QMAKE_MACOSX_DEPLOYMENT_TARGET = 10.11 +!defined(VENDOR_PATH, var):VENDOR_PATH="providers/riseup" + +RESOURCES += gui/gui.qrc +RESOURCES += $$VENDOR_PATH/vendor.qrc + +ICON = $$VENDOR_PATH/icon.png + macx { + ICON = $$VENDOR_PATH/assets/icon.icns LIBS += -framework Security - # TODO -- pass the vendor icon here from Makefile. - ICON = branding/assets/riseup/icon.icns } win32 { - RC_ICONS = branding/assets/riseup/icon.ico + RC_ICONS = $$VENDOR_PATH/assets/icon.ico } QT += qml quick widgets @@ -31,9 +37,6 @@ HEADERS += \ # we build from build/qt LIBS += -L../../lib -lgoshim -lpthread -RESOURCES += gui/gui.qrc -RESOURCES += providers/riseup/vendor.qrc - DESTDIR = release OBJECTS_DIR = release/.obj MOC_DIR = release/.moc diff --git a/branding/scripts/init b/branding/scripts/init index 4c57d43d1303bf1edffe70204ee71d2d41f5268b..aa22326655358ac69682650b9ef29c7dccd95d04 100755 --- a/branding/scripts/init +++ b/branding/scripts/init @@ -12,6 +12,7 @@ PROVIDER=None SCRIPT_NAME = sys.argv[0] CA_README = "CERT.Readme" ASSETS_README = "assets/FILES.Readme" +VENDOR_QRC = "vendor.qrc" def initVendor(): global VENDOR_PATH @@ -87,11 +88,15 @@ def initVendorConfig(): with open(os.path.join(os.path.dirname(os.path.abspath(__file__)), "ASSETS_REQUIRED")) as f: allAssets = f.read() - with open(os.path.join(VENDOR_PATH, ASSETS_README), "w") as f: f.write(ASSETS_INFO) f.write(allAssets) + with open(os.path.join(os.path.dirname(os.path.abspath(__file__)), "../templates/vendor/vendor.qrc")) as f: + qrc = f.read() + with open(os.path.join(VENDOR_PATH, VENDOR_QRC), "w") as f: + f.write(qrc) + def initGitRepo(): out = subprocess.run(['git', 'init'], cwd=VENDOR_PATH) if out.returncode != 0: diff --git a/branding/templates/vendor/vendor.qrc b/branding/templates/vendor/vendor.qrc new file mode 100644 index 0000000000000000000000000000000000000000..2cfa32b86cad15ada6345b3feab2d54d5326c8a3 --- /dev/null +++ b/branding/templates/vendor/vendor.qrc @@ -0,0 +1,5 @@ +<RCC> + <qresource prefix="/vendor/"> + <file alias="icon.svg">assets/icon.svg</file> + </qresource> +</RCC> diff --git a/gui/build.sh b/gui/build.sh index 8b336fa79b87a0588c7322a8a7a1f13e2b9caea1..deb73a1c43692a5a07c8d6ba845fb7dda757bcc5 100755 --- a/gui/build.sh +++ b/gui/build.sh @@ -1,6 +1,9 @@ #!/bin/bash set -e -set -x + +# DEBUG -------------- +# set -x +# -------------------- XBUILD=${XBUILD-no} OSX_TARGET=10.11 @@ -13,6 +16,7 @@ SOURCE_GOLIB=gui/backend.go QTBUILD=build/qt RELEASE=$QTBUILD/release +VENDOR_PATH=${VENDOR_PATH-providers/riseup} PLATFORM=$(uname -s) LDFLAGS="" @@ -72,8 +76,9 @@ function buildGoLib { function buildQmake { echo "[+] Now building Qml app with Qt qmake" echo "[+] Using qmake in:" $QMAKE + echo "[+] VENDOR_PATH:" $VENDOR_PATH mkdir -p $QTBUILD - $QMAKE -o $QTBUILD/Makefile "CONFIG-=debug CONFIG+=release" $PROJECT + $QMAKE -o $QTBUILD/Makefile "CONFIG-=debug CONFIG+=release VENDOR_PATH=${VENDOR_PATH}" $PROJECT } function renameOutput { diff --git a/gui/main.cpp b/gui/main.cpp index 684b0be2fa2419c778961a0f6bdd351e4cf8e4cb..893cb4d233ca7c0c4b1e30b007df9c05f214c189 100644 --- a/gui/main.cpp +++ b/gui/main.cpp @@ -152,6 +152,9 @@ int main(int argc, char **argv) { QTranslator translator; translator.load(QLocale(), QLatin1String("main"), QLatin1String("_"), QLatin1String(":/i18n")); app.installTranslator(&translator); + /* set window icon */ + app.setWindowIcon(QIcon(":/vendor/icon.svg")); + QQmlApplicationEngine engine; QQmlContext *ctx = engine.rootContext(); diff --git a/gui/providers/providers.json b/gui/providers/providers.json index 5c9b08b6583c64bb837496ff879fa78bb65454c0..6f82ba37ce9b8d82349a46aeaa12e1b8043fffeb 100644 --- a/gui/providers/providers.json +++ b/gui/providers/providers.json @@ -15,7 +15,7 @@ "apiURL": "https://api.black.riseup.net/", "geolocationAPI": "https://api.black.riseup.net:9001/json", "caCertString": "-----BEGIN CERTIFICATE-----\nMIIFjTCCA3WgAwIBAgIBATANBgkqhkiG9w0BAQ0FADBZMRgwFgYDVQQKDA9SaXNl\ndXAgTmV0d29ya3MxGzAZBgNVBAsMEmh0dHBzOi8vcmlzZXVwLm5ldDEgMB4GA1UE\nAwwXUmlzZXVwIE5ldHdvcmtzIFJvb3QgQ0EwHhcNMTQwNDI4MDAwMDAwWhcNMjQw\nNDI4MDAwMDAwWjBZMRgwFgYDVQQKDA9SaXNldXAgTmV0d29ya3MxGzAZBgNVBAsM\nEmh0dHBzOi8vcmlzZXVwLm5ldDEgMB4GA1UEAwwXUmlzZXVwIE5ldHdvcmtzIFJv\nb3QgQ0EwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC76J4ciMJ8Sg0m\nTP7DF2DT9zNe0Csk4myoMFC57rfJeqsAlJCv1XMzBmXrw8wq/9z7XHv6n/0sWU7a\n7cF2hLR33ktjwODlx7vorU39/lXLndo492ZBhXQtG1INMShyv+nlmzO6GT7ESfNE\nLliFitEzwIegpMqxCIHXFuobGSCWF4N0qLHkq/SYUMoOJ96O3hmPSl1kFDRMtWXY\niw1SEKjUvpyDJpVs3NGxeLCaA7bAWhDY5s5Yb2fA1o8ICAqhowurowJpW7n5ZuLK\n5VNTlNy6nZpkjt1QycYvNycffyPOFm/Q/RKDlvnorJIrihPkyniV3YY5cGgP+Qkx\nHUOT0uLA6LHtzfiyaOqkXwc4b0ZcQD5Vbf6Prd20Ppt6ei0zazkUPwxld3hgyw58\nm/4UIjG3PInWTNf293GngK2Bnz8Qx9e/6TueMSAn/3JBLem56E0WtmbLVjvko+LF\nPM5xA+m0BmuSJtrD1MUCXMhqYTtiOvgLBlUm5zkNxALzG+cXB28k6XikXt6MRG7q\nhzIPG38zwkooM55yy5i1YfcIi5NjMH6A+t4IJxxwb67MSb6UFOwg5kFokdONZcwj\nshczHdG9gLKSBIvrKa03Nd3W2dF9hMbRu//STcQxOailDBQCnXXfAATj9pYzdY4k\nha8VCAREGAKTDAex9oXf1yRuktES4QIDAQABo2AwXjAdBgNVHQ4EFgQUC4tdmLVu\nf9hwfK4AGliaet5KkcgwDgYDVR0PAQH/BAQDAgIEMAwGA1UdEwQFMAMBAf8wHwYD\nVR0jBBgwFoAUC4tdmLVuf9hwfK4AGliaet5KkcgwDQYJKoZIhvcNAQENBQADggIB\nAGzL+GRnYu99zFoy0bXJKOGCF5XUXP/3gIXPRDqQf5g7Cu/jYMID9dB3No4Zmf7v\nqHjiSXiS8jx1j/6/Luk6PpFbT7QYm4QLs1f4BlfZOti2KE8r7KRDPIecUsUXW6P/\n3GJAVYH/+7OjA39za9AieM7+H5BELGccGrM5wfl7JeEz8in+V2ZWDzHQO4hMkiTQ\n4ZckuaL201F68YpiItBNnJ9N5nHr1MRiGyApHmLXY/wvlrOpclh95qn+lG6/2jk7\n3AmihLOKYMlPwPakJg4PYczm3icFLgTpjV5sq2md9bRyAg3oPGfAuWHmKj2Ikqch\nTd5CHKGxEEWbGUWEMP0s1A/JHWiCbDigc4Cfxhy56CWG4q0tYtnc2GMw8OAUO6Wf\nXu5pYKNkzKSEtT/MrNJt44tTZWbKV/Pi/N2Fx36my7TgTUj7g3xcE9eF4JV2H/sg\ntsK3pwE0FEqGnT4qMFbixQmc8bGyuakr23wjMvfO7eZUxBuWYR2SkcP26sozF9PF\ntGhbZHQVGZUTVPyvwahMUEhbPGVerOW0IYpxkm0x/eaWdTc4vPpf/rIlgbAjarnJ\nUN9SaWRlWKSdP4haujnzCoJbM7dU9bjvlGZNyXEekgeT0W2qFeGGp+yyUWw8tNsp\n0BuC1b7uW/bBn/xKm319wXVDvBgZgcktMolak39V7DVO\n-----END CERTIFICATE-----", - "timeStamp": "2020-10-08 18:10:13" + "timeStamp": "2020-10-09 22:41:19" } ] -} +} \ No newline at end of file diff --git a/gui/qml/AboutDialog.qml b/gui/qml/AboutDialog.qml index a101ea3d2495633a0786036e2782c0e4fd24f9fb..bd3d77e8eaf9f11bd23d7036a45fde3eb25a667b 100644 --- a/gui/qml/AboutDialog.qml +++ b/gui/qml/AboutDialog.qml @@ -5,6 +5,7 @@ MessageDialog { title: qsTr("About") text: getText() informativeText: getVersion() + icon: StandardIcon.Information function getText() { var _name = ctx ? ctx.appName : "vpn" diff --git a/gui/qml/main.qml b/gui/qml/main.qml index ce72fffc84114b8f6c2f49f8bc361e0af13d82d6..dcffcdef13dc46768dcb4f86e01e8c844eeffb3f 100644 --- a/gui/qml/main.qml +++ b/gui/qml/main.qml @@ -42,6 +42,9 @@ ApplicationWindow { showInitFailure() } } + if (ctx.donateURL) { + donateItem.visible = true + } } } @@ -98,8 +101,8 @@ ApplicationWindow { allowEmptyPass = shouldAllowEmptyPass() app.visible = true; - show(); - hide(); + //show(); + //hide(); } function toHuman(st) { @@ -251,8 +254,9 @@ ApplicationWindow { } MenuItem { + id: donateItem text: qsTr("Donate...") - visible: ctx && ctx.donateURL + visible: ctx ? ctx.donateURL : false onTriggered: { donate.visible = true } } diff --git a/pkg/config/logger.go b/pkg/config/logger.go index cb78349581615ae4e26c037e7831c45843cc5d43..cc7a4f65a4fc3536a26a83ba9ccfd478e73d7097 100644 --- a/pkg/config/logger.go +++ b/pkg/config/logger.go @@ -25,9 +25,13 @@ import ( //ConfigureLogger to write logs into a file as well as the stderr func ConfigureLogger(logPath string) (io.Closer, error) { dir := path.Dir(logPath) - err := os.MkdirAll(dir, 0700) - if err == nil { - log.Println("ERROR: cannot create data dir") + if _, err := os.Stat(dir); err != nil { + if os.IsNotExist(err) { + err := os.MkdirAll(dir, 0700) + if err == nil { + log.Println("ERROR: cannot create data dir") + } + } } logFile, err := os.OpenFile(logPath, os.O_RDWR|os.O_CREATE|os.O_APPEND, 0666) if err == nil { diff --git a/providers/riseup/vendor.qrc b/providers/riseup/vendor.qrc new file mode 100644 index 0000000000000000000000000000000000000000..2cfa32b86cad15ada6345b3feab2d54d5326c8a3 --- /dev/null +++ b/providers/riseup/vendor.qrc @@ -0,0 +1,5 @@ +<RCC> + <qresource prefix="/vendor/"> + <file alias="icon.svg">assets/icon.svg</file> + </qresource> +</RCC>