From f90ebbbb4eb27b9223d9c2a08558cc474041b849 Mon Sep 17 00:00:00 2001 From: "vladimir.kuznetsov" Date: Wed, 26 Oct 2022 09:36:58 +0300 Subject: [PATCH 1/3] added inclusion of an additional client/server config when generating configs from templates - fixed name in additional server config field --- client/core/servercontroller.cpp | 5 +++++ client/protocols/protocols_defs.h | 5 +++++ .../server_scripts/openvpn/configure_container.sh | 1 + client/server_scripts/openvpn/template.ovpn | 2 ++ .../openvpn_cloak/configure_container.sh | 1 + client/server_scripts/openvpn_cloak/template.ovpn | 2 ++ .../openvpn_shadowsocks/configure_container.sh | 1 + .../openvpn_shadowsocks/template.ovpn | 2 ++ client/ui/pages_logic/protocols/OpenVpnLogic.cpp | 12 ++++++++++++ client/ui/pages_logic/protocols/OpenVpnLogic.h | 2 ++ client/ui/qml/Pages/Protocols/PageProtoOpenVPN.qml | 14 ++++++++++---- 11 files changed, 43 insertions(+), 4 deletions(-) diff --git a/client/core/servercontroller.cpp b/client/core/servercontroller.cpp index 1ea36011..2828d2b0 100644 --- a/client/core/servercontroller.cpp +++ b/client/core/servercontroller.cpp @@ -662,6 +662,11 @@ ServerController::Vars ServerController::genVarsForScript(const ServerCredential vars.append({{"$OPENVPN_TA_KEY", "" }}); } + vars.append({{"$OPENVPN_ADDITIONAL_CLIENT_CONFIG", openvpnConfig.value(config_key::additional_client_config). + toString(protocols::openvpn::defaultAdditionalClientConfig) }}); + vars.append({{"$OPENVPN_ADDITIONAL_SERVER_CONFIG", openvpnConfig.value(config_key::additional_server_config). + toString(protocols::openvpn::defaultAdditionalServerConfig) }}); + // ShadowSocks vars vars.append({{"$SHADOWSOCKS_SERVER_PORT", ssConfig.value(config_key::port).toString(protocols::shadowsocks::defaultPort) }}); vars.append({{"$SHADOWSOCKS_LOCAL_PORT", ssConfig.value(config_key::local_port).toString(protocols::shadowsocks::defaultLocalProxyPort) }}); diff --git a/client/protocols/protocols_defs.h b/client/protocols/protocols_defs.h index 1994660b..c158822d 100644 --- a/client/protocols/protocols_defs.h +++ b/client/protocols/protocols_defs.h @@ -53,6 +53,9 @@ constexpr char subnet_address[] = "subnet_address"; constexpr char subnet_mask[] = "subnet_mask"; constexpr char subnet_cidr[] = "subnet_cidr"; +constexpr char additional_client_config[] = "additional_client_config"; +constexpr char additional_server_config[] = "additional_server_config"; + // proto config keys constexpr char last_config[] = "last_config"; } @@ -82,6 +85,8 @@ constexpr bool defaultTlsAuth = true; constexpr char ncpDisableString[] = "ncp-disable"; constexpr char tlsAuthString[] = "tls-auth /opt/amnezia/openvpn/ta.key 0"; +constexpr char defaultAdditionalClientConfig[] = ""; +constexpr char defaultAdditionalServerConfig[] = ""; } namespace shadowsocks { diff --git a/client/server_scripts/openvpn/configure_container.sh b/client/server_scripts/openvpn/configure_container.sh index d51d019b..0499b6e8 100644 --- a/client/server_scripts/openvpn/configure_container.sh +++ b/client/server_scripts/openvpn/configure_container.sh @@ -23,4 +23,5 @@ verb 1 tls-server tls-version-min 1.2 $OPENVPN_TLS_AUTH +$OPENVPN_ADDITIONAL_SERVER_CONFIG EOF diff --git a/client/server_scripts/openvpn/template.ovpn b/client/server_scripts/openvpn/template.ovpn index 6ce736c2..c0b4a044 100644 --- a/client/server_scripts/openvpn/template.ovpn +++ b/client/server_scripts/openvpn/template.ovpn @@ -21,6 +21,8 @@ block-outside-dns remote $REMOTE_HOST $OPENVPN_PORT +$OPENVPN_ADDITIONAL_CLIENT_CONFIG + $OPENVPN_CA_CERT diff --git a/client/server_scripts/openvpn_cloak/configure_container.sh b/client/server_scripts/openvpn_cloak/configure_container.sh index 72961810..26b514a4 100644 --- a/client/server_scripts/openvpn_cloak/configure_container.sh +++ b/client/server_scripts/openvpn_cloak/configure_container.sh @@ -23,6 +23,7 @@ verb 1 tls-server tls-version-min 1.2 $OPENVPN_TLS_AUTH +$OPENVPN_ADDITIONAL_SERVER_CONFIG EOF # Cloak config diff --git a/client/server_scripts/openvpn_cloak/template.ovpn b/client/server_scripts/openvpn_cloak/template.ovpn index 98e0e09f..4fc2b2c3 100644 --- a/client/server_scripts/openvpn_cloak/template.ovpn +++ b/client/server_scripts/openvpn_cloak/template.ovpn @@ -22,6 +22,8 @@ block-outside-dns route $REMOTE_HOST 255.255.255.255 net_gateway remote 127.0.0.1 1194 +$OPENVPN_ADDITIONAL_CLIENT_CONFIG + $OPENVPN_CA_CERT diff --git a/client/server_scripts/openvpn_shadowsocks/configure_container.sh b/client/server_scripts/openvpn_shadowsocks/configure_container.sh index 29a5ebf9..db8fe055 100644 --- a/client/server_scripts/openvpn_shadowsocks/configure_container.sh +++ b/client/server_scripts/openvpn_shadowsocks/configure_container.sh @@ -23,6 +23,7 @@ verb 1 tls-server tls-version-min 1.2 $OPENVPN_TLS_AUTH +$OPENVPN_ADDITIONAL_SERVER_CONFIG EOF # ShadowSocks config diff --git a/client/server_scripts/openvpn_shadowsocks/template.ovpn b/client/server_scripts/openvpn_shadowsocks/template.ovpn index 76b755f6..64cbd4be 100644 --- a/client/server_scripts/openvpn_shadowsocks/template.ovpn +++ b/client/server_scripts/openvpn_shadowsocks/template.ovpn @@ -23,6 +23,8 @@ socks-proxy 127.0.0.1 $SHADOWSOCKS_LOCAL_PORT route $REMOTE_HOST 255.255.255.255 net_gateway remote $REMOTE_HOST $OPENVPN_PORT +$OPENVPN_ADDITIONAL_CLIENT_CONFIG + $OPENVPN_CA_CERT diff --git a/client/ui/pages_logic/protocols/OpenVpnLogic.cpp b/client/ui/pages_logic/protocols/OpenVpnLogic.cpp index 3b672747..91f21151 100644 --- a/client/ui/pages_logic/protocols/OpenVpnLogic.cpp +++ b/client/ui/pages_logic/protocols/OpenVpnLogic.cpp @@ -21,6 +21,8 @@ OpenVpnLogic::OpenVpnLogic(UiLogic *logic, QObject *parent): m_checkBoxBlockDnsChecked{false}, m_lineEditPortText{}, m_checkBoxTlsAuthChecked{false}, + m_textAreaAdditionalClientConfig{""}, + m_textAreaAdditionalServerConfig{""}, m_pushButtonSaveVisible{false}, m_progressBarResetVisible{false}, @@ -67,6 +69,14 @@ void OpenVpnLogic::updateProtocolPage(const QJsonObject &openvpnConfig, DockerCo bool isTlsAuth = openvpnConfig.value(config_key::tls_auth).toBool(protocols::openvpn::defaultTlsAuth); set_checkBoxTlsAuthChecked(isTlsAuth); + QString additionalClientConfig = openvpnConfig.value(config_key::additional_client_config). + toString(protocols::openvpn::defaultAdditionalClientConfig); + set_textAreaAdditionalClientConfig(additionalClientConfig); + + QString additionalServerConfig = openvpnConfig.value(config_key::additional_server_config). + toString(protocols::openvpn::defaultAdditionalServerConfig); + set_textAreaAdditionalServerConfig(additionalServerConfig); + if (container == DockerContainer::ShadowSocks) { set_radioButtonUdpEnabled(false); set_radioButtonTcpEnabled(false); @@ -142,5 +152,7 @@ QJsonObject OpenVpnLogic::getProtocolConfigFromPage(QJsonObject oldConfig) oldConfig.insert(config_key::block_outside_dns, checkBoxBlockDnsChecked()); oldConfig.insert(config_key::port, lineEditPortText()); oldConfig.insert(config_key::tls_auth, checkBoxTlsAuthChecked()); + oldConfig.insert(config_key::additional_client_config, textAreaAdditionalClientConfig()); + oldConfig.insert(config_key::additional_server_config, textAreaAdditionalServerConfig()); return oldConfig; } diff --git a/client/ui/pages_logic/protocols/OpenVpnLogic.h b/client/ui/pages_logic/protocols/OpenVpnLogic.h index 45141050..23c2dd4d 100644 --- a/client/ui/pages_logic/protocols/OpenVpnLogic.h +++ b/client/ui/pages_logic/protocols/OpenVpnLogic.h @@ -22,6 +22,8 @@ class OpenVpnLogic : public PageProtocolLogicBase AUTO_PROPERTY(bool, checkBoxBlockDnsChecked) AUTO_PROPERTY(QString, lineEditPortText) AUTO_PROPERTY(bool, checkBoxTlsAuthChecked) + AUTO_PROPERTY(QString, textAreaAdditionalClientConfig) + AUTO_PROPERTY(QString, textAreaAdditionalServerConfig) AUTO_PROPERTY(bool, pushButtonSaveVisible) AUTO_PROPERTY(bool, progressBarResetVisible) diff --git a/client/ui/qml/Pages/Protocols/PageProtoOpenVPN.qml b/client/ui/qml/Pages/Protocols/PageProtoOpenVPN.qml index 42ef1e59..9c00172c 100644 --- a/client/ui/qml/Pages/Protocols/PageProtoOpenVPN.qml +++ b/client/ui/qml/Pages/Protocols/PageProtoOpenVPN.qml @@ -281,7 +281,10 @@ PageProtocolBase { font.styleName: "normal" font.pixelSize: 16 color: "#181922" - + text: logic.textAreaAdditionalClientConfig + onEditingFinished: { + logic.textAreaAdditionalClientConfig = text + } } } @@ -294,7 +297,7 @@ PageProtocolBase { implicitWidth: parent.width height: 21 - text: qsTr("Additional client config commands →") + text: qsTr("Additional server config commands →") background: Item { anchors.fill: parent } @@ -305,7 +308,7 @@ PageProtocolBase { font.styleName: "normal" font.pixelSize: 16 color: "#15CDCB"; - text: pb_client_config.text + text: pb_server_config.text horizontalAlignment: Text.AlignLeft verticalAlignment: Text.AlignVCenter } @@ -331,7 +334,10 @@ PageProtocolBase { font.styleName: "normal" font.pixelSize: 16 color: "#181922" - + text: logic.textAreaAdditionalServerConfig + onEditingFinished: { + logic.textAreaAdditionalServerConfig = text + } } } From 97457f17c15294e586009fa333a6f7a3a3172bd0 Mon Sep 17 00:00:00 2001 From: "vladimir.kuznetsov" Date: Tue, 29 Nov 2022 22:11:02 +0300 Subject: [PATCH 2/3] fixed options parsing for enable macos NOTARIZE_APP --- deploy/build_macos.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deploy/build_macos.sh b/deploy/build_macos.sh index 09dd85f7..fa955215 100755 --- a/deploy/build_macos.sh +++ b/deploy/build_macos.sh @@ -3,7 +3,7 @@ echo "Build script started ..." set -o errexit -o nounset -while getopts n: flag +while getopts n flag do case "${flag}" in n) NOTARIZE_APP=1;; From dcb5828313c9d2378c9a0aa6b4869ecd5c20af97 Mon Sep 17 00:00:00 2001 From: pokamest Date: Wed, 30 Nov 2022 01:51:18 +0100 Subject: [PATCH 3/3] GitHub actions (#133) GitHub actions --- .github/workflows/deploy.yml | 255 +++++++++++++++++++++++++++++++++++ deploy/build_windows.bat | 2 +- 2 files changed, 256 insertions(+), 1 deletion(-) create mode 100644 .github/workflows/deploy.yml diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml new file mode 100644 index 00000000..a5605263 --- /dev/null +++ b/.github/workflows/deploy.yml @@ -0,0 +1,255 @@ +name: 'Deploy workflow' + +on: [push] + +jobs: + Build-Linux-Ubuntu: + name: 'Build-Linux-Ubuntu' + runs-on: ubuntu-latest + + env: + QT_VERSION: 5.15.2 + QIF_VERSION: 4.5 + + steps: + - name: 'Install Qt' + uses: jurplel/install-qt-action@v3 + with: + version: ${{ env.QT_VERSION }} + host: 'linux' + target: 'desktop' + arch: 'gcc_64' + dir: ${{ runner.temp }} + setup-python: 'true' + tools: 'tools_ifw' + set-env: 'true' + extra: '--external 7z' + + - name: 'Get sources' + uses: actions/checkout@v3 + with: + submodules: 'true' + fetch-depth: 10 + + - name: 'Setup ccache' + uses: hendrikmuhs/ccache-action@v1.2 + + - name: 'Build project' + run: | + export QT_BIN_DIR=${{ runner.temp }}/Qt/${{ env.QT_VERSION }}/gcc_64/bin + export QIF_BIN_DIR=${{ runner.temp }}/Qt/Tools/QtInstallerFramework/${{ env.QIF_VERSION }}/bin + bash deploy/build_linux.sh + +# ------------------------------------------------------ + + Build-Windows: + name: Build-Windows + runs-on: windows-latest + continue-on-error: true + + strategy: + matrix: + arch: [32, 64] + include: + - qt-arch: 'win32_msvc2019' + arch: 32 + - qt-msvc-path: 'msvc2019' + arch: 32 + - msvc-arch: 'x86' + arch: 32 + - qt-arch: 'win64_msvc2019_64' + arch: 64 + - qt-msvc-path: 'msvc2019_64' + arch: 64 + - msvc-arch: 'x64' + arch: 64 + + env: + QT_VERSION: 5.15.2 + QIF_VERSION: 4.5 + BUILD_ARCH: ${{ matrix.arch }} + + steps: + - name: 'Get sources' + uses: actions/checkout@v3 + with: + submodules: 'true' + fetch-depth: 10 + + - name: 'Setup ccache' + uses: hendrikmuhs/ccache-action@v1.2 + + - name: 'Install Qt' + uses: jurplel/install-qt-action@v3 + with: + version: ${{ env.QT_VERSION }} + host: 'windows' + target: 'desktop' + arch: '${{ matrix.qt-arch }}' + dir: ${{ runner.temp }} + setup-python: 'true' + tools: 'tools_ifw' + set-env: 'true' + extra: '--external 7z' + + - name: 'Setup mvsc' + uses: ilammy/msvc-dev-cmd@v1 + with: + arch: ${{ matrix.msvc-arch }} + + - name: 'Build project' + shell: cmd + run: | + set BUILD_ARCH=${{ env.BUILD_ARCH }} + set QT_BIN_DIR="${{ runner.temp }}\\Qt\\${{ env.QT_VERSION }}\\${{ matrix.qt-msvc-path }}\\bin" + set QIF_BIN_DIR="${{ runner.temp }}\\Qt\\Tools\\QtInstallerFramework\\${{ env.QIF_VERSION }}\\bin" + call deploy\\build_windows.bat + +# ------------------------------------------------------ + + Build-IOS: + name: 'Build-IOS' + runs-on: macos-latest + + env: + QT_VERSION: 5.15.2 + QIF_VERSION: 4.4 + + steps: + - name: 'Setup xcode' + uses: maxim-lobanov/setup-xcode@v1 + with: + xcode-version: '13.4' + + - name: 'Install Qt' + uses: jurplel/install-qt-action@v3 + with: + version: ${{ env.QT_VERSION }} + host: 'mac' + target: 'ios' + dir: ${{ runner.temp }} + setup-python: 'true' + set-env: 'true' + extra: '--external 7z' + + - name: 'Install go' + uses: actions/setup-go@v3 + + - name: 'Setup gomobile' + run: | + export PATH=$PATH:~/go/bin + go install golang.org/x/mobile/cmd/gomobile@latest + gomobile init + + - name: 'Get sources' + uses: actions/checkout@v3 + with: + submodules: 'true' + fetch-depth: 10 + + - name: 'Setup ccache' + uses: hendrikmuhs/ccache-action@v1.2 + + - name: 'Build project' + run: | + export QT_BIN_DIR="${{ runner.temp }}/Qt/${{ env.QT_VERSION }}/ios/bin" + export QT_IOS_BIN=$QT_BIN_DIR + export PATH=$PATH:~/go/bin + bash deploy/build_ios.sh + +# ------------------------------------------------------ + + Build-MacOS: + name: 'Build-MacOS' + runs-on: macos-latest + + env: + QT_VERSION: 5.15.2 + QIF_VERSION: 4.5 + + steps: + - name: 'Setup xcode' + uses: maxim-lobanov/setup-xcode@v1 + with: + xcode-version: '13.4' + + - name: 'Install Qt' + uses: jurplel/install-qt-action@v3 + with: + version: ${{ env.QT_VERSION }} + host: 'mac' + target: 'desktop' + arch: 'clang_64' + dir: ${{ runner.temp }} + setup-python: 'true' + tools: 'tools_ifw' + set-env: 'true' + extra: '--external 7z' + + - name: 'Get sources' + uses: actions/checkout@v3 + with: + submodules: 'true' + fetch-depth: 10 + + - name: 'Setup ccache' + uses: hendrikmuhs/ccache-action@v1.2 + + - name: 'Build project' + run: | + export QT_BIN_DIR="${{ runner.temp }}/Qt/${{ env.QT_VERSION }}/clang_64/bin" + export QIF_BIN_DIR="${{ runner.temp }}/Qt/Tools/QtInstallerFramework/${{ env.QIF_VERSION }}/bin" + bash deploy/build_macos.sh + +# ------------------------------------------------------ + + Build-Android: + name: 'Build-Android' + runs-on: ubuntu-latest + + env: + QT_VERSION: 5.15.2 + QIF_VERSION: 4.5 + + steps: + - name: 'Install Qt' + uses: jurplel/install-qt-action@v3 + with: + version: ${{ env.QT_VERSION }} + host: 'linux' + target: 'android' + arch: 'android' + dir: ${{ runner.temp }} + setup-python: 'true' + set-env: 'true' + extra: '--external 7z' + + - name: 'Get sources' + uses: actions/checkout@v3 + with: + submodules: 'true' + fetch-depth: 10 + + - name: 'Setup ccache' + uses: hendrikmuhs/ccache-action@v1.2 + + - name: 'Setup Java' + uses: actions/setup-java@v3 + with: + distribution: 'temurin' + java-version: '8' + + - name: 'Build project' + run: | + export NDK_VERSION=21d + export ANDROID_NDK_PLATFORM=android-21 + export ANDROID_NDK_HOME=${{ runner.temp }}/android-ndk-r${NDK_VERSION} + export ANDROID_NDK_ROOT=$ANDROID_NDK_HOME + + if [ ! -f $ANDROID_NDK_ROOT/ndk-build ]; then + wget https://dl.google.com/android/repository/android-ndk-r${NDK_VERSION}-linux-x86_64.zip -qO ${{ runner.temp }}/ndk.zip && + unzip -q -d ${{ runner.temp }} ${{ runner.temp }}/ndk.zip ; + fi + + export QT_BIN_DIR=${{ runner.temp }}/Qt/${{ env.QT_VERSION }}/android/bin + bash deploy/build_android.sh \ No newline at end of file diff --git a/deploy/build_windows.bat b/deploy/build_windows.bat index c82a54ee..b58c4286 100644 --- a/deploy/build_windows.bat +++ b/deploy/build_windows.bat @@ -92,7 +92,7 @@ dir %OUT_APP_DIR% cd %OUT_APP_DIR% echo "Compressing data..." -"%QIF_BIN_DIR:"=%\archivegen" -c 9 %INSTALLER_DATA_DIR:"=%\%APP_NAME:"=%.7z ./ +"%QIF_BIN_DIR:"=%\archivegen" -c 9 %INSTALLER_DATA_DIR:"=%\%APP_NAME:"=%.7z . cd "%RELEASE_DIR:"=%\installer" echo "Creating installer..."