Merge branch 'dev' of github.com:amnezia-vpn/amnezia-client into feature/new-awg-docker-container
This commit is contained in:
commit
179c6093ce
8 changed files with 91 additions and 45 deletions
14
.github/workflows/deploy.yml
vendored
14
.github/workflows/deploy.yml
vendored
|
|
@ -14,8 +14,8 @@ jobs:
|
||||||
runs-on: ubuntu-20.04
|
runs-on: ubuntu-20.04
|
||||||
|
|
||||||
env:
|
env:
|
||||||
QT_VERSION: 6.5.1
|
QT_VERSION: 6.6.2
|
||||||
QIF_VERSION: 4.6
|
QIF_VERSION: 4.7
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: 'Install Qt'
|
- name: 'Install Qt'
|
||||||
|
|
@ -72,8 +72,8 @@ jobs:
|
||||||
runs-on: windows-latest
|
runs-on: windows-latest
|
||||||
|
|
||||||
env:
|
env:
|
||||||
QT_VERSION: 6.5.1
|
QT_VERSION: 6.6.2
|
||||||
QIF_VERSION: 4.6
|
QIF_VERSION: 4.7
|
||||||
BUILD_ARCH: 64
|
BUILD_ARCH: 64
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
|
|
@ -134,7 +134,7 @@ jobs:
|
||||||
runs-on: macos-13
|
runs-on: macos-13
|
||||||
|
|
||||||
env:
|
env:
|
||||||
QT_VERSION: 6.5.2
|
QT_VERSION: 6.6.2
|
||||||
CC: cc
|
CC: cc
|
||||||
CXX: c++
|
CXX: c++
|
||||||
|
|
||||||
|
|
@ -227,7 +227,7 @@ jobs:
|
||||||
env:
|
env:
|
||||||
# Keep compat with MacOS 10.15 aka Catalina by Qt 6.4
|
# Keep compat with MacOS 10.15 aka Catalina by Qt 6.4
|
||||||
QT_VERSION: 6.4.3
|
QT_VERSION: 6.4.3
|
||||||
QIF_VERSION: 4.6
|
QIF_VERSION: 4.7
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: 'Setup xcode'
|
- name: 'Setup xcode'
|
||||||
|
|
@ -286,7 +286,7 @@ jobs:
|
||||||
|
|
||||||
env:
|
env:
|
||||||
ANDROID_BUILD_PLATFORM: android-34
|
ANDROID_BUILD_PLATFORM: android-34
|
||||||
QT_VERSION: 6.6.1
|
QT_VERSION: 6.6.2
|
||||||
QT_MODULES: 'qtremoteobjects qt5compat qtimageformats qtshadertools'
|
QT_MODULES: 'qtremoteobjects qt5compat qtimageformats qtshadertools'
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
|
|
|
||||||
|
|
@ -8,6 +8,7 @@
|
||||||
#include <QImage>
|
#include <QImage>
|
||||||
#include <QStandardPaths>
|
#include <QStandardPaths>
|
||||||
|
|
||||||
|
#include "configurators/awg_configurator.h"
|
||||||
#include "configurators/cloak_configurator.h"
|
#include "configurators/cloak_configurator.h"
|
||||||
#include "configurators/openvpn_configurator.h"
|
#include "configurators/openvpn_configurator.h"
|
||||||
#include "configurators/shadowsocks_configurator.h"
|
#include "configurators/shadowsocks_configurator.h"
|
||||||
|
|
@ -228,6 +229,45 @@ void ExportController::generateWireGuardConfig(const QString &clientName)
|
||||||
emit exportConfigChanged();
|
emit exportConfigChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ExportController::generateAwgConfig(const QString &clientName)
|
||||||
|
{
|
||||||
|
clearPreviousConfig();
|
||||||
|
|
||||||
|
int serverIndex = m_serversModel->getProcessedServerIndex();
|
||||||
|
ServerCredentials credentials = m_serversModel->getServerCredentials(serverIndex);
|
||||||
|
|
||||||
|
DockerContainer container = static_cast<DockerContainer>(m_containersModel->getCurrentlyProcessedContainerIndex());
|
||||||
|
QJsonObject containerConfig = m_containersModel->getContainerConfig(container);
|
||||||
|
containerConfig.insert(config_key::container, ContainerProps::containerToString(container));
|
||||||
|
|
||||||
|
QString clientId;
|
||||||
|
ErrorCode errorCode = ErrorCode::NoError;
|
||||||
|
QString config = m_configurator->awgConfigurator->genAwgConfig(credentials, container, containerConfig,
|
||||||
|
clientId, &errorCode);
|
||||||
|
if (errorCode) {
|
||||||
|
emit exportErrorOccurred(errorString(errorCode));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
config = m_configurator->processConfigWithExportSettings(serverIndex, container, Proto::Awg, config);
|
||||||
|
|
||||||
|
auto configJson = QJsonDocument::fromJson(config.toUtf8()).object();
|
||||||
|
QStringList lines = configJson.value(config_key::config).toString().replace("\r", "").split("\n");
|
||||||
|
for (const QString &line : lines) {
|
||||||
|
m_config.append(line + "\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
qrcodegen::QrCode qr = qrcodegen::QrCode::encodeText(m_config.toUtf8(), qrcodegen::QrCode::Ecc::LOW);
|
||||||
|
m_qrCodes << svgToBase64(QString::fromStdString(toSvgString(qr, 1)));
|
||||||
|
|
||||||
|
errorCode = m_clientManagementModel->appendClient(clientId, clientName, container, credentials);
|
||||||
|
if (errorCode) {
|
||||||
|
emit exportErrorOccurred(errorString(errorCode));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
emit exportConfigChanged();
|
||||||
|
}
|
||||||
|
|
||||||
void ExportController::generateShadowSocksConfig()
|
void ExportController::generateShadowSocksConfig()
|
||||||
{
|
{
|
||||||
clearPreviousConfig();
|
clearPreviousConfig();
|
||||||
|
|
|
||||||
|
|
@ -34,6 +34,7 @@ public slots:
|
||||||
void generateConnectionConfig(const QString &clientName);
|
void generateConnectionConfig(const QString &clientName);
|
||||||
void generateOpenVpnConfig(const QString &clientName);
|
void generateOpenVpnConfig(const QString &clientName);
|
||||||
void generateWireGuardConfig(const QString &clientName);
|
void generateWireGuardConfig(const QString &clientName);
|
||||||
|
void generateAwgConfig(const QString &clientName);
|
||||||
void generateShadowSocksConfig();
|
void generateShadowSocksConfig();
|
||||||
void generateCloakConfig();
|
void generateCloakConfig();
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -107,13 +107,6 @@ DrawerType2 {
|
||||||
|
|
||||||
text: qsTr("Copy")
|
text: qsTr("Copy")
|
||||||
imageSource: "qrc:/images/controls/copy.svg"
|
imageSource: "qrc:/images/controls/copy.svg"
|
||||||
|
|
||||||
clickedFunc: function() {
|
|
||||||
configText.selectAll()
|
|
||||||
configText.copy()
|
|
||||||
configText.select(0, 0)
|
|
||||||
PageController.showNotificationMessage(qsTr("Copied"))
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
BasicButtonType {
|
BasicButtonType {
|
||||||
|
|
@ -132,13 +125,6 @@ DrawerType2 {
|
||||||
|
|
||||||
text: qsTr("Copy config string")
|
text: qsTr("Copy config string")
|
||||||
imageSource: "qrc:/images/controls/copy.svg"
|
imageSource: "qrc:/images/controls/copy.svg"
|
||||||
|
|
||||||
clickedFunc: function() {
|
|
||||||
nativeConfigString.selectAll()
|
|
||||||
nativeConfigString.copy()
|
|
||||||
nativeConfigString.select(0, 0)
|
|
||||||
PageController.showNotificationMessage(qsTr("Copied"))
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
BasicButtonType {
|
BasicButtonType {
|
||||||
|
|
@ -201,7 +187,7 @@ DrawerType2 {
|
||||||
anchors.topMargin: 16
|
anchors.topMargin: 16
|
||||||
|
|
||||||
backButtonFunction: function() {
|
backButtonFunction: function() {
|
||||||
configContentDrawer.open()
|
configContentDrawer.close()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -84,6 +84,27 @@ PageType {
|
||||||
visible: !GC.isMobile()
|
visible: !GC.isMobile()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SwitcherType {
|
||||||
|
visible: !GC.isMobile()
|
||||||
|
|
||||||
|
Layout.fillWidth: true
|
||||||
|
Layout.margins: 16
|
||||||
|
|
||||||
|
text: qsTr("Auto connect")
|
||||||
|
descriptionText: qsTr("Connect to VPN on app start")
|
||||||
|
|
||||||
|
checked: SettingsController.isAutoConnectEnabled()
|
||||||
|
onCheckedChanged: {
|
||||||
|
if (checked !== SettingsController.isAutoConnectEnabled()) {
|
||||||
|
SettingsController.toggleAutoConnect(checked)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
DividerType {
|
||||||
|
visible: !GC.isMobile()
|
||||||
|
}
|
||||||
|
|
||||||
SwitcherType {
|
SwitcherType {
|
||||||
visible: !GC.isMobile()
|
visible: !GC.isMobile()
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -41,27 +41,6 @@ PageType {
|
||||||
headerText: qsTr("Connection")
|
headerText: qsTr("Connection")
|
||||||
}
|
}
|
||||||
|
|
||||||
SwitcherType {
|
|
||||||
visible: !GC.isMobile()
|
|
||||||
|
|
||||||
Layout.fillWidth: true
|
|
||||||
Layout.margins: 16
|
|
||||||
|
|
||||||
text: qsTr("Auto connect")
|
|
||||||
descriptionText: qsTr("Connect to VPN on app start")
|
|
||||||
|
|
||||||
checked: SettingsController.isAutoConnectEnabled()
|
|
||||||
onCheckedChanged: {
|
|
||||||
if (checked !== SettingsController.isAutoConnectEnabled()) {
|
|
||||||
SettingsController.toggleAutoConnect(checked)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
DividerType {
|
|
||||||
visible: !GC.isMobile()
|
|
||||||
}
|
|
||||||
|
|
||||||
SwitcherType {
|
SwitcherType {
|
||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
Layout.margins: 16
|
Layout.margins: 16
|
||||||
|
|
|
||||||
|
|
@ -22,6 +22,7 @@ PageType {
|
||||||
AmneziaConnection,
|
AmneziaConnection,
|
||||||
OpenVpn,
|
OpenVpn,
|
||||||
WireGuard,
|
WireGuard,
|
||||||
|
Awg,
|
||||||
ShadowSocks,
|
ShadowSocks,
|
||||||
Cloak
|
Cloak
|
||||||
}
|
}
|
||||||
|
|
@ -48,7 +49,10 @@ PageType {
|
||||||
PageController.showBusyIndicator(true)
|
PageController.showBusyIndicator(true)
|
||||||
|
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case PageShare.ConfigType.AmneziaConnection: ExportController.generateConnectionConfig(clientNameTextField.textFieldText); break;
|
case PageShare.ConfigType.AmneziaConnection: {
|
||||||
|
ExportController.generateConnectionConfig(clientNameTextField.textFieldText);
|
||||||
|
break;
|
||||||
|
}
|
||||||
case PageShare.ConfigType.OpenVpn: {
|
case PageShare.ConfigType.OpenVpn: {
|
||||||
ExportController.generateOpenVpnConfig(clientNameTextField.textFieldText)
|
ExportController.generateOpenVpnConfig(clientNameTextField.textFieldText)
|
||||||
shareConnectionDrawer.configCaption = qsTr("Save OpenVPN config")
|
shareConnectionDrawer.configCaption = qsTr("Save OpenVPN config")
|
||||||
|
|
@ -63,6 +67,13 @@ PageType {
|
||||||
shareConnectionDrawer.configFileName = "amnezia_for_wireguard"
|
shareConnectionDrawer.configFileName = "amnezia_for_wireguard"
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
|
case PageShare.ConfigType.Awg: {
|
||||||
|
ExportController.generateAwgConfig(clientNameTextField.textFieldText)
|
||||||
|
shareConnectionDrawer.configCaption = qsTr("Save AmneziaWG config")
|
||||||
|
shareConnectionDrawer.configExtension = ".conf"
|
||||||
|
shareConnectionDrawer.configFileName = "amnezia_for_awg"
|
||||||
|
break
|
||||||
|
}
|
||||||
case PageShare.ConfigType.ShadowSocks: {
|
case PageShare.ConfigType.ShadowSocks: {
|
||||||
ExportController.generateShadowSocksConfig()
|
ExportController.generateShadowSocksConfig()
|
||||||
shareConnectionDrawer.configCaption = qsTr("Save ShadowSocks config")
|
shareConnectionDrawer.configCaption = qsTr("Save ShadowSocks config")
|
||||||
|
|
@ -110,6 +121,11 @@ PageType {
|
||||||
property string name: qsTr("WireGuard native format")
|
property string name: qsTr("WireGuard native format")
|
||||||
property var type: PageShare.ConfigType.WireGuard
|
property var type: PageShare.ConfigType.WireGuard
|
||||||
}
|
}
|
||||||
|
QtObject {
|
||||||
|
id: awgConnectionFormat
|
||||||
|
property string name: qsTr("AmneziaWG native format")
|
||||||
|
property var type: PageShare.ConfigType.Awg
|
||||||
|
}
|
||||||
QtObject {
|
QtObject {
|
||||||
id: shadowSocksConnectionFormat
|
id: shadowSocksConnectionFormat
|
||||||
property string name: qsTr("ShadowSocks native format")
|
property string name: qsTr("ShadowSocks native format")
|
||||||
|
|
@ -402,6 +418,8 @@ PageType {
|
||||||
root.connectionTypesModel.push(openVpnConnectionFormat)
|
root.connectionTypesModel.push(openVpnConnectionFormat)
|
||||||
} else if (index === ContainerProps.containerFromString("amnezia-wireguard")) {
|
} else if (index === ContainerProps.containerFromString("amnezia-wireguard")) {
|
||||||
root.connectionTypesModel.push(wireGuardConnectionFormat)
|
root.connectionTypesModel.push(wireGuardConnectionFormat)
|
||||||
|
} else if (index === ContainerProps.containerFromString("amnezia-awg")) {
|
||||||
|
root.connectionTypesModel.push(awgConnectionFormat)
|
||||||
} else if (index === ContainerProps.containerFromString("amnezia-shadowsocks")) {
|
} else if (index === ContainerProps.containerFromString("amnezia-shadowsocks")) {
|
||||||
root.connectionTypesModel.push(openVpnConnectionFormat)
|
root.connectionTypesModel.push(openVpnConnectionFormat)
|
||||||
root.connectionTypesModel.push(shadowSocksConnectionFormat)
|
root.connectionTypesModel.push(shadowSocksConnectionFormat)
|
||||||
|
|
|
||||||
|
|
@ -146,7 +146,8 @@ if [ "${MAC_CERT_PW+x}" ]; then
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo "Building DMG installer..."
|
echo "Building DMG installer..."
|
||||||
hdiutil create -size 120mb -volname AmneziaVPN -srcfolder $BUILD_DIR/installer/$APP_NAME.app -ov -format UDZO $DMG_FILENAME
|
# Allow Terminal to make changes in Privacy & Security > App Management
|
||||||
|
hdiutil create -size 256mb -volname AmneziaVPN -srcfolder $BUILD_DIR/installer/$APP_NAME.app -ov -format UDZO $DMG_FILENAME
|
||||||
|
|
||||||
if [ "${MAC_CERT_PW+x}" ]; then
|
if [ "${MAC_CERT_PW+x}" ]; then
|
||||||
echo "Signing DMG installer..."
|
echo "Signing DMG installer..."
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue