Skip to content

Commit 3bcb651

Browse files
committed
Merge branch 'dev' of github-amnezia:amnezia-vpn/amnezia-client into HEAD
2 parents 9054600 + d702dc0 commit 3bcb651

109 files changed

Lines changed: 2276 additions & 1718 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ deploy/build_64/*
1010
winbuild*.bat
1111
.cache/
1212
.vscode/
13+
.venv/
14+
.cursor*
1315

1416

1517
# Qt-es

CMakeLists.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ set(CMAKE_CXX_STANDARD 17)
44
set(CMAKE_CXX_STANDARD_REQUIRED ON)
55

66
set(PROJECT AmneziaVPN)
7-
set(AMNEZIAVPN_VERSION 5.0.0.5)
7+
set(AMNEZIAVPN_VERSION 5.0.1.1)
88

99
set(QT_CREATOR_SKIP_PACKAGE_MANAGER_SETUP ON CACHE BOOL "" FORCE)
1010
set(CMAKE_PROJECT_TOP_LEVEL_INCLUDES
@@ -30,7 +30,7 @@ set(RELEASE_DATE "${CURRENT_DATE}")
3030
set(APP_MAJOR_VERSION ${CMAKE_PROJECT_VERSION_MAJOR}.${CMAKE_PROJECT_VERSION_MINOR}.${CMAKE_PROJECT_VERSION_PATCH})
3131

3232
# bump by 2 on every release, because we're releasing two versions on the play store
33-
set(APP_ANDROID_VERSION_CODE 2140)
33+
set(APP_ANDROID_VERSION_CODE 2142)
3434
if(DEFINED APP_ANDROID_VERSION_CODE_OFFSET)
3535
math(EXPR APP_ANDROID_VERSION_CODE "${APP_ANDROID_VERSION_CODE} + ${APP_ANDROID_VERSION_CODE_OFFSET}")
3636
endif()

client/amneziaApplication.cpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,9 @@
2626
#include "version.h"
2727

2828
#include "platforms/ios/QRCodeReaderBase.h"
29+
#ifdef Q_OS_IOS
30+
#include "platforms/ios/ioscontextmenu.h"
31+
#endif
2932

3033

3134
bool AmneziaApplication::m_forceQuit = false;
@@ -139,6 +142,10 @@ void AmneziaApplication::init()
139142
m_engine->rootContext()->setContextProperty("IsMacOsNeBuild", false);
140143
#endif
141144

145+
#ifdef Q_OS_IOS
146+
m_engine->rootContext()->setContextProperty("IosContextMenu", new IosContextMenu(this));
147+
#endif
148+
142149
m_vpnConnection.reset(new VpnConnection(nullptr, nullptr));
143150
m_vpnConnection->moveToThread(&m_vpnConnectionThread);
144151
m_vpnConnectionThread.start();

client/cmake/ios.cmake

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ set(HEADERS ${HEADERS}
3131
${CMAKE_CURRENT_SOURCE_DIR}/platforms/ios/ios_controller.h
3232
${CMAKE_CURRENT_SOURCE_DIR}/platforms/ios/ios_controller_wrapper.h
3333
${CMAKE_CURRENT_SOURCE_DIR}/platforms/ios/iosnotificationhandler.h
34+
${CMAKE_CURRENT_SOURCE_DIR}/platforms/ios/ioscontextmenu.h
3435
${CMAKE_CURRENT_SOURCE_DIR}/platforms/ios/QtAppDelegate.h
3536
${CMAKE_CURRENT_SOURCE_DIR}/platforms/ios/StoreKitController.h
3637
${CMAKE_CURRENT_SOURCE_DIR}/platforms/ios/QtAppDelegate-C-Interface.h
@@ -42,13 +43,20 @@ set(SOURCES ${SOURCES}
4243
${CMAKE_CURRENT_SOURCE_DIR}/platforms/ios/ios_controller.mm
4344
${CMAKE_CURRENT_SOURCE_DIR}/platforms/ios/ios_controller_wrapper.mm
4445
${CMAKE_CURRENT_SOURCE_DIR}/platforms/ios/iosnotificationhandler.mm
46+
${CMAKE_CURRENT_SOURCE_DIR}/platforms/ios/ioscontextmenu.mm
4547
${CMAKE_CURRENT_SOURCE_DIR}/platforms/ios/iosglue.mm
4648
${CMAKE_CURRENT_SOURCE_DIR}/platforms/ios/QRCodeReaderBase.mm
4749
${CMAKE_CURRENT_SOURCE_DIR}/platforms/ios/QtAppDelegate.mm
4850
${CMAKE_CURRENT_SOURCE_DIR}/platforms/ios/StoreKitController.mm
4951
${CMAKE_CURRENT_SOURCE_DIR}/platforms/ios/AmneziaSceneDelegateHooks.mm
5052
)
5153

54+
# The context menu helper uses ARC-only constructs (weak references); the
55+
# rest of the Objective-C++ sources build with manual reference counting.
56+
set_source_files_properties(${CMAKE_CURRENT_SOURCE_DIR}/platforms/ios/ioscontextmenu.mm
57+
PROPERTIES COMPILE_OPTIONS "-fobjc-arc"
58+
)
59+
5260

5361
target_include_directories(${PROJECT} PRIVATE ${Qt6Gui_PRIVATE_INCLUDE_DIRS})
5462

@@ -69,7 +77,6 @@ set_target_properties(${PROJECT} PROPERTIES
6977
XCODE_ATTRIBUTE_PRODUCT_NAME "AmneziaVPN"
7078
XCODE_ATTRIBUTE_BUNDLE_INFO_STRING "AmneziaVPN"
7179
XCODE_GENERATE_SCHEME TRUE
72-
XCODE_ATTRIBUTE_ENABLE_BITCODE "NO"
7380
XCODE_ATTRIBUTE_ASSETCATALOG_COMPILER_APPICON_NAME "AppIcon"
7481
XCODE_ATTRIBUTE_TARGETED_DEVICE_FAMILY "1,2"
7582
XCODE_EMBED_FRAMEWORKS_CODE_SIGN_ON_COPY ON
@@ -78,7 +85,7 @@ set_target_properties(${PROJECT} PROPERTIES
7885
XCODE_EMBED_APP_EXTENSIONS networkextension
7986
)
8087

81-
if(DEFINED DEPLOY)
88+
if(DEPLOY)
8289
set_target_properties(${PROJECT} PROPERTIES
8390
XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY "Apple Distribution"
8491
XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY[variant=Debug] "Apple Development"

client/cmake/macos_ne.cmake

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ set_target_properties(${PROJECT} PROPERTIES MACOSX_BUNDLE TRUE)
55
set(APPLE_PROJECT_VERSION ${CMAKE_PROJECT_VERSION_MAJOR}.${CMAKE_PROJECT_VERSION_MINOR}.${CMAKE_PROJECT_VERSION_PATCH})
66

77
enable_language(OBJC)
8+
enable_language(OBJCXX)
89
enable_language(Swift)
910

1011
find_package(Qt6 REQUIRED COMPONENTS ShaderTools Widgets)
@@ -33,7 +34,6 @@ set(LIBS ${LIBS}
3334
set(HEADERS ${HEADERS}
3435
${CMAKE_CURRENT_SOURCE_DIR}/platforms/ios/ios_controller.h
3536
${CMAKE_CURRENT_SOURCE_DIR}/platforms/ios/ios_controller_wrapper.h
36-
${CMAKE_CURRENT_SOURCE_DIR}/platforms/ios/iosnotificationhandler.h
3737
${CMAKE_CURRENT_SOURCE_DIR}/platforms/ios/StoreKitController.h
3838
${CMAKE_CURRENT_SOURCE_DIR}/platforms/ios/QtAppDelegate.h
3939
${CMAKE_CURRENT_SOURCE_DIR}/platforms/ios/QtAppDelegate-C-Interface.h
@@ -44,19 +44,12 @@ set_source_files_properties(${CMAKE_CURRENT_SOURCE_DIR}/platforms/ios/ios_contro
4444
set(SOURCES ${SOURCES}
4545
${CMAKE_CURRENT_SOURCE_DIR}/platforms/ios/ios_controller.mm
4646
${CMAKE_CURRENT_SOURCE_DIR}/platforms/ios/ios_controller_wrapper.mm
47-
${CMAKE_CURRENT_SOURCE_DIR}/platforms/ios/iosnotificationhandler.mm
4847
${CMAKE_CURRENT_SOURCE_DIR}/platforms/ios/StoreKitController.mm
4948
${CMAKE_CURRENT_SOURCE_DIR}/platforms/ios/iosglue.mm
5049
${CMAKE_CURRENT_SOURCE_DIR}/platforms/ios/QRCodeReaderBase.mm
5150
${CMAKE_CURRENT_SOURCE_DIR}/platforms/ios/QtAppDelegate.mm
5251
)
5352

54-
set(ICON_FILE ${CMAKE_CURRENT_SOURCE_DIR}/images/app.icns)
55-
set(MACOSX_BUNDLE_ICON_FILE app.icns)
56-
set_source_files_properties(${ICON_FILE} PROPERTIES MACOSX_PACKAGE_LOCATION Resources)
57-
set(SOURCES ${SOURCES} ${ICON_FILE})
58-
59-
6053
target_include_directories(${PROJECT} PRIVATE
6154
${Qt6Gui_PRIVATE_INCLUDE_DIRS}
6255
${Qt6Widgets_PRIVATE_INCLUDE_DIRS}
@@ -69,6 +62,7 @@ set_target_properties(${PROJECT} PROPERTIES
6962
MACOSX_BUNDLE_ICON_FILE "AppIcon"
7063
MACOSX_BUNDLE_INFO_STRING "AmneziaVPN"
7164
MACOSX_BUNDLE_BUNDLE_NAME "AmneziaVPN"
65+
MACOSX_BUNDLE_GUI_IDENTIFIER "${BUILD_IOS_APP_IDENTIFIER}"
7266
MACOSX_BUNDLE_BUNDLE_VERSION "${CMAKE_PROJECT_VERSION_TWEAK}"
7367
MACOSX_BUNDLE_LONG_VERSION_STRING "${APPLE_PROJECT_VERSION}-${CMAKE_PROJECT_VERSION_TWEAK}"
7468
MACOSX_BUNDLE_SHORT_VERSION_STRING "${APPLE_PROJECT_VERSION}"
@@ -79,14 +73,10 @@ set_target_properties(${PROJECT} PROPERTIES
7973
XCODE_ATTRIBUTE_PRODUCT_NAME "AmneziaVPN"
8074
XCODE_ATTRIBUTE_BUNDLE_INFO_STRING "AmneziaVPN"
8175
XCODE_GENERATE_SCHEME TRUE
82-
XCODE_ATTRIBUTE_ENABLE_BITCODE "NO"
8376
XCODE_ATTRIBUTE_ASSETCATALOG_COMPILER_APPICON_NAME "AppIcon"
84-
XCODE_ATTRIBUTE_TARGETED_DEVICE_FAMILY "1,2"
8577
XCODE_EMBED_FRAMEWORKS_CODE_SIGN_ON_COPY "NO"
8678
XCODE_EMBED_FRAMEWORKS_REMOVE_HEADERS_ON_COPY "YES"
87-
XCODE_ATTRIBUTE_MACOSX_DEPLOYMENT_TARGET "11.0"
8879

89-
XCODE_LINK_BUILD_PHASE_MODE KNOWN_LOCATION
9080
XCODE_ATTRIBUTE_LD_RUNPATH_SEARCH_PATHS "@executable_path/../Frameworks"
9181
XCODE_EMBED_APP_EXTENSIONS AmneziaVPNNetworkExtension
9282
)

client/core/configurators/awgConfigurator.cpp

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -96,13 +96,17 @@ ProtocolConfig AwgConfigurator::createConfig(const ServerCredentials &credential
9696
newClientConfig.specialJunk4 = configMap.value(configKey::specialJunk4);
9797
newClientConfig.specialJunk5 = configMap.value(configKey::specialJunk5);
9898

99-
if (container == DockerContainer::Awg2) {
100-
newClientConfig.cookieReplyPacketJunkSize = configMap.value(configKey::cookieReplyPacketJunkSize);
101-
newClientConfig.transportPacketJunkSize = configMap.value(configKey::transportPacketJunkSize);
102-
}
103-
104-
newClientConfig.isObfuscationEnabled = false;
105-
99+
newClientConfig.cookieReplyPacketJunkSize = configMap.value(configKey::cookieReplyPacketJunkSize);
100+
newClientConfig.transportPacketJunkSize = configMap.value(configKey::transportPacketJunkSize);
101+
102+
newClientConfig.headerProtectionKey = configMap.value(configKey::headerProtectionKey);
103+
newClientConfig.contentPaddingAddition = configMap.value(configKey::contentPaddingAddition);
104+
newClientConfig.rekeyAfterTime = configMap.value(configKey::rekeyAfterTime);
105+
newClientConfig.rekeyTimeout = configMap.value(configKey::rekeyTimeout);
106+
newClientConfig.rejectAfterTime = configMap.value(configKey::rejectAfterTime);
107+
newClientConfig.keepaliveTimeout = configMap.value(configKey::keepaliveTimeout);
108+
newClientConfig.maxHandshakeAttempts = configMap.value(configKey::maxHandshakeAttempts);
109+
106110
protocolConfig.setClientConfig(newClientConfig);
107111

108112
return protocolConfig;

client/core/configurators/wireguardConfigurator.cpp

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -228,11 +228,20 @@ ProtocolConfig WireguardConfigurator::createConfig(const ServerCredentials &cred
228228
}
229229
}
230230

231+
const bool isAwg3 = awgServerConfig && awgServerConfig->protocolVersion == protocols::awg::awgV3;
232+
231233
amnezia::ScriptVars vars = amnezia::genBaseVars(credentials, container, dnsSettings.primaryDns, dnsSettings.secondaryDns);
232234
vars.append(amnezia::genProtocolVarsForContainer(container, containerConfig));
233235
QString scriptData = amnezia::scriptData(m_configTemplate, container);
234236
QString config = m_sshSession->replaceVars(scriptData, vars);
235237

238+
// The template lists every possible key, but each parameter is optional -
239+
// drop the lines whose value came out empty
240+
static const QRegularExpression emptyValueLine(R"(^\s*\S+\s*=\s*$)");
241+
auto configTemplateLines = config.split("\n");
242+
configTemplateLines.removeIf([](const QString &line) { return emptyValueLine.match(line).hasMatch(); });
243+
config = configTemplateLines.join("\n");
244+
236245
ConnectionData connData = prepareWireguardConfig(credentials, container, wireguardServerConfig, awgServerConfig, dnsSettings, errorCode);
237246
if (errorCode != ErrorCode::NoError) {
238247
return WireGuardProtocolConfig{};
@@ -266,7 +275,8 @@ ProtocolConfig WireguardConfigurator::createConfig(const ServerCredentials &cred
266275
clientConfig.presharedKey = connData.pskKey;
267276
clientConfig.clientId = connData.clientPubKey;
268277
clientConfig.allowedIps = QStringList { "0.0.0.0/0", "::/0" };
269-
clientConfig.persistentKeepAlive = protocols::wireguard::defaultPersistentKeepAlive;
278+
clientConfig.persistentKeepAlive = isAwg3 ? protocols::awg::defaultPersistentKeepAlive
279+
: protocols::wireguard::defaultPersistentKeepAlive;
270280
clientConfig.mtu = mtu;
271281
clientConfig.isObfuscationEnabled = false;
272282

0 commit comments

Comments
 (0)