Merge branch 'dev' into android-7
# Conflicts: # CMakeLists.txt
This commit is contained in:
commit
b6118e4c9f
17 changed files with 83 additions and 129 deletions
3
.gitmodules
vendored
3
.gitmodules
vendored
|
|
@ -1,6 +1,3 @@
|
||||||
[submodule "client/3rd/OpenVPNAdapter"]
|
|
||||||
path = client/3rd/OpenVPNAdapter
|
|
||||||
url = https://github.com/amnezia-vpn/OpenVPNAdapter.git
|
|
||||||
[submodule "client/3rd/qtkeychain"]
|
[submodule "client/3rd/qtkeychain"]
|
||||||
path = client/3rd/qtkeychain
|
path = client/3rd/qtkeychain
|
||||||
url = https://github.com/frankosterfeld/qtkeychain.git
|
url = https://github.com/frankosterfeld/qtkeychain.git
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@ cmake_minimum_required(VERSION 3.25.0 FATAL_ERROR)
|
||||||
|
|
||||||
set(PROJECT AmneziaVPN)
|
set(PROJECT AmneziaVPN)
|
||||||
|
|
||||||
project(${PROJECT} VERSION 4.8.3.2
|
project(${PROJECT} VERSION 4.8.3.3
|
||||||
DESCRIPTION "AmneziaVPN"
|
DESCRIPTION "AmneziaVPN"
|
||||||
HOMEPAGE_URL "https://amnezia.org/"
|
HOMEPAGE_URL "https://amnezia.org/"
|
||||||
)
|
)
|
||||||
|
|
@ -11,7 +11,7 @@ string(TIMESTAMP CURRENT_DATE "%Y-%m-%d")
|
||||||
set(RELEASE_DATE "${CURRENT_DATE}")
|
set(RELEASE_DATE "${CURRENT_DATE}")
|
||||||
|
|
||||||
set(APP_MAJOR_VERSION ${CMAKE_PROJECT_VERSION_MAJOR}.${CMAKE_PROJECT_VERSION_MINOR}.${CMAKE_PROJECT_VERSION_PATCH})
|
set(APP_MAJOR_VERSION ${CMAKE_PROJECT_VERSION_MAJOR}.${CMAKE_PROJECT_VERSION_MINOR}.${CMAKE_PROJECT_VERSION_PATCH})
|
||||||
set(APP_ANDROID_VERSION_CODE 1075)
|
set(APP_ANDROID_VERSION_CODE 1076)
|
||||||
|
|
||||||
if(${CMAKE_SYSTEM_NAME} STREQUAL "Linux")
|
if(${CMAKE_SYSTEM_NAME} STREQUAL "Linux")
|
||||||
set(MZ_PLATFORM_NAME "linux")
|
set(MZ_PLATFORM_NAME "linux")
|
||||||
|
|
|
||||||
|
|
@ -1 +1 @@
|
||||||
Subproject commit ba580dc5bd7784f7b1e110ff0365f3286e549a61
|
Subproject commit b714700addf0c6e773367b13f2211f63110171a1
|
||||||
1
client/3rd/OpenVPNAdapter
vendored
1
client/3rd/OpenVPNAdapter
vendored
|
|
@ -1 +0,0 @@
|
||||||
Subproject commit 7c821a8d5c1ad5ad94e0763b4f25a875b5a6fe1b
|
|
||||||
|
|
@ -96,11 +96,6 @@ configure_file(${CMAKE_CURRENT_LIST_DIR}/translations/translations.qrc.in ${CMAK
|
||||||
qt6_add_resources(QRC ${I18NQRC} ${CMAKE_CURRENT_BINARY_DIR}/translations.qrc)
|
qt6_add_resources(QRC ${I18NQRC} ${CMAKE_CURRENT_BINARY_DIR}/translations.qrc)
|
||||||
# -- i18n end
|
# -- i18n end
|
||||||
|
|
||||||
if(IOS)
|
|
||||||
execute_process(COMMAND bash ${CMAKE_CURRENT_LIST_DIR}/ios/scripts/openvpn.sh args
|
|
||||||
WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR})
|
|
||||||
endif()
|
|
||||||
|
|
||||||
set(IS_CI ${CI})
|
set(IS_CI ${CI})
|
||||||
if(IS_CI)
|
if(IS_CI)
|
||||||
message("Detected CI env")
|
message("Detected CI env")
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,8 @@
|
||||||
|
|
||||||
#include <QClipboard>
|
#include <QClipboard>
|
||||||
#include <QFontDatabase>
|
#include <QFontDatabase>
|
||||||
|
#include <QLocalServer>
|
||||||
|
#include <QLocalSocket>
|
||||||
#include <QMimeData>
|
#include <QMimeData>
|
||||||
#include <QQuickItem>
|
#include <QQuickItem>
|
||||||
#include <QQuickStyle>
|
#include <QQuickStyle>
|
||||||
|
|
@ -10,8 +12,6 @@
|
||||||
#include <QTextDocument>
|
#include <QTextDocument>
|
||||||
#include <QTimer>
|
#include <QTimer>
|
||||||
#include <QTranslator>
|
#include <QTranslator>
|
||||||
#include <QLocalSocket>
|
|
||||||
#include <QLocalServer>
|
|
||||||
|
|
||||||
#include "logger.h"
|
#include "logger.h"
|
||||||
#include "ui/models/installedAppsModel.h"
|
#include "ui/models/installedAppsModel.h"
|
||||||
|
|
@ -282,7 +282,8 @@ bool AmneziaApplication::parseCommands()
|
||||||
}
|
}
|
||||||
|
|
||||||
#if !defined(Q_OS_ANDROID) && !defined(Q_OS_IOS)
|
#if !defined(Q_OS_ANDROID) && !defined(Q_OS_IOS)
|
||||||
void AmneziaApplication::startLocalServer() {
|
void AmneziaApplication::startLocalServer()
|
||||||
|
{
|
||||||
const QString serverName("AmneziaVPNInstance");
|
const QString serverName("AmneziaVPNInstance");
|
||||||
QLocalServer::removeServer(serverName);
|
QLocalServer::removeServer(serverName);
|
||||||
|
|
||||||
|
|
@ -418,7 +419,9 @@ void AmneziaApplication::initControllers()
|
||||||
&ConnectionController::onCurrentContainerUpdated);
|
&ConnectionController::onCurrentContainerUpdated);
|
||||||
|
|
||||||
connect(m_installController.get(), &InstallController::updateServerFromApiFinished, this, [this]() {
|
connect(m_installController.get(), &InstallController::updateServerFromApiFinished, this, [this]() {
|
||||||
|
if (m_reloadConfigErrorOccurredConnection) {
|
||||||
disconnect(m_reloadConfigErrorOccurredConnection);
|
disconnect(m_reloadConfigErrorOccurredConnection);
|
||||||
|
}
|
||||||
emit m_connectionController->configFromApiUpdated();
|
emit m_connectionController->configFromApiUpdated();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
@ -426,7 +429,7 @@ void AmneziaApplication::initControllers()
|
||||||
m_reloadConfigErrorOccurredConnection = connect(
|
m_reloadConfigErrorOccurredConnection = connect(
|
||||||
m_installController.get(), qOverload<ErrorCode>(&InstallController::installationErrorOccurred), this,
|
m_installController.get(), qOverload<ErrorCode>(&InstallController::installationErrorOccurred), this,
|
||||||
[this]() { emit m_vpnConnection->connectionStateChanged(Vpn::ConnectionState::Disconnected); },
|
[this]() { emit m_vpnConnection->connectionStateChanged(Vpn::ConnectionState::Disconnected); },
|
||||||
static_cast<Qt::ConnectionType>(Qt::AutoConnection || Qt::SingleShotConnection));
|
static_cast<Qt::ConnectionType>(Qt::AutoConnection | Qt::SingleShotConnection));
|
||||||
m_installController->updateServiceFromApi(m_serversModel->getDefaultServerIndex(), "", "");
|
m_installController->updateServiceFromApi(m_serversModel->getDefaultServerIndex(), "", "");
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
@ -434,7 +437,7 @@ void AmneziaApplication::initControllers()
|
||||||
m_reloadConfigErrorOccurredConnection = connect(
|
m_reloadConfigErrorOccurredConnection = connect(
|
||||||
m_installController.get(), qOverload<ErrorCode>(&InstallController::installationErrorOccurred), this,
|
m_installController.get(), qOverload<ErrorCode>(&InstallController::installationErrorOccurred), this,
|
||||||
[this]() { emit m_vpnConnection->connectionStateChanged(Vpn::ConnectionState::Disconnected); },
|
[this]() { emit m_vpnConnection->connectionStateChanged(Vpn::ConnectionState::Disconnected); },
|
||||||
static_cast<Qt::ConnectionType>(Qt::AutoConnection || Qt::SingleShotConnection));
|
static_cast<Qt::ConnectionType>(Qt::AutoConnection | Qt::SingleShotConnection));
|
||||||
m_serversModel->removeApiConfig(m_serversModel->getDefaultServerIndex());
|
m_serversModel->removeApiConfig(m_serversModel->getDefaultServerIndex());
|
||||||
m_installController->updateServiceFromTelegram(m_serversModel->getDefaultServerIndex());
|
m_installController->updateServiceFromTelegram(m_serversModel->getDefaultServerIndex());
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
|
@ -76,11 +76,7 @@ set_target_properties(${PROJECT} PROPERTIES
|
||||||
XCODE_LINK_BUILD_PHASE_MODE KNOWN_LOCATION
|
XCODE_LINK_BUILD_PHASE_MODE KNOWN_LOCATION
|
||||||
XCODE_ATTRIBUTE_LD_RUNPATH_SEARCH_PATHS "@executable_path/Frameworks"
|
XCODE_ATTRIBUTE_LD_RUNPATH_SEARCH_PATHS "@executable_path/Frameworks"
|
||||||
XCODE_EMBED_APP_EXTENSIONS networkextension
|
XCODE_EMBED_APP_EXTENSIONS networkextension
|
||||||
XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY "Apple Distribution"
|
XCODE_ATTRIBUTE_CODE_SIGN_STYLE Automatic
|
||||||
XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY[variant=Debug] "Apple Development"
|
|
||||||
XCODE_ATTRIBUTE_CODE_SIGN_STYLE Manual
|
|
||||||
XCODE_ATTRIBUTE_PROVISIONING_PROFILE_SPECIFIER "match AppStore org.amnezia.AmneziaVPN"
|
|
||||||
XCODE_ATTRIBUTE_PROVISIONING_PROFILE_SPECIFIER[variant=Debug] "match Development org.amnezia.AmneziaVPN"
|
|
||||||
)
|
)
|
||||||
set_target_properties(${PROJECT} PROPERTIES
|
set_target_properties(${PROJECT} PROPERTIES
|
||||||
XCODE_ATTRIBUTE_SWIFT_VERSION "5.0"
|
XCODE_ATTRIBUTE_SWIFT_VERSION "5.0"
|
||||||
|
|
@ -126,9 +122,9 @@ add_subdirectory(ios/networkextension)
|
||||||
add_dependencies(${PROJECT} networkextension)
|
add_dependencies(${PROJECT} networkextension)
|
||||||
|
|
||||||
set_property(TARGET ${PROJECT} PROPERTY XCODE_EMBED_FRAMEWORKS
|
set_property(TARGET ${PROJECT} PROPERTY XCODE_EMBED_FRAMEWORKS
|
||||||
"${CMAKE_CURRENT_SOURCE_DIR}/3rd/OpenVPNAdapter/build/Release-iphoneos/OpenVPNAdapter.framework"
|
"${CMAKE_CURRENT_SOURCE_DIR}/3rd-prebuilt/3rd-prebuilt/openvpn/apple/OpenVPNAdapter-ios/OpenVPNAdapter.framework"
|
||||||
)
|
)
|
||||||
|
|
||||||
set(CMAKE_XCODE_ATTRIBUTE_FRAMEWORK_SEARCH_PATHS ${CMAKE_CURRENT_SOURCE_DIR}/3rd/OpenVPNAdapter/build/Release-iphoneos)
|
set(CMAKE_XCODE_ATTRIBUTE_FRAMEWORK_SEARCH_PATHS ${CMAKE_CURRENT_SOURCE_DIR}/3rd-prebuilt/3rd-prebuilt/openvpn/apple/OpenVPNAdapter-ios/)
|
||||||
target_link_libraries("networkextension" PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/3rd/OpenVPNAdapter/build/Release-iphoneos/OpenVPNAdapter.framework")
|
target_link_libraries("networkextension" PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/3rd-prebuilt/3rd-prebuilt/openvpn/apple/OpenVPNAdapter-ios/OpenVPNAdapter.framework")
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -110,22 +110,19 @@ QMap<DockerContainer, QString> ContainerProps::containerDescriptions()
|
||||||
QObject::tr("OpenVPN is the most popular VPN protocol, with flexible configuration options. It uses its "
|
QObject::tr("OpenVPN is the most popular VPN protocol, with flexible configuration options. It uses its "
|
||||||
"own security protocol with SSL/TLS for key exchange.") },
|
"own security protocol with SSL/TLS for key exchange.") },
|
||||||
{ DockerContainer::ShadowSocks,
|
{ DockerContainer::ShadowSocks,
|
||||||
QObject::tr("Shadowsocks - masks VPN traffic, making it similar to normal web traffic, but it "
|
QObject::tr("Shadowsocks masks VPN traffic, making it resemble normal web traffic, but it may still be detected by certain analysis systems.") },
|
||||||
"may be recognized by analysis systems in some highly censored regions.") },
|
|
||||||
{ DockerContainer::Cloak,
|
{ DockerContainer::Cloak,
|
||||||
QObject::tr("OpenVPN over Cloak - OpenVPN with VPN masquerading as web traffic and protection against "
|
QObject::tr("OpenVPN over Cloak - OpenVPN with VPN masquerading as web traffic and protection against "
|
||||||
"active-probing detection. Ideal for bypassing blocking in regions with the highest levels "
|
"active-probing detection. It is very resistant to detection, but offers low speed.") },
|
||||||
"of censorship.") },
|
|
||||||
{ DockerContainer::WireGuard,
|
{ DockerContainer::WireGuard,
|
||||||
QObject::tr("WireGuard - New popular VPN protocol with high performance, high speed and low power "
|
QObject::tr("WireGuard - popular VPN protocol with high performance, high speed and low power "
|
||||||
"consumption. Recommended for regions with low levels of censorship.") },
|
"consumption.") },
|
||||||
{ DockerContainer::Awg,
|
{ DockerContainer::Awg,
|
||||||
QObject::tr("AmneziaWG - Special protocol from Amnezia, based on WireGuard. It's fast like WireGuard, "
|
QObject::tr("AmneziaWG is a special protocol from Amnezia based on WireGuard. "
|
||||||
"but very resistant to blockages. "
|
"It provides high connection speed and ensures stable operation even in the most challenging network conditions.") },
|
||||||
"Recommended for regions with high levels of censorship.") },
|
|
||||||
{ DockerContainer::Xray,
|
{ DockerContainer::Xray,
|
||||||
QObject::tr("XRay with REALITY - Suitable for countries with the highest level of internet censorship. "
|
QObject::tr("XRay with REALITY masks VPN traffic as web traffic and protects against active probing. "
|
||||||
"Traffic masking as web traffic at the TLS level, and protection against detection by active probing methods.") },
|
"It is highly resistant to detection and offers high speed.") },
|
||||||
{ DockerContainer::Ipsec,
|
{ DockerContainer::Ipsec,
|
||||||
QObject::tr("IKEv2/IPsec - Modern stable protocol, a bit faster than others, restores connection after "
|
QObject::tr("IKEv2/IPsec - Modern stable protocol, a bit faster than others, restores connection after "
|
||||||
"signal loss. It has native support on the latest versions of Android and iOS.") },
|
"signal loss. It has native support on the latest versions of Android and iOS.") },
|
||||||
|
|
@ -156,7 +153,7 @@ QMap<DockerContainer, QString> ContainerProps::containerDetailedDescriptions()
|
||||||
"* Available in the AmneziaVPN across all platforms\n"
|
"* Available in the AmneziaVPN across all platforms\n"
|
||||||
"* Normal power consumption on mobile devices\n"
|
"* Normal power consumption on mobile devices\n"
|
||||||
"* Flexible customisation to suit user needs to work with different operating systems and devices\n"
|
"* Flexible customisation to suit user needs to work with different operating systems and devices\n"
|
||||||
"* Recognised by DPI analysis systems and therefore susceptible to blocking\n"
|
"* Recognised by DPI systems and therefore susceptible to blocking\n"
|
||||||
"* Can operate over both TCP and UDP network protocols.") },
|
"* Can operate over both TCP and UDP network protocols.") },
|
||||||
{ DockerContainer::ShadowSocks,
|
{ DockerContainer::ShadowSocks,
|
||||||
QObject::tr("Shadowsocks, inspired by the SOCKS5 protocol, safeguards the connection using the AEAD cipher. "
|
QObject::tr("Shadowsocks, inspired by the SOCKS5 protocol, safeguards the connection using the AEAD cipher. "
|
||||||
|
|
@ -169,28 +166,26 @@ QMap<DockerContainer, QString> ContainerProps::containerDetailedDescriptions()
|
||||||
"* Works over TCP network protocol.") },
|
"* Works over TCP network protocol.") },
|
||||||
{ DockerContainer::Cloak,
|
{ DockerContainer::Cloak,
|
||||||
QObject::tr("This is a combination of the OpenVPN protocol and the Cloak plugin designed specifically for "
|
QObject::tr("This is a combination of the OpenVPN protocol and the Cloak plugin designed specifically for "
|
||||||
"protecting against blocking.\n\n"
|
"protecting against detection.\n\n"
|
||||||
"OpenVPN provides a secure VPN connection by encrypting all internet traffic between the client "
|
"OpenVPN provides a secure VPN connection by encrypting all internet traffic between the client "
|
||||||
"and the server.\n\n"
|
"and the server.\n\n"
|
||||||
"Cloak protects OpenVPN from detection and blocking. \n\n"
|
"Cloak protects OpenVPN from detection. \n\n"
|
||||||
"Cloak can modify packet metadata so that it completely masks VPN traffic as normal web traffic, "
|
"Cloak can modify packet metadata so that it completely masks VPN traffic as normal web traffic, "
|
||||||
"and also protects the VPN from detection by Active Probing. This makes it very resistant to "
|
"and also protects the VPN from detection by Active Probing. This makes it very resistant to "
|
||||||
"being detected\n\n"
|
"being detected\n\n"
|
||||||
"Immediately after receiving the first data packet, Cloak authenticates the incoming connection. "
|
"Immediately after receiving the first data packet, Cloak authenticates the incoming connection. "
|
||||||
"If authentication fails, the plugin masks the server as a fake website and your VPN becomes "
|
"If authentication fails, the plugin masks the server as a fake website and your VPN becomes "
|
||||||
"invisible to analysis systems.\n\n"
|
"invisible to analysis systems.\n\n"
|
||||||
"If there is a extreme level of Internet censorship in your region, we advise you to use only "
|
|
||||||
"OpenVPN over Cloak from the first connection\n\n"
|
|
||||||
"* Available in the AmneziaVPN across all platforms\n"
|
"* Available in the AmneziaVPN across all platforms\n"
|
||||||
"* High power consumption on mobile devices\n"
|
"* High power consumption on mobile devices\n"
|
||||||
"* Flexible settings\n"
|
"* Flexible settings\n"
|
||||||
"* Not recognised by DPI analysis systems\n"
|
"* Not recognised by detection systems\n"
|
||||||
"* Works over TCP network protocol, 443 port.\n") },
|
"* Works over TCP network protocol, 443 port.\n") },
|
||||||
{ DockerContainer::WireGuard,
|
{ DockerContainer::WireGuard,
|
||||||
QObject::tr("A relatively new popular VPN protocol with a simplified architecture.\n"
|
QObject::tr("A relatively new popular VPN protocol with a simplified architecture.\n"
|
||||||
"WireGuard provides stable VPN connection and high performance on all devices. It uses hard-coded encryption "
|
"WireGuard provides stable VPN connection and high performance on all devices. It uses hard-coded encryption "
|
||||||
"settings. WireGuard compared to OpenVPN has lower latency and better data transfer throughput.\n"
|
"settings. WireGuard compared to OpenVPN has lower latency and better data transfer throughput.\n"
|
||||||
"WireGuard is very susceptible to blocking due to its distinct packet signatures. "
|
"WireGuard is very susceptible to detection and blocking due to its distinct packet signatures. "
|
||||||
"Unlike some other VPN protocols that employ obfuscation techniques, "
|
"Unlike some other VPN protocols that employ obfuscation techniques, "
|
||||||
"the consistent signature patterns of WireGuard packets can be more easily identified and "
|
"the consistent signature patterns of WireGuard packets can be more easily identified and "
|
||||||
"thus blocked by advanced Deep Packet Inspection (DPI) systems and other network monitoring tools.\n\n"
|
"thus blocked by advanced Deep Packet Inspection (DPI) systems and other network monitoring tools.\n\n"
|
||||||
|
|
@ -213,18 +208,18 @@ QMap<DockerContainer, QString> ContainerProps::containerDetailedDescriptions()
|
||||||
"* Available in the AmneziaVPN across all platforms\n"
|
"* Available in the AmneziaVPN across all platforms\n"
|
||||||
"* Low power consumption\n"
|
"* Low power consumption\n"
|
||||||
"* Minimum number of settings\n"
|
"* Minimum number of settings\n"
|
||||||
"* Not recognised by DPI analysis systems, resistant to blocking\n"
|
"* Not recognised by traffic analysis systems\n"
|
||||||
"* Works over UDP network protocol.") },
|
"* Works over UDP network protocol.") },
|
||||||
{ DockerContainer::Xray,
|
{ DockerContainer::Xray,
|
||||||
QObject::tr("The REALITY protocol, a pioneering development by the creators of XRay, "
|
QObject::tr("The REALITY protocol, a pioneering development by the creators of XRay, "
|
||||||
"is specifically designed to counteract the highest levels of internet censorship through its novel approach to evasion.\n"
|
"is designed to provide the highest level of protection against detection through its innovative approach to security and privacy.\n"
|
||||||
"It uniquely identifies censors during the TLS handshake phase, seamlessly operating as a proxy for legitimate clients while diverting censors to genuine websites like google.com, "
|
"It uniquely identifies attackers during the TLS handshake phase, seamlessly operating as a proxy for legitimate clients while diverting attackers to genuine websites, "
|
||||||
"thus presenting an authentic TLS certificate and data. \n"
|
"thus presenting an authentic TLS certificate and data. \n"
|
||||||
"This advanced capability differentiates REALITY from similar technologies by its ability to disguise web traffic as coming from random, "
|
"This advanced capability differentiates REALITY from similar technologies by its ability to disguise web traffic as coming from random, "
|
||||||
"legitimate sites without the need for specific configurations. \n"
|
"legitimate sites without the need for specific configurations. \n"
|
||||||
"Unlike older protocols such as VMess, VLESS, and the XTLS-Vision transport, "
|
"Unlike older protocols such as VMess, VLESS, and the XTLS-Vision transport, "
|
||||||
"REALITY's innovative \"friend or foe\" recognition at the TLS handshake enhances security and circumvents detection by sophisticated DPI systems employing active probing techniques. "
|
"REALITY's innovative \"friend or foe\" recognition at the TLS handshake enhances security. "
|
||||||
"This makes REALITY a robust solution for maintaining internet freedom in environments with stringent censorship.")
|
"This makes REALITY a robust solution for maintaining internet freedom.")
|
||||||
},
|
},
|
||||||
{ DockerContainer::Ipsec,
|
{ DockerContainer::Ipsec,
|
||||||
QObject::tr("IKEv2, paired with the IPSec encryption layer, stands as a modern and stable VPN protocol.\n"
|
QObject::tr("IKEv2, paired with the IPSec encryption layer, stands as a modern and stable VPN protocol.\n"
|
||||||
|
|
@ -332,9 +327,7 @@ QStringList ContainerProps::fixedPortsForContainer(DockerContainer c)
|
||||||
bool ContainerProps::isEasySetupContainer(DockerContainer container)
|
bool ContainerProps::isEasySetupContainer(DockerContainer container)
|
||||||
{
|
{
|
||||||
switch (container) {
|
switch (container) {
|
||||||
case DockerContainer::WireGuard: return true;
|
|
||||||
case DockerContainer::Awg: return true;
|
case DockerContainer::Awg: return true;
|
||||||
// case DockerContainer::Cloak: return true;
|
|
||||||
default: return false;
|
default: return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -342,9 +335,7 @@ bool ContainerProps::isEasySetupContainer(DockerContainer container)
|
||||||
QString ContainerProps::easySetupHeader(DockerContainer container)
|
QString ContainerProps::easySetupHeader(DockerContainer container)
|
||||||
{
|
{
|
||||||
switch (container) {
|
switch (container) {
|
||||||
case DockerContainer::WireGuard: return tr("Low");
|
case DockerContainer::Awg: return tr("Automatic");
|
||||||
case DockerContainer::Awg: return tr("High");
|
|
||||||
// case DockerContainer::Cloak: return tr("Extreme");
|
|
||||||
default: return "";
|
default: return "";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -352,10 +343,8 @@ QString ContainerProps::easySetupHeader(DockerContainer container)
|
||||||
QString ContainerProps::easySetupDescription(DockerContainer container)
|
QString ContainerProps::easySetupDescription(DockerContainer container)
|
||||||
{
|
{
|
||||||
switch (container) {
|
switch (container) {
|
||||||
case DockerContainer::WireGuard: return tr("I just want to increase the level of my privacy.");
|
case DockerContainer::Awg: return tr("AmneziaWG protocol will be installed. "
|
||||||
case DockerContainer::Awg: return tr("I want to bypass censorship. This option recommended in most cases.");
|
"It provides high connection speed and ensures stable operation even in the most challenging network conditions.");
|
||||||
// case DockerContainer::Cloak:
|
|
||||||
// return tr("Most VPN protocols are blocked. Recommended if other options are not working.");
|
|
||||||
default: return "";
|
default: return "";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -363,9 +352,7 @@ QString ContainerProps::easySetupDescription(DockerContainer container)
|
||||||
int ContainerProps::easySetupOrder(DockerContainer container)
|
int ContainerProps::easySetupOrder(DockerContainer container)
|
||||||
{
|
{
|
||||||
switch (container) {
|
switch (container) {
|
||||||
case DockerContainer::WireGuard: return 3;
|
case DockerContainer::Awg: return 1;
|
||||||
case DockerContainer::Awg: return 2;
|
|
||||||
// case DockerContainer::Cloak: return 1;
|
|
||||||
default: return 0;
|
default: return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -308,6 +308,8 @@ void ApiController::updateServerConfigFromApi(const QString &installationUuid, c
|
||||||
if (reply->error() == QNetworkReply::NetworkError::OperationCanceledError
|
if (reply->error() == QNetworkReply::NetworkError::OperationCanceledError
|
||||||
|| reply->error() == QNetworkReply::NetworkError::TimeoutError) {
|
|| reply->error() == QNetworkReply::NetworkError::TimeoutError) {
|
||||||
emit errorOccurred(ErrorCode::ApiConfigTimeoutError);
|
emit errorOccurred(ErrorCode::ApiConfigTimeoutError);
|
||||||
|
} else if (reply->error() == QNetworkReply::NetworkError::SslHandshakeFailedError) {
|
||||||
|
emit errorOccurred(ErrorCode::ApiConfigSslError);
|
||||||
} else {
|
} else {
|
||||||
QString err = reply->errorString();
|
QString err = reply->errorString();
|
||||||
qDebug() << QString::fromUtf8(reply->readAll());
|
qDebug() << QString::fromUtf8(reply->readAll());
|
||||||
|
|
@ -323,10 +325,8 @@ void ApiController::updateServerConfigFromApi(const QString &installationUuid, c
|
||||||
|
|
||||||
QObject::connect(reply, &QNetworkReply::errorOccurred,
|
QObject::connect(reply, &QNetworkReply::errorOccurred,
|
||||||
[this, reply](QNetworkReply::NetworkError error) { qDebug() << reply->errorString() << error; });
|
[this, reply](QNetworkReply::NetworkError error) { qDebug() << reply->errorString() << error; });
|
||||||
connect(reply, &QNetworkReply::sslErrors, [this, reply](const QList<QSslError> &errors) {
|
|
||||||
qDebug().noquote() << errors;
|
connect(reply, &QNetworkReply::sslErrors, [this, reply](const QList<QSslError> &errors) { qDebug().noquote() << errors; });
|
||||||
emit errorOccurred(ErrorCode::ApiConfigSslError);
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -27,12 +27,7 @@ set_target_properties(networkextension PROPERTIES
|
||||||
|
|
||||||
XCODE_ATTRIBUTE_LD_RUNPATH_SEARCH_PATHS "@executable_path/../../Frameworks"
|
XCODE_ATTRIBUTE_LD_RUNPATH_SEARCH_PATHS "@executable_path/../../Frameworks"
|
||||||
|
|
||||||
XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY "Apple Distribution"
|
XCODE_ATTRIBUTE_CODE_SIGN_STYLE Automatic
|
||||||
XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY[variant=Debug] "Apple Development"
|
|
||||||
|
|
||||||
XCODE_ATTRIBUTE_CODE_SIGN_STYLE Manual
|
|
||||||
XCODE_ATTRIBUTE_PROVISIONING_PROFILE_SPECIFIER "match AppStore org.amnezia.AmneziaVPN.network-extension"
|
|
||||||
XCODE_ATTRIBUTE_PROVISIONING_PROFILE_SPECIFIER[variant=Debug] "match Development org.amnezia.AmneziaVPN.network-extension"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
set_target_properties(networkextension PROPERTIES
|
set_target_properties(networkextension PROPERTIES
|
||||||
|
|
|
||||||
|
|
@ -1,19 +0,0 @@
|
||||||
XCODEBUILD="/usr/bin/xcodebuild"
|
|
||||||
WORKINGDIR=`pwd`
|
|
||||||
PATCH="/usr/bin/patch"
|
|
||||||
|
|
||||||
cat $WORKINGDIR/3rd/OpenVPNAdapter/Configuration/Project.xcconfig > $WORKINGDIR/3rd/OpenVPNAdapter/Configuration/amnezia.xcconfig
|
|
||||||
cat << EOF >> $WORKINGDIR/3rd/OpenVPNAdapter/Configuration/amnezia.xcconfig
|
|
||||||
PROJECT_TEMP_DIR = $WORKINGDIR/3rd/OpenVPNAdapter/build/OpenVPNAdapter.build
|
|
||||||
CONFIGURATION_BUILD_DIR = $WORKINGDIR/3rd/OpenVPNAdapter/build/Release-iphoneos
|
|
||||||
BUILT_PRODUCTS_DIR = $WORKINGDIR/3rd/OpenVPNAdapter/build/Release-iphoneos
|
|
||||||
EOF
|
|
||||||
|
|
||||||
|
|
||||||
cd 3rd/OpenVPNAdapter
|
|
||||||
if $XCODEBUILD -scheme OpenVPNAdapter -configuration Release -xcconfig Configuration/amnezia.xcconfig -sdk iphoneos -destination 'generic/platform=iOS' -project OpenVPNAdapter.xcodeproj ; then
|
|
||||||
echo "OpenVPNAdapter built successfully"
|
|
||||||
else
|
|
||||||
echo "OpenVPNAdapter build failed"
|
|
||||||
fi
|
|
||||||
cd ../../
|
|
||||||
|
|
@ -1,4 +1,5 @@
|
||||||
import HevSocks5Tunnel
|
import HevSocks5Tunnel
|
||||||
|
import NetworkExtension
|
||||||
|
|
||||||
public enum Socks5Tunnel {
|
public enum Socks5Tunnel {
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -238,7 +238,7 @@ ErrorCode Ikev2Protocol::start()
|
||||||
"-CipherTransformConstants GCMAES128 "
|
"-CipherTransformConstants GCMAES128 "
|
||||||
"-EncryptionMethod AES256 "
|
"-EncryptionMethod AES256 "
|
||||||
"-IntegrityCheckMethod SHA256 "
|
"-IntegrityCheckMethod SHA256 "
|
||||||
"-PfsGroup None "
|
"-PfsGroup PFS2048 "
|
||||||
"-DHGroup Group14 "
|
"-DHGroup Group14 "
|
||||||
"-PassThru -Force\"")
|
"-PassThru -Force\"")
|
||||||
.arg(tunnelName());
|
.arg(tunnelName());
|
||||||
|
|
|
||||||
|
|
@ -33,14 +33,14 @@ conn shared
|
||||||
right=%any
|
right=%any
|
||||||
encapsulation=yes
|
encapsulation=yes
|
||||||
authby=secret
|
authby=secret
|
||||||
pfs=no
|
pfs=yes
|
||||||
rekey=no
|
rekey=no
|
||||||
keyingtries=5
|
keyingtries=5
|
||||||
dpddelay=30
|
dpddelay=30
|
||||||
dpdtimeout=120
|
dpdtimeout=120
|
||||||
dpdaction=clear
|
dpdaction=clear
|
||||||
ikev2=never
|
ikev2=never
|
||||||
ike=aes256-sha2,aes128-sha2,aes256-sha1,aes128-sha1,aes256-sha2;modp1024,aes128-sha1;modp1024
|
ike=aes256-sha2,aes128-sha2,aes256-sha1,aes128-sha1,aes256-sha2;modp2048,aes128-sha1;modp2048
|
||||||
phase2alg=aes_gcm-null,aes128-sha1,aes256-sha1,aes256-sha2_512,aes128-sha2,aes256-sha2
|
phase2alg=aes_gcm-null,aes128-sha1,aes256-sha1,aes256-sha2_512,aes128-sha2,aes256-sha2
|
||||||
ikelifetime=24h
|
ikelifetime=24h
|
||||||
salifetime=24h
|
salifetime=24h
|
||||||
|
|
@ -244,9 +244,9 @@ conn ikev2-cp
|
||||||
auto=add
|
auto=add
|
||||||
ikev2=insist
|
ikev2=insist
|
||||||
rekey=no
|
rekey=no
|
||||||
pfs=no
|
pfs=yes
|
||||||
ike=aes256-sha2,aes128-sha2,aes256-sha1,aes128-sha1
|
ike=aes256-sha2,aes128-sha2,aes256-sha1,aes128-sha1,aes256-sha2;modp2048,aes128-sha1;modp2048
|
||||||
phase2alg=aes_gcm-null,aes128-sha1,aes256-sha1,aes128-sha2,aes256-sha2
|
phase2alg=aes_gcm-null,aes128-sha1,aes256-sha1,aes256-sha2_512,aes128-sha2,aes256-sha2
|
||||||
ikelifetime=24h
|
ikelifetime=24h
|
||||||
salifetime=24h
|
salifetime=24h
|
||||||
encapsulation=yes
|
encapsulation=yes
|
||||||
|
|
|
||||||
|
|
@ -65,11 +65,11 @@ QVariant ApiServicesModel::data(const QModelIndex &index, int role) const
|
||||||
case CardDescriptionRole: {
|
case CardDescriptionRole: {
|
||||||
auto speed = apiServiceData.serviceInfo.speed;
|
auto speed = apiServiceData.serviceInfo.speed;
|
||||||
if (serviceType == serviceType::amneziaPremium) {
|
if (serviceType == serviceType::amneziaPremium) {
|
||||||
return tr("Classic VPN for comfortable work, downloading large files and watching videos. "
|
return tr("Amnezia Premium is VPN for comfortable work, downloading large files and watching videos in 8K resolution. "
|
||||||
"Works for any sites. Speed up to %1 MBit/s")
|
"Works for any sites with no restrictions. Speed up to %1 MBit/s. Unlimited traffic.")
|
||||||
.arg(speed);
|
.arg(speed);
|
||||||
} else if (serviceType == serviceType::amneziaFree) {
|
} else if (serviceType == serviceType::amneziaFree) {
|
||||||
QString description = tr("VPN to access blocked sites in regions with high levels of Internet censorship. ");
|
QString description = tr("AmneziaFree provides free unlimited access to a basic set of web sites, such as Facebook, Instagram, Twitter (X), Discord, Telegram, and others. YouTube is not included in the free plan.");
|
||||||
if (!isServiceAvailable) {
|
if (!isServiceAvailable) {
|
||||||
description += tr("<p><a style=\"color: #EB5757;\">Not available in your region. If you have VPN enabled, disable it, "
|
description += tr("<p><a style=\"color: #EB5757;\">Not available in your region. If you have VPN enabled, disable it, "
|
||||||
"return to the previous screen, and try again.</a>");
|
"return to the previous screen, and try again.</a>");
|
||||||
|
|
@ -79,11 +79,10 @@ QVariant ApiServicesModel::data(const QModelIndex &index, int role) const
|
||||||
}
|
}
|
||||||
case ServiceDescriptionRole: {
|
case ServiceDescriptionRole: {
|
||||||
if (serviceType == serviceType::amneziaPremium) {
|
if (serviceType == serviceType::amneziaPremium) {
|
||||||
return tr("Amnezia Premium - A classic VPN for comfortable work, downloading large files, and watching videos in high "
|
return tr("Amnezia Premium is VPN for comfortable work, downloading large files and watching videos in 8K resolution. "
|
||||||
"resolution. "
|
"Works for any sites with no restrictions.");
|
||||||
"It works for all websites, even in countries with the highest level of internet censorship.");
|
|
||||||
} else {
|
} else {
|
||||||
return tr("Amnezia Free is a free VPN to bypass blocking in countries with high levels of internet censorship");
|
return tr("AmneziaFree provides free unlimited access to a basic set of web sites, such as Facebook, Instagram, Twitter (X), Discord, Telegram, and others. YouTube is not included in the free plan.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
case IsServiceAvailableRole: {
|
case IsServiceAvailableRole: {
|
||||||
|
|
|
||||||
|
|
@ -108,7 +108,7 @@ QString LanguageModel::getCurrentSiteUrl()
|
||||||
{
|
{
|
||||||
auto language = static_cast<LanguageSettings::AvailableLanguageEnum>(getCurrentLanguageIndex());
|
auto language = static_cast<LanguageSettings::AvailableLanguageEnum>(getCurrentLanguageIndex());
|
||||||
switch (language) {
|
switch (language) {
|
||||||
case LanguageSettings::AvailableLanguageEnum::Russian: return "https://storage.googleapis.com/kldscp/amnezia.org";
|
case LanguageSettings::AvailableLanguageEnum::Russian: return "https://storage.googleapis.com/amnezia/amnezia.org";
|
||||||
default: return "https://amnezia.org";
|
default: return "https://amnezia.org";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -65,7 +65,7 @@ PageType {
|
||||||
implicitWidth: parent.width
|
implicitWidth: parent.width
|
||||||
headerTextMaximumLineCount: 10
|
headerTextMaximumLineCount: 10
|
||||||
|
|
||||||
headerText: qsTr("What is the level of internet control in your region?")
|
headerText: qsTr("Choose Installation Type")
|
||||||
}
|
}
|
||||||
|
|
||||||
ButtonGroup {
|
ButtonGroup {
|
||||||
|
|
@ -139,7 +139,8 @@ PageType {
|
||||||
CardType {
|
CardType {
|
||||||
implicitWidth: parent.width
|
implicitWidth: parent.width
|
||||||
|
|
||||||
headerText: qsTr("Choose a VPN protocol")
|
headerText: qsTr("Manual")
|
||||||
|
bodyText: qsTr("Choose a VPN protocol")
|
||||||
|
|
||||||
ButtonGroup.group: buttonGroup
|
ButtonGroup.group: buttonGroup
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue