Merge branch 'dev' into feature/split-tunnel-mobile

This commit is contained in:
Mykola Baibuz 2023-10-22 15:26:20 -04:00
commit c15665803d
40 changed files with 651 additions and 375 deletions

View file

@ -2,7 +2,7 @@ cmake_minimum_required(VERSION 3.25.0 FATAL_ERROR)
set(PROJECT AmneziaVPN)
project(${PROJECT} VERSION 4.0.8.2
project(${PROJECT} VERSION 4.0.8.6
DESCRIPTION "AmneziaVPN"
HOMEPAGE_URL "https://amnezia.org/"
)

@ -1 +1 @@
Subproject commit 15b0ff395d9d372339c5ea8ea35cb2715b975ea9
Subproject commit ac32d33555bd62f0b0af314b1e5119d6d78a1a4e

View file

@ -286,6 +286,8 @@ void AmneziaApplication::initModels()
m_engine->rootContext()->setContextProperty("ServersModel", m_serversModel.get());
connect(m_serversModel.get(), &ServersModel::currentlyProcessedServerIndexChanged, m_containersModel.get(),
&ContainersModel::setCurrentlyProcessedServerIndex);
connect(m_serversModel.get(), &ServersModel::defaultServerIndexChanged, m_containersModel.get(),
&ContainersModel::setCurrentlyProcessedServerIndex);
m_languageModel.reset(new LanguageModel(m_settings, this));
m_engine->rootContext()->setContextProperty("LanguageModel", m_languageModel.get());

View file

@ -45,6 +45,7 @@
android:label="-- %%INSERT_APP_NAME%% --"
android:screenOrientation="unspecified"
android:launchMode="singleInstance"
android:windowSoftInputMode="adjustResize"
android:exported="true">
<!-- android:theme="@style/splashScreenTheme"-->

View file

@ -138,7 +138,7 @@ android {
resConfig "en"
minSdkVersion = 24
targetSdkVersion = 34
versionCode 36 // Change to a higher number
versionCode 37 // Change to a higher number
versionName "4.0.8" // Change to a higher number
javaCompileOptions.annotationProcessorOptions.arguments = [

View file

@ -17,43 +17,31 @@ QString AwgConfigurator::genAwgConfig(const ServerCredentials &credentials,
QString config = WireguardConfigurator::genWireguardConfig(credentials, container, containerConfig, errorCode);
QJsonObject jsonConfig = QJsonDocument::fromJson(config.toUtf8()).object();
QString awgConfig = jsonConfig.value(config_key::config).toString();
ServerController serverController(m_settings);
QString serverConfig = serverController.getTextFileFromContainer(container, credentials, protocols::awg::serverConfigPath, errorCode);
QMap<QString, QString> serverConfigMap;
auto serverConfigLines = serverConfig.split("\n");
for (auto &line : serverConfigLines) {
QMap<QString, QString> configMap;
auto configLines = awgConfig.split("\n");
for (auto &line : configLines) {
auto trimmedLine = line.trimmed();
if (trimmedLine.startsWith("[") && trimmedLine.endsWith("]")) {
continue;
} else {
QStringList parts = trimmedLine.split(" = ");
if (parts.count() == 2) {
serverConfigMap.insert(parts[0].trimmed(), parts[1].trimmed());
configMap.insert(parts[0].trimmed(), parts[1].trimmed());
}
}
}
config.replace("$JUNK_PACKET_COUNT", serverConfigMap.value(config_key::junkPacketCount));
config.replace("$JUNK_PACKET_MIN_SIZE", serverConfigMap.value(config_key::junkPacketMinSize));
config.replace("$JUNK_PACKET_MAX_SIZE", serverConfigMap.value(config_key::junkPacketMaxSize));
config.replace("$INIT_PACKET_JUNK_SIZE", serverConfigMap.value(config_key::initPacketJunkSize));
config.replace("$RESPONSE_PACKET_JUNK_SIZE", serverConfigMap.value(config_key::responsePacketJunkSize));
config.replace("$INIT_PACKET_MAGIC_HEADER", serverConfigMap.value(config_key::initPacketMagicHeader));
config.replace("$RESPONSE_PACKET_MAGIC_HEADER", serverConfigMap.value(config_key::responsePacketMagicHeader));
config.replace("$UNDERLOAD_PACKET_MAGIC_HEADER", serverConfigMap.value(config_key::underloadPacketMagicHeader));
config.replace("$TRANSPORT_PACKET_MAGIC_HEADER", serverConfigMap.value(config_key::transportPacketMagicHeader));
jsonConfig[config_key::junkPacketCount] = serverConfigMap.value(config_key::junkPacketCount);
jsonConfig[config_key::junkPacketMinSize] = serverConfigMap.value(config_key::junkPacketMinSize);
jsonConfig[config_key::junkPacketMaxSize] = serverConfigMap.value(config_key::junkPacketMaxSize);
jsonConfig[config_key::initPacketJunkSize] = serverConfigMap.value(config_key::initPacketJunkSize);
jsonConfig[config_key::responsePacketJunkSize] = serverConfigMap.value(config_key::responsePacketJunkSize);
jsonConfig[config_key::initPacketMagicHeader] = serverConfigMap.value(config_key::initPacketMagicHeader);
jsonConfig[config_key::responsePacketMagicHeader] = serverConfigMap.value(config_key::responsePacketMagicHeader);
jsonConfig[config_key::underloadPacketMagicHeader] = serverConfigMap.value(config_key::underloadPacketMagicHeader);
jsonConfig[config_key::transportPacketMagicHeader] = serverConfigMap.value(config_key::transportPacketMagicHeader);
jsonConfig[config_key::junkPacketCount] = configMap.value(config_key::junkPacketCount);
jsonConfig[config_key::junkPacketMinSize] = configMap.value(config_key::junkPacketMinSize);
jsonConfig[config_key::junkPacketMaxSize] = configMap.value(config_key::junkPacketMaxSize);
jsonConfig[config_key::initPacketJunkSize] = configMap.value(config_key::initPacketJunkSize);
jsonConfig[config_key::responsePacketJunkSize] = configMap.value(config_key::responsePacketJunkSize);
jsonConfig[config_key::initPacketMagicHeader] = configMap.value(config_key::initPacketMagicHeader);
jsonConfig[config_key::responsePacketMagicHeader] = configMap.value(config_key::responsePacketMagicHeader);
jsonConfig[config_key::underloadPacketMagicHeader] = configMap.value(config_key::underloadPacketMagicHeader);
jsonConfig[config_key::transportPacketMagicHeader] = configMap.value(config_key::transportPacketMagicHeader);
return QJsonDocument(jsonConfig).toJson();
}

View file

@ -16,11 +16,11 @@ namespace amnezia
Q_NAMESPACE
enum DockerContainer {
None = 0,
OpenVpn,
ShadowSocks,
Cloak,
WireGuard,
Awg,
WireGuard,
OpenVpn,
Cloak,
ShadowSocks,
Ipsec,
// non-vpn

View file

@ -337,7 +337,7 @@ bool ServerController::isReinstallContainerRequired(DockerContainer container, c
!= newProtoConfig.value(config_key::port).toString(protocols::shadowsocks::defaultPort))
return true;
}
if (container == DockerContainer::Awg) {
return true;
}
@ -490,8 +490,7 @@ ServerController::Vars ServerController::genVarsForScript(const ServerCredential
const QJsonObject &cloakConfig = config.value(ProtocolProps::protoToString(Proto::Cloak)).toObject();
const QJsonObject &ssConfig = config.value(ProtocolProps::protoToString(Proto::ShadowSocks)).toObject();
const QJsonObject &wireguarConfig = config.value(ProtocolProps::protoToString(Proto::WireGuard)).toObject();
const QJsonObject &amneziaWireguarConfig =
config.value(ProtocolProps::protoToString(Proto::Awg)).toObject();
const QJsonObject &amneziaWireguarConfig = config.value(ProtocolProps::protoToString(Proto::Awg)).toObject();
const QJsonObject &sftpConfig = config.value(ProtocolProps::protoToString(Proto::Sftp)).toObject();
Vars vars;
@ -591,33 +590,21 @@ ServerController::Vars ServerController::genVarsForScript(const ServerCredential
// Amnezia wireguard vars
vars.append({ { "$AWG_SERVER_PORT",
amneziaWireguarConfig.value(config_key::port).toString(protocols::awg::defaultPort) } });
vars.append({ { "$JUNK_PACKET_COUNT",
amneziaWireguarConfig.value(config_key::junkPacketCount)
.toString(protocols::awg::defaultJunkPacketCount) } });
vars.append({ { "$JUNK_PACKET_MIN_SIZE",
amneziaWireguarConfig.value(config_key::junkPacketMinSize)
.toString(protocols::awg::defaultJunkPacketMinSize) } });
vars.append({ { "$JUNK_PACKET_MAX_SIZE",
amneziaWireguarConfig.value(config_key::junkPacketMaxSize)
.toString(protocols::awg::defaultJunkPacketMaxSize) } });
vars.append({ { "$INIT_PACKET_JUNK_SIZE",
amneziaWireguarConfig.value(config_key::initPacketJunkSize)
.toString(protocols::awg::defaultInitPacketJunkSize) } });
vars.append({ { "$JUNK_PACKET_COUNT", amneziaWireguarConfig.value(config_key::junkPacketCount).toString() } });
vars.append({ { "$JUNK_PACKET_MIN_SIZE", amneziaWireguarConfig.value(config_key::junkPacketMinSize).toString() } });
vars.append({ { "$JUNK_PACKET_MAX_SIZE", amneziaWireguarConfig.value(config_key::junkPacketMaxSize).toString() } });
vars.append({ { "$INIT_PACKET_JUNK_SIZE", amneziaWireguarConfig.value(config_key::initPacketJunkSize).toString() } });
vars.append({ { "$RESPONSE_PACKET_JUNK_SIZE",
amneziaWireguarConfig.value(config_key::responsePacketJunkSize)
.toString(protocols::awg::defaultResponsePacketJunkSize) } });
amneziaWireguarConfig.value(config_key::responsePacketJunkSize).toString() } });
vars.append({ { "$INIT_PACKET_MAGIC_HEADER",
amneziaWireguarConfig.value(config_key::initPacketMagicHeader)
.toString(protocols::awg::defaultInitPacketMagicHeader) } });
amneziaWireguarConfig.value(config_key::initPacketMagicHeader).toString() } });
vars.append({ { "$RESPONSE_PACKET_MAGIC_HEADER",
amneziaWireguarConfig.value(config_key::responsePacketMagicHeader)
.toString(protocols::awg::defaultResponsePacketMagicHeader) } });
amneziaWireguarConfig.value(config_key::responsePacketMagicHeader).toString() } });
vars.append({ { "$UNDERLOAD_PACKET_MAGIC_HEADER",
amneziaWireguarConfig.value(config_key::underloadPacketMagicHeader)
.toString(protocols::awg::defaultUnderloadPacketMagicHeader) } });
amneziaWireguarConfig.value(config_key::underloadPacketMagicHeader).toString() } });
vars.append({ { "$TRANSPORT_PACKET_MAGIC_HEADER",
amneziaWireguarConfig.value(config_key::transportPacketMagicHeader)
.toString(protocols::awg::defaultTransportPacketMagicHeader) } });
amneziaWireguarConfig.value(config_key::transportPacketMagicHeader).toString() } });
QString serverIp = Utils::getIPAddress(credentials.hostName);
if (!serverIp.isEmpty()) {
@ -847,6 +834,34 @@ ErrorCode ServerController::getAlreadyInstalledContainers(const ServerCredential
containerConfig.insert(config_key::port, port);
containerConfig.insert(config_key::transport_proto, transportProto);
if (protocol == Proto::Awg) {
QString serverConfig = getTextFileFromContainer(container, credentials, protocols::awg::serverConfigPath, &errorCode);
QMap<QString, QString> serverConfigMap;
auto serverConfigLines = serverConfig.split("\n");
for (auto &line : serverConfigLines) {
auto trimmedLine = line.trimmed();
if (trimmedLine.startsWith("[") && trimmedLine.endsWith("]")) {
continue;
} else {
QStringList parts = trimmedLine.split(" = ");
if (parts.count() == 2) {
serverConfigMap.insert(parts[0].trimmed(), parts[1].trimmed());
}
}
}
containerConfig[config_key::junkPacketCount] = serverConfigMap.value(config_key::junkPacketCount);
containerConfig[config_key::junkPacketMinSize] = serverConfigMap.value(config_key::junkPacketMinSize);
containerConfig[config_key::junkPacketMaxSize] = serverConfigMap.value(config_key::junkPacketMaxSize);
containerConfig[config_key::initPacketJunkSize] = serverConfigMap.value(config_key::initPacketJunkSize);
containerConfig[config_key::responsePacketJunkSize] = serverConfigMap.value(config_key::responsePacketJunkSize);
containerConfig[config_key::initPacketMagicHeader] = serverConfigMap.value(config_key::initPacketMagicHeader);
containerConfig[config_key::responsePacketMagicHeader] = serverConfigMap.value(config_key::responsePacketMagicHeader);
containerConfig[config_key::underloadPacketMagicHeader] = serverConfigMap.value(config_key::underloadPacketMagicHeader);
containerConfig[config_key::transportPacketMagicHeader] = serverConfigMap.value(config_key::transportPacketMagicHeader);
}
config.insert(config_key::container, ContainerProps::containerToString(container));
}
config.insert(ProtocolProps::protoToString(protocol), containerConfig);

View file

@ -1,5 +1,7 @@
#include "protocols_defs.h"
#include <QRandomGenerator>
using namespace amnezia;
QDebug operator<<(QDebug debug, const amnezia::ProtocolEnumNS::Proto &p)
@ -98,15 +100,28 @@ amnezia::ServiceType ProtocolProps::protocolService(Proto p)
}
}
int ProtocolProps::getPortForInstall(Proto p)
{
switch (p) {
case Awg:
case WireGuard:
case ShadowSocks:
case OpenVpn:
return QRandomGenerator::global()->bounded(30000, 50000);
default:
return defaultPort(p);
}
}
int ProtocolProps::defaultPort(Proto p)
{
switch (p) {
case Proto::Any: return -1;
case Proto::OpenVpn: return 1194;
case Proto::Cloak: return 443;
case Proto::ShadowSocks: return 6789;
case Proto::WireGuard: return 51820;
case Proto::Awg: return 55424;
case Proto::OpenVpn: return QString(protocols::openvpn::defaultPort).toInt();
case Proto::Cloak: return QString(protocols::cloak::defaultPort).toInt();
case Proto::ShadowSocks: return QString(protocols::shadowsocks::defaultPort).toInt();
case Proto::WireGuard: return QString(protocols::wireguard::defaultPort).toInt();
case Proto::Awg: return QString(protocols::awg::defaultPort).toInt();
case Proto::Ikev2: return -1;
case Proto::L2tp: return -1;

View file

@ -232,6 +232,8 @@ namespace amnezia
Q_INVOKABLE static ServiceType protocolService(Proto p);
Q_INVOKABLE static int getPortForInstall(Proto p);
Q_INVOKABLE static int defaultPort(Proto p);
Q_INVOKABLE static bool defaultPortChangeable(Proto p);

View file

@ -8,7 +8,7 @@ if ! command -v sudo > /dev/null 2>&1; then $pm update -yq; $pm install -yq sudo
if ! command -v fuser > /dev/null 2>&1; then sudo $pm install -yq psmisc; fi;\
if ! command -v lsof > /dev/null 2>&1; then sudo $pm install -yq lsof; fi;\
if ! command -v docker > /dev/null 2>&1; then sudo $pm update -yq; sudo $pm install -yq $docker_pkg;\
if [ "$dist" = "fedora" ] || [ "$dist" = "debian" ]; then sudo systemctl enable docker && sudo systemctl start docker; fi;\
if [ "$dist" = "fedora" ] || [ "$dist" = "centos" ] || [ "$dist" = "debian" ]; then sudo systemctl enable docker && sudo systemctl start docker; fi;\
fi;\
if [ "$dist" = "debian" ]; then \
docker_service=$(systemctl list-units --full --all | grep docker.service | grep -v inactive | grep -v dead | grep -v failed);\

View file

@ -8,7 +8,7 @@
<translation type="vanished">Раздельное туннелирование для &quot;Wireguard&quot; не реализовано,опция отключена</translation>
</message>
<message>
<location filename="../amnezia_application.cpp" line="303"/>
<location filename="../amnezia_application.cpp" line="305"/>
<source>Split tunneling for %1 is not implemented, the option was disabled</source>
<translation>Раздельное туннелирование для %1 не реализовано, опция отключена</translation>
</message>
@ -123,19 +123,23 @@
<name>HomeContainersListView</name>
<message>
<location filename="../ui/qml/Components/HomeContainersListView.qml" line="58"/>
<source>Unable change protocol while there is an active connection</source>
<translation>Невозможно изменить протокол при активном соединении</translation>
</message>
<message>
<location filename="../ui/qml/Components/HomeContainersListView.qml" line="69"/>
<source>The selected protocol is not supported on the current platform</source>
<translation>Выбранный протокол не поддерживается на данном устройстве</translation>
</message>
<message>
<location filename="../ui/qml/Components/HomeContainersListView.qml" line="76"/>
<source>Reconnect via VPN Procotol: </source>
<translation>Переподключение через VPN протокол: </translation>
<translation type="vanished">Переподключение через VPN протокол: </translation>
</message>
</context>
<context>
<name>ImportController</name>
<message>
<location filename="../ui/controllers/importController.cpp" line="436"/>
<location filename="../ui/controllers/importController.cpp" line="427"/>
<source>Scanned %1 of %2.</source>
<translation>Отсканировано %1 из%2.</translation>
</message>
@ -143,58 +147,58 @@
<context>
<name>InstallController</name>
<message>
<location filename="../ui/controllers/installController.cpp" line="110"/>
<location filename="../ui/controllers/installController.cpp" line="161"/>
<location filename="../ui/controllers/installController.cpp" line="143"/>
<location filename="../ui/controllers/installController.cpp" line="193"/>
<source>%1 installed successfully. </source>
<translation>%1 успешно установлен. </translation>
</message>
<message>
<location filename="../ui/controllers/installController.cpp" line="112"/>
<location filename="../ui/controllers/installController.cpp" line="163"/>
<location filename="../ui/controllers/installController.cpp" line="145"/>
<location filename="../ui/controllers/installController.cpp" line="195"/>
<source>%1 is already installed on the server. </source>
<translation>%1 уже установлен на сервер. </translation>
</message>
<message>
<location filename="../ui/controllers/installController.cpp" line="115"/>
<location filename="../ui/controllers/installController.cpp" line="148"/>
<source>
Added containers that were already installed on the server</source>
<translation>
В приложение добавлены обнаруженные на сервере протоклы и сервисы</translation>
</message>
<message>
<location filename="../ui/controllers/installController.cpp" line="182"/>
<location filename="../ui/controllers/installController.cpp" line="214"/>
<source>
Already installed containers were found on the server. All installed containers have been added to the application</source>
<translation>
На сервере обнаружены установленные протоколы и сервисы, все они добавлены в приложение</translation>
</message>
<message>
<location filename="../ui/controllers/installController.cpp" line="266"/>
<location filename="../ui/controllers/installController.cpp" line="295"/>
<source>Settings updated successfully</source>
<translation>Настройки успешно обновлены</translation>
</message>
<message>
<location filename="../ui/controllers/installController.cpp" line="281"/>
<location filename="../ui/controllers/installController.cpp" line="310"/>
<source>Server &apos;%1&apos; was removed</source>
<translation>Сервер &apos;%1&apos; был удален</translation>
</message>
<message>
<location filename="../ui/controllers/installController.cpp" line="291"/>
<location filename="../ui/controllers/installController.cpp" line="320"/>
<source>All containers from server &apos;%1&apos; have been removed</source>
<translation>Все протоклы и сервисы были удалены с сервера &apos;%1&apos;</translation>
</message>
<message>
<location filename="../ui/controllers/installController.cpp" line="308"/>
<location filename="../ui/controllers/installController.cpp" line="337"/>
<source>%1 has been removed from the server &apos;%2&apos;</source>
<translation>%1 был удален с сервера &apos;%2&apos;</translation>
</message>
<message>
<location filename="../ui/controllers/installController.cpp" line="454"/>
<location filename="../ui/controllers/installController.cpp" line="483"/>
<source>Please login as the user</source>
<translation>Пожалуйста, войдите в систему от имени пользователя</translation>
</message>
<message>
<location filename="../ui/controllers/installController.cpp" line="481"/>
<location filename="../ui/controllers/installController.cpp" line="511"/>
<source>Server added successfully</source>
<translation>Сервер успешно добавлен</translation>
</message>
@ -262,15 +266,20 @@ Already installed containers were found on the server. All installed containers
<context>
<name>PageHome</name>
<message>
<location filename="../ui/qml/Pages2/PageHome.qml" line="344"/>
<location filename="../ui/qml/Pages2/PageHome.qml" line="354"/>
<source>VPN protocol</source>
<translation>VPN протокол</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageHome.qml" line="388"/>
<location filename="../ui/qml/Pages2/PageHome.qml" line="398"/>
<source>Servers</source>
<translation>Серверы</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageHome.qml" line="490"/>
<source>Unable change server while there is an active connection</source>
<translation>Невозможно изменить сервер при активном соединении</translation>
</message>
</context>
<context>
<name>PageProtocolAwgSettings</name>
@ -341,9 +350,13 @@ Already installed containers were found on the server. All installed containers
</message>
<message>
<location filename="../ui/qml/Pages2/PageProtocolAwgSettings.qml" line="279"/>
<source>All users who you shared a connection with will no longer be able to connect to it.</source>
<source>All users with whom you shared a connection will no longer be able to connect to it.</source>
<translation>Все пользователи, с которыми вы поделились этим VPN-протоколом, больше не смогут к нему подключаться.</translation>
</message>
<message>
<source>All users who you shared a connection with will no longer be able to connect to it.</source>
<translation type="vanished">Все пользователи, с которыми вы поделились этим VPN-протоколом, больше не смогут к нему подключаться.</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageProtocolAwgSettings.qml" line="280"/>
<source>Continue</source>
@ -392,195 +405,199 @@ Already installed containers were found on the server. All installed containers
<context>
<name>PageProtocolOpenVpnSettings</name>
<message>
<location filename="../ui/qml/Pages2/PageProtocolOpenVpnSettings.qml" line="76"/>
<location filename="../ui/qml/Pages2/PageProtocolOpenVpnSettings.qml" line="77"/>
<source>OpenVPN settings</source>
<translation>Настройки OpenVPN</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageProtocolOpenVpnSettings.qml" line="83"/>
<location filename="../ui/qml/Pages2/PageProtocolOpenVpnSettings.qml" line="84"/>
<source>VPN Addresses Subnet</source>
<translation>VPN Адреса Подсеть</translation>
<translation>Подсеть для VPN</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageProtocolOpenVpnSettings.qml" line="97"/>
<location filename="../ui/qml/Pages2/PageProtocolOpenVpnSettings.qml" line="98"/>
<source>Network protocol</source>
<translation>Сетевой протокол</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageProtocolOpenVpnSettings.qml" line="126"/>
<location filename="../ui/qml/Pages2/PageProtocolOpenVpnSettings.qml" line="127"/>
<source>Port</source>
<translation>Порт</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageProtocolOpenVpnSettings.qml" line="144"/>
<location filename="../ui/qml/Pages2/PageProtocolOpenVpnSettings.qml" line="145"/>
<source>Auto-negotiate encryption</source>
<translation>Шифрование с автоматическим согласованием</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageProtocolOpenVpnSettings.qml" line="161"/>
<location filename="../ui/qml/Pages2/PageProtocolOpenVpnSettings.qml" line="162"/>
<location filename="../ui/qml/Pages2/PageProtocolOpenVpnSettings.qml" line="163"/>
<source>Hash</source>
<translation>Хэш</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageProtocolOpenVpnSettings.qml" line="170"/>
<location filename="../ui/qml/Pages2/PageProtocolOpenVpnSettings.qml" line="171"/>
<source>SHA512</source>
<translation>SHA512</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageProtocolOpenVpnSettings.qml" line="171"/>
<location filename="../ui/qml/Pages2/PageProtocolOpenVpnSettings.qml" line="172"/>
<source>SHA384</source>
<translation>SHA384</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageProtocolOpenVpnSettings.qml" line="172"/>
<location filename="../ui/qml/Pages2/PageProtocolOpenVpnSettings.qml" line="173"/>
<source>SHA256</source>
<translation>SHA256</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageProtocolOpenVpnSettings.qml" line="173"/>
<location filename="../ui/qml/Pages2/PageProtocolOpenVpnSettings.qml" line="174"/>
<source>SHA3-512</source>
<translation>SHA3-512</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageProtocolOpenVpnSettings.qml" line="174"/>
<location filename="../ui/qml/Pages2/PageProtocolOpenVpnSettings.qml" line="175"/>
<source>SHA3-384</source>
<translation>SHA3-384</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageProtocolOpenVpnSettings.qml" line="175"/>
<location filename="../ui/qml/Pages2/PageProtocolOpenVpnSettings.qml" line="176"/>
<source>SHA3-256</source>
<translation>SHA3-256</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageProtocolOpenVpnSettings.qml" line="176"/>
<location filename="../ui/qml/Pages2/PageProtocolOpenVpnSettings.qml" line="177"/>
<source>whirlpool</source>
<translation>whirlpool</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageProtocolOpenVpnSettings.qml" line="177"/>
<location filename="../ui/qml/Pages2/PageProtocolOpenVpnSettings.qml" line="178"/>
<source>BLAKE2b512</source>
<translation>BLAKE2b512</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageProtocolOpenVpnSettings.qml" line="178"/>
<location filename="../ui/qml/Pages2/PageProtocolOpenVpnSettings.qml" line="179"/>
<source>BLAKE2s256</source>
<translation>BLAKE2s256</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageProtocolOpenVpnSettings.qml" line="179"/>
<location filename="../ui/qml/Pages2/PageProtocolOpenVpnSettings.qml" line="180"/>
<source>SHA1</source>
<translation>SHA1</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageProtocolOpenVpnSettings.qml" line="207"/>
<location filename="../ui/qml/Pages2/PageProtocolOpenVpnSettings.qml" line="208"/>
<location filename="../ui/qml/Pages2/PageProtocolOpenVpnSettings.qml" line="209"/>
<source>Cipher</source>
<translation>Шифрование</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageProtocolOpenVpnSettings.qml" line="216"/>
<location filename="../ui/qml/Pages2/PageProtocolOpenVpnSettings.qml" line="217"/>
<source>AES-256-GCM</source>
<translation>AES-256-GCM</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageProtocolOpenVpnSettings.qml" line="217"/>
<location filename="../ui/qml/Pages2/PageProtocolOpenVpnSettings.qml" line="218"/>
<source>AES-192-GCM</source>
<translation>AES-192-GCM</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageProtocolOpenVpnSettings.qml" line="218"/>
<location filename="../ui/qml/Pages2/PageProtocolOpenVpnSettings.qml" line="219"/>
<source>AES-128-GCM</source>
<translation>AES-128-GCM</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageProtocolOpenVpnSettings.qml" line="219"/>
<location filename="../ui/qml/Pages2/PageProtocolOpenVpnSettings.qml" line="220"/>
<source>AES-256-CBC</source>
<translation>AES-256-CBC</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageProtocolOpenVpnSettings.qml" line="220"/>
<location filename="../ui/qml/Pages2/PageProtocolOpenVpnSettings.qml" line="221"/>
<source>AES-192-CBC</source>
<translation>AES-192-CBC</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageProtocolOpenVpnSettings.qml" line="221"/>
<location filename="../ui/qml/Pages2/PageProtocolOpenVpnSettings.qml" line="222"/>
<source>AES-128-CBC</source>
<translation>AES-128-CBC</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageProtocolOpenVpnSettings.qml" line="222"/>
<location filename="../ui/qml/Pages2/PageProtocolOpenVpnSettings.qml" line="223"/>
<source>ChaCha20-Poly1305</source>
<translation>ChaCha20-Poly1305</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageProtocolOpenVpnSettings.qml" line="223"/>
<location filename="../ui/qml/Pages2/PageProtocolOpenVpnSettings.qml" line="224"/>
<source>ARIA-256-CBC</source>
<translation>ARIA-256-CBC</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageProtocolOpenVpnSettings.qml" line="224"/>
<location filename="../ui/qml/Pages2/PageProtocolOpenVpnSettings.qml" line="225"/>
<source>CAMELLIA-256-CBC</source>
<translation>CAMELLIA-256-CBC</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageProtocolOpenVpnSettings.qml" line="225"/>
<location filename="../ui/qml/Pages2/PageProtocolOpenVpnSettings.qml" line="226"/>
<source>none</source>
<translation>none</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageProtocolOpenVpnSettings.qml" line="258"/>
<location filename="../ui/qml/Pages2/PageProtocolOpenVpnSettings.qml" line="261"/>
<source>TLS auth</source>
<translation>TLS авторизация</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageProtocolOpenVpnSettings.qml" line="273"/>
<location filename="../ui/qml/Pages2/PageProtocolOpenVpnSettings.qml" line="276"/>
<source>Block DNS requests outside of VPN</source>
<translation>Блокировать DNS запросы за пределами VPN</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageProtocolOpenVpnSettings.qml" line="292"/>
<location filename="../ui/qml/Pages2/PageProtocolOpenVpnSettings.qml" line="295"/>
<source>Additional client configuration commands</source>
<translation>Дополнительные команды конфигурации клиента</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageProtocolOpenVpnSettings.qml" line="308"/>
<location filename="../ui/qml/Pages2/PageProtocolOpenVpnSettings.qml" line="340"/>
<location filename="../ui/qml/Pages2/PageProtocolOpenVpnSettings.qml" line="311"/>
<location filename="../ui/qml/Pages2/PageProtocolOpenVpnSettings.qml" line="343"/>
<source>Commands:</source>
<translation>Commands:</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageProtocolOpenVpnSettings.qml" line="324"/>
<location filename="../ui/qml/Pages2/PageProtocolOpenVpnSettings.qml" line="327"/>
<source>Additional server configuration commands</source>
<translation>Дополнительные команды конфигурации сервера</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageProtocolOpenVpnSettings.qml" line="359"/>
<location filename="../ui/qml/Pages2/PageProtocolOpenVpnSettings.qml" line="364"/>
<source>Remove OpenVPN</source>
<translation>Удалить OpenVPN</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageProtocolOpenVpnSettings.qml" line="362"/>
<location filename="../ui/qml/Pages2/PageProtocolOpenVpnSettings.qml" line="367"/>
<source>Remove OpenVpn from server?</source>
<translation>Удалить OpenVpn с сервера?</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageProtocolOpenVpnSettings.qml" line="363"/>
<source>All users who you shared a connection with will no longer be able to connect to it.</source>
<location filename="../ui/qml/Pages2/PageProtocolOpenVpnSettings.qml" line="368"/>
<source>All users with whom you shared a connection will no longer be able to connect to it.</source>
<translation>Все пользователи, с которыми вы поделились этим VPN-протоколом, больше не смогут к нему подключаться.</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageProtocolOpenVpnSettings.qml" line="364"/>
<source>All users who you shared a connection with will no longer be able to connect to it.</source>
<translation type="vanished">Все пользователи, с которыми вы поделились этим VPN-протоколом, больше не смогут к нему подключаться.</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageProtocolOpenVpnSettings.qml" line="369"/>
<source>Continue</source>
<translation>Продолжить</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageProtocolOpenVpnSettings.qml" line="365"/>
<location filename="../ui/qml/Pages2/PageProtocolOpenVpnSettings.qml" line="370"/>
<source>Cancel</source>
<translation>Отменить</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageProtocolOpenVpnSettings.qml" line="384"/>
<location filename="../ui/qml/Pages2/PageProtocolOpenVpnSettings.qml" line="389"/>
<source>Save and Restart Amnezia</source>
<translation>Сохранить и перезагрузить</translation>
</message>
@ -603,27 +620,31 @@ Already installed containers were found on the server. All installed containers
<translation>Параметры подключения %1</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageProtocolRaw.qml" line="172"/>
<location filename="../ui/qml/Pages2/PageProtocolRaw.qml" line="174"/>
<source>Remove </source>
<translation>Удалить </translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageProtocolRaw.qml" line="176"/>
<location filename="../ui/qml/Pages2/PageProtocolRaw.qml" line="178"/>
<source>Remove %1 from server?</source>
<translation>Удалить %1 с сервера?</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageProtocolRaw.qml" line="177"/>
<source>All users who you shared a connection with will no longer be able to connect to it.</source>
<location filename="../ui/qml/Pages2/PageProtocolRaw.qml" line="179"/>
<source>All users with whom you shared a connection will no longer be able to connect to it.</source>
<translation>Все пользователи, с которыми вы поделились этим VPN-протоколом, больше не смогут к нему подключаться.</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageProtocolRaw.qml" line="178"/>
<source>All users who you shared a connection with will no longer be able to connect to it.</source>
<translation type="obsolete">Все пользователи, с которыми вы поделились этим VPN-протоколом, больше не смогут к нему подключаться.</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageProtocolRaw.qml" line="180"/>
<source>Continue</source>
<translation>Продолжить</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageProtocolRaw.qml" line="179"/>
<location filename="../ui/qml/Pages2/PageProtocolRaw.qml" line="181"/>
<source>Cancel</source>
<translation>Отменить</translation>
</message>
@ -769,7 +790,7 @@ Already installed containers were found on the server. All installed containers
<message>
<location filename="../ui/qml/Pages2/PageServiceSftpSettings.qml" line="251"/>
<source>Remove SFTP and all data stored there?</source>
<translation>Удалить SFTP-хранилище и все хранящиеся на нем данные?</translation>
<translation>Удалить SFTP-хранилище и все хранящиеся на нем данные?</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageServiceSftpSettings.qml" line="252"/>
@ -989,8 +1010,8 @@ Already installed containers were found on the server. All installed containers
</message>
<message>
<location filename="../ui/qml/Pages2/PageSettingsApplication.qml" line="73"/>
<source>Launch the application every time %1 starts</source>
<translation>Запускать приложение при каждом включении %1</translation>
<source>Launch the application every time the device is starts</source>
<translation>Запускать приложение при каждом включении</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageSettingsApplication.qml" line="93"/>
@ -1089,7 +1110,7 @@ Already installed containers were found on the server. All installed containers
<message>
<location filename="../ui/qml/Pages2/PageSettingsBackup.qml" line="106"/>
<source>Backup file saved</source>
<translation type="unfinished"></translation>
<translation>Бэкап файл сохранен</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageSettingsBackup.qml" line="122"/>
@ -1127,7 +1148,7 @@ Already installed containers were found on the server. All installed containers
<message>
<location filename="../ui/qml/Pages2/PageSettingsConnection.qml" line="41"/>
<source>Connection</source>
<translation>Подключение</translation>
<translation>Соединение</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageSettingsConnection.qml" line="50"/>
@ -1188,52 +1209,52 @@ Already installed containers were found on the server. All installed containers
<translation>DNS сервер</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageSettingsDns.qml" line="49"/>
<location filename="../ui/qml/Pages2/PageSettingsDns.qml" line="50"/>
<source>If AmneziaDNS is not used or installed</source>
<translation>Эти адреса будут использоваться, если не включен или не установлен AmneziaDNS</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageSettingsDns.qml" line="56"/>
<location filename="../ui/qml/Pages2/PageSettingsDns.qml" line="57"/>
<source>Primary DNS</source>
<translation>Первичный DNS</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageSettingsDns.qml" line="68"/>
<location filename="../ui/qml/Pages2/PageSettingsDns.qml" line="69"/>
<source>Secondary DNS</source>
<translation>Вторичный DNS</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageSettingsDns.qml" line="86"/>
<location filename="../ui/qml/Pages2/PageSettingsDns.qml" line="87"/>
<source>Restore default</source>
<translation>Восстановить по умолчанию</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageSettingsDns.qml" line="89"/>
<location filename="../ui/qml/Pages2/PageSettingsDns.qml" line="90"/>
<source>Restore default DNS settings?</source>
<translation>Восстановить настройки DNS по умолчанию?</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageSettingsDns.qml" line="90"/>
<location filename="../ui/qml/Pages2/PageSettingsDns.qml" line="91"/>
<source>Continue</source>
<translation>Продолжить</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageSettingsDns.qml" line="91"/>
<location filename="../ui/qml/Pages2/PageSettingsDns.qml" line="92"/>
<source>Cancel</source>
<translation>Отменить</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageSettingsDns.qml" line="99"/>
<location filename="../ui/qml/Pages2/PageSettingsDns.qml" line="100"/>
<source>Settings have been reset</source>
<translation>Настройки сброшены</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageSettingsDns.qml" line="111"/>
<location filename="../ui/qml/Pages2/PageSettingsDns.qml" line="112"/>
<source>Save</source>
<translation>Сохранить</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageSettingsDns.qml" line="120"/>
<location filename="../ui/qml/Pages2/PageSettingsDns.qml" line="121"/>
<source>Settings saved</source>
<translation>Сохранить настройки</translation>
</message>
@ -1248,7 +1269,7 @@ Already installed containers were found on the server. All installed containers
<message>
<location filename="../ui/qml/Pages2/PageSettingsLogging.qml" line="54"/>
<source>Save logs</source>
<translation>Сохранить логи</translation>
<translation>Сохранять логи</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageSettingsLogging.qml" line="86"/>
@ -1268,12 +1289,12 @@ Already installed containers were found on the server. All installed containers
<message>
<location filename="../ui/qml/Pages2/PageSettingsLogging.qml" line="118"/>
<source>Logs file saved</source>
<translation type="unfinished"></translation>
<translation>Файл с логами сохранен</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageSettingsLogging.qml" line="127"/>
<source>Save logs to file</source>
<translation>Сохранять логи в файл</translation>
<translation>Сохранить логи в файл</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageSettingsLogging.qml" line="145"/>
@ -1435,8 +1456,12 @@ Already installed containers were found on the server. All installed containers
</message>
<message>
<location filename="../ui/qml/Pages2/PageSettingsServerProtocol.qml" line="117"/>
<source>All users with whom you shared a connection will no longer be able to connect to it.</source>
<translation>Все пользователи, с которыми вы поделились этим VPN-протоколом, больше не смогут к нему подключаться.</translation>
</message>
<message>
<source>All users who you shared a connection with will no longer be able to connect to it.</source>
<translation>Все пользователи, которым вы поделились VPN, больше не смогут к нему подключаться.</translation>
<translation type="vanished">Все пользователи, которым вы поделились VPN, больше не смогут к нему подключаться.</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageSettingsServerProtocol.qml" line="118"/>
@ -1689,7 +1714,7 @@ and will not be shared or disclosed to the Amnezia or any third parties</source>
<context>
<name>PageSetupWizardInstalling</name>
<message>
<location filename="../ui/qml/Pages2/PageSetupWizardInstalling.qml" line="57"/>
<location filename="../ui/qml/Pages2/PageSetupWizardInstalling.qml" line="65"/>
<source>The server has already been added to the application</source>
<translation>Сервер уже был добавлен в приложение</translation>
</message>
@ -1702,28 +1727,28 @@ and will not be shared or disclosed to the Amnezia or any third parties</source>
<translation type="vanished">занят установкой других протоколов или сервисов. Установка Amnesia </translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageSetupWizardInstalling.qml" line="62"/>
<location filename="../ui/qml/Pages2/PageSetupWizardInstalling.qml" line="70"/>
<source>Amnezia has detected that your server is currently </source>
<translation type="unfinished"></translation>
<translation>Amnezia обнаружила, что ваш сервер в настоящее время </translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageSetupWizardInstalling.qml" line="63"/>
<location filename="../ui/qml/Pages2/PageSetupWizardInstalling.qml" line="71"/>
<source>busy installing other software. Amnezia installation </source>
<translation type="unfinished"></translation>
<translation>занят установкой другого программного обеспечения. Установка Amnezia </translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageSetupWizardInstalling.qml" line="64"/>
<location filename="../ui/qml/Pages2/PageSetupWizardInstalling.qml" line="72"/>
<source>will pause until the server finishes installing other software</source>
<translation>будет приостановлена до тех пор, пока сервер не завершит установку</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageSetupWizardInstalling.qml" line="121"/>
<location filename="../ui/qml/Pages2/PageSetupWizardInstalling.qml" line="129"/>
<source>Installing</source>
<translation>Установка</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageSetupWizardInstalling.qml" line="21"/>
<location filename="../ui/qml/Pages2/PageSetupWizardInstalling.qml" line="67"/>
<location filename="../ui/qml/Pages2/PageSetupWizardInstalling.qml" line="75"/>
<source>Usually it takes no more than 5 minutes</source>
<translation>Обычно это занимает не более 5 минут</translation>
</message>
@ -1841,27 +1866,27 @@ and will not be shared or disclosed to the Amnezia or any third parties</source>
<context>
<name>PageSetupWizardViewConfig</name>
<message>
<location filename="../ui/qml/Pages2/PageSetupWizardViewConfig.qml" line="59"/>
<location filename="../ui/qml/Pages2/PageSetupWizardViewConfig.qml" line="63"/>
<source>New connection</source>
<translation>Новое соединение</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageSetupWizardViewConfig.qml" line="86"/>
<location filename="../ui/qml/Pages2/PageSetupWizardViewConfig.qml" line="90"/>
<source>Do not use connection code from public sources. It could be created to intercept your data.</source>
<translation>Не используйте код подключения из публичных источников. Его могли создать, чтобы перехватывать ваши данные.</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageSetupWizardViewConfig.qml" line="101"/>
<location filename="../ui/qml/Pages2/PageSetupWizardViewConfig.qml" line="105"/>
<source>Collapse content</source>
<translation>Свернуть</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageSetupWizardViewConfig.qml" line="101"/>
<location filename="../ui/qml/Pages2/PageSetupWizardViewConfig.qml" line="105"/>
<source>Show content</source>
<translation>Показать содержимое ключа</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageSetupWizardViewConfig.qml" line="144"/>
<location filename="../ui/qml/Pages2/PageSetupWizardViewConfig.qml" line="148"/>
<source>Connect</source>
<translation>Подключиться</translation>
</message>
@ -1879,9 +1904,8 @@ and will not be shared or disclosed to the Amnezia or any third parties</source>
<translation>WireGuard нативный формат</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageShare.qml" line="121"/>
<source>VPN Access</source>
<translation>VPN-Доступ</translation>
<translation type="vanished">VPN-Доступ</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageShare.qml" line="146"/>
@ -1889,14 +1913,12 @@ and will not be shared or disclosed to the Amnezia or any third parties</source>
<translation>Соединение</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageShare.qml" line="174"/>
<source>VPN access without the ability to manage the server</source>
<translation>Доступ к VPN, без возможности управления сервером</translation>
<translation type="vanished">Доступ к VPN, без возможности управления сервером</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageShare.qml" line="175"/>
<source>Access to server management. The user with whom you share full access to the connection will be able to add and remove your protocols and services to the server, as well as change settings.</source>
<translation>Доступ к управлению сервером. Пользователь, с которым вы делитесь полным доступом к соединению, сможет добавлять и удалять ваши протоколы и службы на сервере, а также изменять настройки.</translation>
<translation type="vanished">Доступ к управлению сервером. Пользователь, с которым вы делитесь полным доступом к соединению, сможет добавлять и удалять ваши протоколы и службы на сервере, а также изменять настройки.</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageShare.qml" line="190"/>
@ -1939,11 +1961,26 @@ and will not be shared or disclosed to the Amnezia or any third parties</source>
<source>For the AmneziaVPN app</source>
<translation>Для AmneziaVPN</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageShare.qml" line="121"/>
<source>Share VPN Access</source>
<translation>Поделиться VPN</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageShare.qml" line="158"/>
<source>Full access</source>
<translation>Полный доступ</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageShare.qml" line="174"/>
<source>Share VPN access without the ability to manage the server</source>
<translation>Поделиться доступом к VPN, без возможности управления сервером</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageShare.qml" line="175"/>
<source>Share access to server management. The user with whom you share full access to the server will be able to add and remove any protocols and services to the server, as well as change settings.</source>
<translation>Поделиться доступом к управлению сервером. Пользователь, с которым вы делитесь полным доступом к серверу, сможет добавлять и удалять любые протоколы и службы на сервере, а также изменять настройки.</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageShare.qml" line="251"/>
<location filename="../ui/qml/Pages2/PageShare.qml" line="252"/>
@ -2428,7 +2465,15 @@ While it offers a blend of security, stability, and speed, it&apos;s essential t
* Minimal configuration
* Recognised by DPI analysis systems
* Works over UDP network protocol, ports 500 and 4500.</source>
<translation type="unfinished"></translation>
<translation>IKEv2 в сочетании с уровнем шифрования IPSec это современный и стабильный протокол VPN.
Он может быстро переключаться между сетями и устройствами, что делает его особенно адаптивным в динамичных сетевых средах.
Несмотря на сочетание безопасности, стабильности и скорости, необходимо отметить, что IKEv2 легко обнаруживается и подвержен блокировке.
* Доступно в AmneziaVPN только для Windows.
* Низкое энергопотребление, на мобильных устройствах
* Минимальная конфигурация
* Распознается системами DPI-анализа
* Работает по сетевому протоколу UDP, порты 500 и 4500.</translation>
</message>
<message>
<location filename="../containers/containers_defs.cpp" line="215"/>
@ -2474,12 +2519,7 @@ While it offers a blend of security, stability, and speed, it&apos;s essential t
<message>
<location filename="../containers/containers_defs.cpp" line="111"/>
<source>AmneziaWG - Special protocol from Amnezia, based on WireGuard. It&apos;s fast like WireGuard, but very resistant to blockages. Recommended for regions with high levels of censorship.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../containers/containers_defs.cpp" line="112"/>
<source>AmneziaWG - Special protocol from Amnezia, based on WireGuard. It&apos;s fast like WireGuard, but very resistant to blockages. Recommended for regions with high levels of censorship.</source>
<translation type="unfinished"></translation>
<translation>AmneziaWG - Специальный протокол от Amnezia, основанный на протоколе WireGuard. Он такой же быстрый, как WireGuard, но очень устойчив к блокировкам. Рекомендуется для регионов с высоким уровнем цензуры.</translation>
</message>
<message>
<location filename="../containers/containers_defs.cpp" line="115"/>
@ -2511,7 +2551,14 @@ It employs its unique security protocol, leveraging the strength of SSL/TLS for
* Flexible customisation to suit user needs to work with different operating systems and devices
* Recognised by DPI analysis systems and therefore susceptible to blocking
* Can operate over both TCP and UDP network protocols.</source>
<translation type="unfinished"></translation>
<translation>OpenVPN однин из самых популярных и проверенных временем VPN-протоколов.
В нем используется уникальный протокол безопасности, опирающийся на протокол SSL/TLS для шифрования и обмена ключами. Кроме того, поддержка OpenVPN множества методов аутентификации делает его универсальным и адаптируемым к широкому спектру устройств и операционных систем. Благодаря открытому исходному коду OpenVPN подвергается тщательному анализу со стороны мирового сообщества, что постоянно повышает его безопасность. Благодаря оптимальному соотношению производительности, безопасности и совместимости OpenVPN остается лучшим выбором как для частных лиц, так и для компаний, заботящихся о конфиденциальности.
* Доступность AmneziaVPN для всех платформ
* Нормальное энергопотребление на мобильных устройствах
* Гибкая настройка под нужды пользователя для работы с различными операционными системами и устройствами
* Распознается системами DPI-анализа и поэтому подвержен блокировке
* Может работать по сетевым протоколам TCP и UDP.</translation>
</message>
<message>
<location filename="../containers/containers_defs.cpp" line="145"/>
@ -2523,7 +2570,12 @@ It employs its unique security protocol, leveraging the strength of SSL/TLS for
* Configurable encryption protocol
* Detectable by some DPI systems
* Works over TCP network protocol.</source>
<translation type="unfinished"></translation>
<translation>Shadowsocks, создан на основе протокола SOCKS5, защищает соединение с помощью шифра AEAD. Несмотря на то, что протокол Shadowsocks разработан таким образом, чтобы быть незаметным и сложным для идентификации, он не идентичен стандартному HTTPS-соединению. Однако некоторые системы анализа трафика все же могут обнаружить соединение Shadowsocks. В связи с ограниченной поддержкой в Amnezia рекомендуется использовать протокол AmneziaWG, или OpenVPN over Cloak.
* Доступен в AmneziaVPN только на ПК ноутбуках.
* Настраиваемый протокол шифрования
* Обнаруживается некоторыми DPI-системами
* Работает по сетевому протоколу TCP.</translation>
</message>
<message>
<location filename="../containers/containers_defs.cpp" line="155"/>
@ -2545,7 +2597,24 @@ If there is a extreme level of Internet censorship in your region, we advise you
* Not recognised by DPI analysis systems
* Works over TCP network protocol, 443 port.
</source>
<translation type="unfinished"></translation>
<translation>OpenVPN over Cloak - это комбинация протокола OpenVPN и плагина Cloak, разработанного специально для защиты от блокировок.
OpenVPN обеспечивает безопасное VPN-соединение за счет шифрования всего интернет-трафика между клиентом и сервером.
Cloak защищает OpenVPN от обнаружения и блокировок.
Cloak может изменять метаданные пакетов. Он полностью маскирует VPN-трафик под обычный веб-трафик, а также защищает VPN от обнаружения с помощью Active Probing. Это делает его очень устойчивым к обнаружению
Сразу же после получения первого пакета данных Cloak проверяет подлинность входящего соединения. Если аутентификация не проходит, плагин маскирует сервер под поддельный сайт, и ваш VPN становится невидимым для аналитических систем.
Если в вашем регионе существует экстремальный уровень цензуры в Интернете, мы советуем вам при первом подключении использовать только OpenVPN через Cloak
* Доступность AmneziaVPN на всех платформах
* Высокое энергопотребление на мобильных устройствах
* Гибкие настройки
* Не распознается системами DPI-анализа
* Работает по сетевому протоколу TCP, 443 порт.
</translation>
</message>
<message>
<location filename="../containers/containers_defs.cpp" line="174"/>
@ -2558,7 +2627,15 @@ WireGuard is very susceptible to blocking due to its distinct packet signatures.
* Minimum number of settings
* Easily recognised by DPI analysis systems, susceptible to blocking
* Works over UDP network protocol.</source>
<translation type="unfinished"></translation>
<translation>WireGuard - относительно новый популярный VPN-протокол с упрощенной архитектурой.
Обеспечивает стабильное VPN-соединение, высокую производительность на всех устройствах. Использует жестко заданные настройки шифрования. WireGuard по сравнению с OpenVPN имеет меньшую задержку и лучшую пропускную способность при передаче данных.
WireGuard очень восприимчив к блокированию из-за особенностей сигнатур пакетов. В отличие от некоторых других VPN-протоколов, использующих методы обфускации, последовательные сигнатуры пакетов WireGuard легче выявляются и, соответственно, блокируются современными системами глубокой проверки пакетов (DPI) и другими средствами сетевого мониторинга.
* Доступность AmneziaVPN для всех платформ
* Низкое энергопотребление
* Минимальное количество настроек
* Легко распознается системами DPI-анализа, подвержен блокировке
* Работает по сетевому протоколу UDP.</translation>
</message>
<message>
<location filename="../containers/containers_defs.cpp" line="187"/>
@ -2571,7 +2648,15 @@ This means that AmneziaWG keeps the fast performance of the original while addin
* Minimum number of settings
* Not recognised by DPI analysis systems, resistant to blocking
* Works over UDP network protocol.</source>
<translation type="unfinished"></translation>
<translation>AmneziaWG - усовершенствованная версия популярного VPN-протокола Wireguard. AmneziaWG опирается на фундамент, заложенный WireGuard, сохраняя упрощенную архитектуру и высокопроизводительные возможности работы на разных устройствах.
Хотя WireGuard известен своей эффективностью, у него были проблемы с обнаружением из-за характерных сигнатур пакетов. AmneziaWG решает эту проблему за счет использования более совершенных методов обфускации, благодаря чему его трафик сливается с обычным интернет-трафиком.
Таким образом, AmneziaWG сохраняет высокую производительность оригинала, добавляя при этом дополнительный уровень скрытности, что делает его отличным выбором для тех, кому нужно быстрое и незаметное VPN-соединение.
* Доступность AmneziaVPN на всех платформах
* Низкое энергопотребление
* Минимальное количество настроек
* Не распознается системами DPI-анализа, устойчив к блокировке
* Работает по сетевому протоколу UDP.</translation>
</message>
<message>
<source>AmneziaWG container</source>
@ -2583,7 +2668,7 @@ This means that AmneziaWG keeps the fast performance of the original while addin
<translation>Сервис обмена файлами Sftp - безопасный FTP-сервис</translation>
</message>
<message>
<location filename="../protocols/protocols_defs.cpp" line="75"/>
<location filename="../protocols/protocols_defs.cpp" line="77"/>
<source>Sftp service</source>
<translation>Сервис SFTP</translation>
</message>
@ -2657,16 +2742,6 @@ This means that AmneziaWG keeps the fast performance of the original while addin
<source>&amp;Randomize colors</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../3rd/wireguard-tools/contrib/highlighter/gui/highlight.cpp" line="39"/>
<source>WireGuard Configuration Highlighter</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../3rd/wireguard-tools/contrib/highlighter/gui/highlight.cpp" line="82"/>
<source>&amp;Randomize colors</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>SelectLanguageDrawer</name>
@ -2834,7 +2909,7 @@ This means that AmneziaWG keeps the fast performance of the original while addin
<context>
<name>VpnConnection</name>
<message>
<location filename="../vpnconnection.cpp" line="422"/>
<location filename="../vpnconnection.cpp" line="406"/>
<source>Mbps</source>
<translation>Mbps</translation>
</message>
@ -2892,7 +2967,7 @@ This means that AmneziaWG keeps the fast performance of the original while addin
<message>
<location filename="../containers/containers_defs.cpp" line="309"/>
<source>Medium or High</source>
<translation>Спедний или Высокий</translation>
<translation>Средний или Высокий</translation>
</message>
<message>
<location filename="../containers/containers_defs.cpp" line="310"/>
@ -2940,7 +3015,7 @@ This means that AmneziaWG keeps the fast performance of the original while addin
<message>
<location filename="../ui/qml/main2.qml" line="172"/>
<source>Private key passphrase</source>
<translation>Кодовая фраза для закрытого ключа</translation>
<translation>Кодовая фраза для закрытого ключа</translation>
</message>
<message>
<location filename="../ui/qml/main2.qml" line="191"/>

View file

@ -8,7 +8,7 @@
<translation type="vanished">WireGuard协议的VPN分离</translation>
</message>
<message>
<location filename="../amnezia_application.cpp" line="303"/>
<location filename="../amnezia_application.cpp" line="305"/>
<source>Split tunneling for %1 is not implemented, the option was disabled</source>
<translation type="unfinished"></translation>
</message>
@ -78,17 +78,17 @@
<message>
<location filename="../ui/qml/Components/ConnectionTypeSelectionDrawer.qml" line="30"/>
<source>Add new connection</source>
<translation type="unfinished"></translation>
<translation></translation>
</message>
<message>
<location filename="../ui/qml/Components/ConnectionTypeSelectionDrawer.qml" line="38"/>
<source>Configure your server</source>
<translation type="unfinished"></translation>
<translation></translation>
</message>
<message>
<location filename="../ui/qml/Components/ConnectionTypeSelectionDrawer.qml" line="52"/>
<source>Open config file, key or QR code</source>
<translation type="unfinished"></translation>
<translation></translation>
</message>
<message>
<source>Server IP, login and password</source>
@ -134,19 +134,23 @@
<name>HomeContainersListView</name>
<message>
<location filename="../ui/qml/Components/HomeContainersListView.qml" line="58"/>
<source>Unable change protocol while there is an active connection</source>
<translation></translation>
</message>
<message>
<location filename="../ui/qml/Components/HomeContainersListView.qml" line="69"/>
<source>The selected protocol is not supported on the current platform</source>
<translation></translation>
</message>
<message>
<location filename="../ui/qml/Components/HomeContainersListView.qml" line="76"/>
<source>Reconnect via VPN Procotol: </source>
<translation>VPN基于协议: </translation>
<translation type="vanished">VPN基于协议: </translation>
</message>
</context>
<context>
<name>ImportController</name>
<message>
<location filename="../ui/controllers/importController.cpp" line="436"/>
<location filename="../ui/controllers/importController.cpp" line="427"/>
<source>Scanned %1 of %2.</source>
<translation> %1 of %2.</translation>
</message>
@ -162,47 +166,47 @@
<translation type="obsolete"> </translation>
</message>
<message>
<location filename="../ui/controllers/installController.cpp" line="110"/>
<location filename="../ui/controllers/installController.cpp" line="161"/>
<location filename="../ui/controllers/installController.cpp" line="143"/>
<location filename="../ui/controllers/installController.cpp" line="193"/>
<source>%1 installed successfully. </source>
<translation>%1 </translation>
</message>
<message>
<location filename="../ui/controllers/installController.cpp" line="112"/>
<location filename="../ui/controllers/installController.cpp" line="163"/>
<location filename="../ui/controllers/installController.cpp" line="145"/>
<location filename="../ui/controllers/installController.cpp" line="195"/>
<source>%1 is already installed on the server. </source>
<translation> %1</translation>
</message>
<message>
<location filename="../ui/controllers/installController.cpp" line="115"/>
<location filename="../ui/controllers/installController.cpp" line="148"/>
<source>
Added containers that were already installed on the server</source>
<translation></translation>
</message>
<message>
<location filename="../ui/controllers/installController.cpp" line="182"/>
<location filename="../ui/controllers/installController.cpp" line="214"/>
<source>
Already installed containers were found on the server. All installed containers have been added to the application</source>
<translation>
</translation>
</message>
<message>
<location filename="../ui/controllers/installController.cpp" line="266"/>
<location filename="../ui/controllers/installController.cpp" line="295"/>
<source>Settings updated successfully</source>
<translation></translation>
</message>
<message>
<location filename="../ui/controllers/installController.cpp" line="281"/>
<location filename="../ui/controllers/installController.cpp" line="310"/>
<source>Server &apos;%1&apos; was removed</source>
<translation> &apos;%1&apos;</translation>
</message>
<message>
<location filename="../ui/controllers/installController.cpp" line="291"/>
<location filename="../ui/controllers/installController.cpp" line="320"/>
<source>All containers from server &apos;%1&apos; have been removed</source>
<translation> &apos;%1&apos; </translation>
</message>
<message>
<location filename="../ui/controllers/installController.cpp" line="308"/>
<location filename="../ui/controllers/installController.cpp" line="337"/>
<source>%1 has been removed from the server &apos;%2&apos;</source>
<translation>%1 &apos;%2&apos; </translation>
</message>
@ -223,12 +227,12 @@ Already installed containers were found on the server. All installed containers
<translation type="obsolete"> </translation>
</message>
<message>
<location filename="../ui/controllers/installController.cpp" line="454"/>
<location filename="../ui/controllers/installController.cpp" line="483"/>
<source>Please login as the user</source>
<translation></translation>
</message>
<message>
<location filename="../ui/controllers/installController.cpp" line="481"/>
<location filename="../ui/controllers/installController.cpp" line="511"/>
<source>Server added successfully</source>
<translation></translation>
</message>
@ -296,15 +300,20 @@ Already installed containers were found on the server. All installed containers
<context>
<name>PageHome</name>
<message>
<location filename="../ui/qml/Pages2/PageHome.qml" line="344"/>
<location filename="../ui/qml/Pages2/PageHome.qml" line="354"/>
<source>VPN protocol</source>
<translation>VPN协议</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageHome.qml" line="388"/>
<location filename="../ui/qml/Pages2/PageHome.qml" line="398"/>
<source>Servers</source>
<translation></translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageHome.qml" line="490"/>
<source>Unable change server while there is an active connection</source>
<translation></translation>
</message>
</context>
<context>
<name>PageProtocolAwgSettings</name>
@ -375,8 +384,12 @@ Already installed containers were found on the server. All installed containers
</message>
<message>
<location filename="../ui/qml/Pages2/PageProtocolAwgSettings.qml" line="279"/>
<source>All users with whom you shared a connection will no longer be able to connect to it.</source>
<translation></translation>
</message>
<message>
<source>All users who you shared a connection with will no longer be able to connect to it.</source>
<translation>使</translation>
<translation type="vanished">使</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageProtocolAwgSettings.qml" line="280"/>
@ -426,199 +439,203 @@ Already installed containers were found on the server. All installed containers
<context>
<name>PageProtocolOpenVpnSettings</name>
<message>
<location filename="../ui/qml/Pages2/PageProtocolOpenVpnSettings.qml" line="76"/>
<location filename="../ui/qml/Pages2/PageProtocolOpenVpnSettings.qml" line="77"/>
<source>OpenVPN settings</source>
<translation>OpenVPN </translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageProtocolOpenVpnSettings.qml" line="83"/>
<location filename="../ui/qml/Pages2/PageProtocolOpenVpnSettings.qml" line="84"/>
<source>VPN Addresses Subnet</source>
<translation>VPN子网掩码</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageProtocolOpenVpnSettings.qml" line="97"/>
<location filename="../ui/qml/Pages2/PageProtocolOpenVpnSettings.qml" line="98"/>
<source>Network protocol</source>
<translation></translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageProtocolOpenVpnSettings.qml" line="126"/>
<location filename="../ui/qml/Pages2/PageProtocolOpenVpnSettings.qml" line="127"/>
<source>Port</source>
<translation></translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageProtocolOpenVpnSettings.qml" line="144"/>
<location filename="../ui/qml/Pages2/PageProtocolOpenVpnSettings.qml" line="145"/>
<source>Auto-negotiate encryption</source>
<translation></translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageProtocolOpenVpnSettings.qml" line="161"/>
<location filename="../ui/qml/Pages2/PageProtocolOpenVpnSettings.qml" line="162"/>
<location filename="../ui/qml/Pages2/PageProtocolOpenVpnSettings.qml" line="163"/>
<source>Hash</source>
<translation></translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageProtocolOpenVpnSettings.qml" line="170"/>
<location filename="../ui/qml/Pages2/PageProtocolOpenVpnSettings.qml" line="171"/>
<source>SHA512</source>
<translation></translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageProtocolOpenVpnSettings.qml" line="171"/>
<location filename="../ui/qml/Pages2/PageProtocolOpenVpnSettings.qml" line="172"/>
<source>SHA384</source>
<translation></translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageProtocolOpenVpnSettings.qml" line="172"/>
<location filename="../ui/qml/Pages2/PageProtocolOpenVpnSettings.qml" line="173"/>
<source>SHA256</source>
<translation></translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageProtocolOpenVpnSettings.qml" line="173"/>
<location filename="../ui/qml/Pages2/PageProtocolOpenVpnSettings.qml" line="174"/>
<source>SHA3-512</source>
<translation></translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageProtocolOpenVpnSettings.qml" line="174"/>
<location filename="../ui/qml/Pages2/PageProtocolOpenVpnSettings.qml" line="175"/>
<source>SHA3-384</source>
<translation></translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageProtocolOpenVpnSettings.qml" line="175"/>
<location filename="../ui/qml/Pages2/PageProtocolOpenVpnSettings.qml" line="176"/>
<source>SHA3-256</source>
<translation></translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageProtocolOpenVpnSettings.qml" line="176"/>
<location filename="../ui/qml/Pages2/PageProtocolOpenVpnSettings.qml" line="177"/>
<source>whirlpool</source>
<translation></translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageProtocolOpenVpnSettings.qml" line="177"/>
<location filename="../ui/qml/Pages2/PageProtocolOpenVpnSettings.qml" line="178"/>
<source>BLAKE2b512</source>
<translation></translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageProtocolOpenVpnSettings.qml" line="178"/>
<location filename="../ui/qml/Pages2/PageProtocolOpenVpnSettings.qml" line="179"/>
<source>BLAKE2s256</source>
<translation></translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageProtocolOpenVpnSettings.qml" line="179"/>
<location filename="../ui/qml/Pages2/PageProtocolOpenVpnSettings.qml" line="180"/>
<source>SHA1</source>
<translation></translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageProtocolOpenVpnSettings.qml" line="207"/>
<location filename="../ui/qml/Pages2/PageProtocolOpenVpnSettings.qml" line="208"/>
<location filename="../ui/qml/Pages2/PageProtocolOpenVpnSettings.qml" line="209"/>
<source>Cipher</source>
<translation></translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageProtocolOpenVpnSettings.qml" line="216"/>
<location filename="../ui/qml/Pages2/PageProtocolOpenVpnSettings.qml" line="217"/>
<source>AES-256-GCM</source>
<translation></translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageProtocolOpenVpnSettings.qml" line="217"/>
<location filename="../ui/qml/Pages2/PageProtocolOpenVpnSettings.qml" line="218"/>
<source>AES-192-GCM</source>
<translation></translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageProtocolOpenVpnSettings.qml" line="218"/>
<location filename="../ui/qml/Pages2/PageProtocolOpenVpnSettings.qml" line="219"/>
<source>AES-128-GCM</source>
<translation></translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageProtocolOpenVpnSettings.qml" line="219"/>
<location filename="../ui/qml/Pages2/PageProtocolOpenVpnSettings.qml" line="220"/>
<source>AES-256-CBC</source>
<translation></translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageProtocolOpenVpnSettings.qml" line="220"/>
<location filename="../ui/qml/Pages2/PageProtocolOpenVpnSettings.qml" line="221"/>
<source>AES-192-CBC</source>
<translation></translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageProtocolOpenVpnSettings.qml" line="221"/>
<location filename="../ui/qml/Pages2/PageProtocolOpenVpnSettings.qml" line="222"/>
<source>AES-128-CBC</source>
<translation></translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageProtocolOpenVpnSettings.qml" line="222"/>
<location filename="../ui/qml/Pages2/PageProtocolOpenVpnSettings.qml" line="223"/>
<source>ChaCha20-Poly1305</source>
<translation></translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageProtocolOpenVpnSettings.qml" line="223"/>
<location filename="../ui/qml/Pages2/PageProtocolOpenVpnSettings.qml" line="224"/>
<source>ARIA-256-CBC</source>
<translation></translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageProtocolOpenVpnSettings.qml" line="224"/>
<location filename="../ui/qml/Pages2/PageProtocolOpenVpnSettings.qml" line="225"/>
<source>CAMELLIA-256-CBC</source>
<translation></translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageProtocolOpenVpnSettings.qml" line="225"/>
<location filename="../ui/qml/Pages2/PageProtocolOpenVpnSettings.qml" line="226"/>
<source>none</source>
<translation></translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageProtocolOpenVpnSettings.qml" line="258"/>
<location filename="../ui/qml/Pages2/PageProtocolOpenVpnSettings.qml" line="261"/>
<source>TLS auth</source>
<translation>TLS认证</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageProtocolOpenVpnSettings.qml" line="273"/>
<location filename="../ui/qml/Pages2/PageProtocolOpenVpnSettings.qml" line="276"/>
<source>Block DNS requests outside of VPN</source>
<translation>VPN外的DNS请求</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageProtocolOpenVpnSettings.qml" line="292"/>
<location filename="../ui/qml/Pages2/PageProtocolOpenVpnSettings.qml" line="295"/>
<source>Additional client configuration commands</source>
<translation></translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageProtocolOpenVpnSettings.qml" line="308"/>
<location filename="../ui/qml/Pages2/PageProtocolOpenVpnSettings.qml" line="340"/>
<location filename="../ui/qml/Pages2/PageProtocolOpenVpnSettings.qml" line="311"/>
<location filename="../ui/qml/Pages2/PageProtocolOpenVpnSettings.qml" line="343"/>
<source>Commands:</source>
<translation>:</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageProtocolOpenVpnSettings.qml" line="324"/>
<location filename="../ui/qml/Pages2/PageProtocolOpenVpnSettings.qml" line="327"/>
<source>Additional server configuration commands</source>
<translation></translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageProtocolOpenVpnSettings.qml" line="359"/>
<location filename="../ui/qml/Pages2/PageProtocolOpenVpnSettings.qml" line="364"/>
<source>Remove OpenVPN</source>
<translation>OpenVPN</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageProtocolOpenVpnSettings.qml" line="362"/>
<location filename="../ui/qml/Pages2/PageProtocolOpenVpnSettings.qml" line="367"/>
<source>Remove OpenVpn from server?</source>
<translation>OpenVPN吗?</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageProtocolOpenVpnSettings.qml" line="363"/>
<location filename="../ui/qml/Pages2/PageProtocolOpenVpnSettings.qml" line="368"/>
<source>All users with whom you shared a connection will no longer be able to connect to it.</source>
<translation></translation>
</message>
<message>
<source>All users who you shared a connection with will no longer be able to connect to it.</source>
<translation>使</translation>
<translation type="vanished">使</translation>
</message>
<message>
<source>All users with whom you shared a connection will no longer be able to connect to it</source>
<translation type="obsolete"></translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageProtocolOpenVpnSettings.qml" line="364"/>
<location filename="../ui/qml/Pages2/PageProtocolOpenVpnSettings.qml" line="369"/>
<source>Continue</source>
<translation></translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageProtocolOpenVpnSettings.qml" line="365"/>
<location filename="../ui/qml/Pages2/PageProtocolOpenVpnSettings.qml" line="370"/>
<source>Cancel</source>
<translation></translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageProtocolOpenVpnSettings.qml" line="384"/>
<location filename="../ui/qml/Pages2/PageProtocolOpenVpnSettings.qml" line="389"/>
<source>Save and Restart Amnezia</source>
<translation>Amnezia</translation>
</message>
@ -645,19 +662,23 @@ Already installed containers were found on the server. All installed containers
<translation>%1 </translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageProtocolRaw.qml" line="172"/>
<location filename="../ui/qml/Pages2/PageProtocolRaw.qml" line="174"/>
<source>Remove </source>
<translation> </translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageProtocolRaw.qml" line="176"/>
<location filename="../ui/qml/Pages2/PageProtocolRaw.qml" line="178"/>
<source>Remove %1 from server?</source>
<translation> %1 ?</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageProtocolRaw.qml" line="177"/>
<location filename="../ui/qml/Pages2/PageProtocolRaw.qml" line="179"/>
<source>All users with whom you shared a connection will no longer be able to connect to it.</source>
<translation></translation>
</message>
<message>
<source>All users who you shared a connection with will no longer be able to connect to it.</source>
<translation>使</translation>
<translation type="vanished">使</translation>
</message>
<message>
<source> from server?</source>
@ -668,12 +689,12 @@ Already installed containers were found on the server. All installed containers
<translation type="obsolete"></translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageProtocolRaw.qml" line="178"/>
<location filename="../ui/qml/Pages2/PageProtocolRaw.qml" line="180"/>
<source>Continue</source>
<translation></translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageProtocolRaw.qml" line="179"/>
<location filename="../ui/qml/Pages2/PageProtocolRaw.qml" line="181"/>
<source>Cancel</source>
<translation></translation>
</message>
@ -864,7 +885,7 @@ Already installed containers were found on the server. All installed containers
<message>
<location filename="../ui/qml/Pages2/PageServiceTorWebsiteSettings.qml" line="112"/>
<source>When configuring WordPress set the this onion address as domain.</source>
<translation type="unfinished"></translation>
<translation> WordPress </translation>
</message>
<message>
<source>When configuring WordPress set the domain as this onion address.</source>
@ -1050,9 +1071,13 @@ And if you don&apos;t like the app, all the more support it - the donation will
<translation type="obsolete"> </translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageSettingsApplication.qml" line="73"/>
<source>Launch the application every time %1 starts</source>
<translation>%1</translation>
<translation type="vanished">%1</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageSettingsApplication.qml" line="73"/>
<source>Launch the application every time the device is starts</source>
<translation></translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageSettingsApplication.qml" line="93"/>
@ -1155,7 +1180,7 @@ And if you don&apos;t like the app, all the more support it - the donation will
<message>
<location filename="../ui/qml/Pages2/PageSettingsBackup.qml" line="106"/>
<source>Backup file saved</source>
<translation type="unfinished"></translation>
<translation></translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageSettingsBackup.qml" line="122"/>
@ -1270,52 +1295,52 @@ And if you don&apos;t like the app, all the more support it - the donation will
<translation>DNS服务器</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageSettingsDns.qml" line="49"/>
<location filename="../ui/qml/Pages2/PageSettingsDns.qml" line="50"/>
<source>If AmneziaDNS is not used or installed</source>
<translation>使AmneziaDNS</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageSettingsDns.qml" line="56"/>
<location filename="../ui/qml/Pages2/PageSettingsDns.qml" line="57"/>
<source>Primary DNS</source>
<translation> DNS</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageSettingsDns.qml" line="68"/>
<location filename="../ui/qml/Pages2/PageSettingsDns.qml" line="69"/>
<source>Secondary DNS</source>
<translation> DNS</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageSettingsDns.qml" line="86"/>
<location filename="../ui/qml/Pages2/PageSettingsDns.qml" line="87"/>
<source>Restore default</source>
<translation></translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageSettingsDns.qml" line="89"/>
<location filename="../ui/qml/Pages2/PageSettingsDns.qml" line="90"/>
<source>Restore default DNS settings?</source>
<translation>DNS配置</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageSettingsDns.qml" line="90"/>
<location filename="../ui/qml/Pages2/PageSettingsDns.qml" line="91"/>
<source>Continue</source>
<translation></translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageSettingsDns.qml" line="91"/>
<location filename="../ui/qml/Pages2/PageSettingsDns.qml" line="92"/>
<source>Cancel</source>
<translation></translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageSettingsDns.qml" line="99"/>
<location filename="../ui/qml/Pages2/PageSettingsDns.qml" line="100"/>
<source>Settings have been reset</source>
<translation></translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageSettingsDns.qml" line="111"/>
<location filename="../ui/qml/Pages2/PageSettingsDns.qml" line="112"/>
<source>Save</source>
<translation></translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageSettingsDns.qml" line="120"/>
<location filename="../ui/qml/Pages2/PageSettingsDns.qml" line="121"/>
<source>Settings saved</source>
<translation></translation>
</message>
@ -1350,7 +1375,7 @@ And if you don&apos;t like the app, all the more support it - the donation will
<message>
<location filename="../ui/qml/Pages2/PageSettingsLogging.qml" line="118"/>
<source>Logs file saved</source>
<translation type="unfinished"></translation>
<translation></translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageSettingsLogging.qml" line="127"/>
@ -1512,8 +1537,12 @@ And if you don&apos;t like the app, all the more support it - the donation will
</message>
<message>
<location filename="../ui/qml/Pages2/PageSettingsServerProtocol.qml" line="117"/>
<source>All users with whom you shared a connection will no longer be able to connect to it.</source>
<translation></translation>
</message>
<message>
<source>All users who you shared a connection with will no longer be able to connect to it.</source>
<translation>使</translation>
<translation type="vanished">使</translation>
</message>
<message>
<source> from server?</source>
@ -1705,7 +1734,7 @@ It&apos;s okay as long as it&apos;s from someone you trust.</source>
<message>
<location filename="../ui/qml/Pages2/PageSetupWizardCredentials.qml" line="44"/>
<source>Configure your server</source>
<translation type="unfinished"></translation>
<translation></translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageSetupWizardCredentials.qml" line="51"/>
@ -1720,7 +1749,7 @@ It&apos;s okay as long as it&apos;s from someone you trust.</source>
<message>
<location filename="../ui/qml/Pages2/PageSetupWizardCredentials.qml" line="66"/>
<source>Login to connect via SSH</source>
<translation>ssh账号</translation>
<translation></translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageSetupWizardCredentials.qml" line="76"/>
@ -1736,7 +1765,8 @@ It&apos;s okay as long as it&apos;s from someone you trust.</source>
<location filename="../ui/qml/Pages2/PageSetupWizardCredentials.qml" line="115"/>
<source>All data you enter will remain strictly confidential
and will not be shared or disclosed to the Amnezia or any third parties</source>
<translation type="unfinished"></translation>
<translation>
Amnezia </translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageSetupWizardCredentials.qml" line="125"/>
@ -1791,24 +1821,24 @@ and will not be shared or disclosed to the Amnezia or any third parties</source>
<name>PageSetupWizardInstalling</name>
<message>
<location filename="../ui/qml/Pages2/PageSetupWizardInstalling.qml" line="21"/>
<location filename="../ui/qml/Pages2/PageSetupWizardInstalling.qml" line="67"/>
<location filename="../ui/qml/Pages2/PageSetupWizardInstalling.qml" line="75"/>
<source>Usually it takes no more than 5 minutes</source>
<translation>5</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageSetupWizardInstalling.qml" line="57"/>
<location filename="../ui/qml/Pages2/PageSetupWizardInstalling.qml" line="65"/>
<source>The server has already been added to the application</source>
<translation></translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageSetupWizardInstalling.qml" line="62"/>
<location filename="../ui/qml/Pages2/PageSetupWizardInstalling.qml" line="70"/>
<source>Amnezia has detected that your server is currently </source>
<translation type="unfinished"></translation>
<translation>Amnezia </translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageSetupWizardInstalling.qml" line="63"/>
<location filename="../ui/qml/Pages2/PageSetupWizardInstalling.qml" line="71"/>
<source>busy installing other software. Amnezia installation </source>
<translation type="unfinished"></translation>
<translation>Amnezia安装</translation>
</message>
<message>
<source>Amnesia has detected that your server is currently </source>
@ -1819,12 +1849,12 @@ and will not be shared or disclosed to the Amnezia or any third parties</source>
<translation type="vanished">Amnezia安装</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageSetupWizardInstalling.qml" line="64"/>
<location filename="../ui/qml/Pages2/PageSetupWizardInstalling.qml" line="72"/>
<source>will pause until the server finishes installing other software</source>
<translation></translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageSetupWizardInstalling.qml" line="121"/>
<location filename="../ui/qml/Pages2/PageSetupWizardInstalling.qml" line="129"/>
<source>Installing</source>
<translation></translation>
</message>
@ -1942,27 +1972,27 @@ and will not be shared or disclosed to the Amnezia or any third parties</source>
<context>
<name>PageSetupWizardViewConfig</name>
<message>
<location filename="../ui/qml/Pages2/PageSetupWizardViewConfig.qml" line="59"/>
<location filename="../ui/qml/Pages2/PageSetupWizardViewConfig.qml" line="63"/>
<source>New connection</source>
<translation></translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageSetupWizardViewConfig.qml" line="86"/>
<location filename="../ui/qml/Pages2/PageSetupWizardViewConfig.qml" line="90"/>
<source>Do not use connection code from public sources. It could be created to intercept your data.</source>
<translation>使</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageSetupWizardViewConfig.qml" line="101"/>
<location filename="../ui/qml/Pages2/PageSetupWizardViewConfig.qml" line="105"/>
<source>Collapse content</source>
<translation></translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageSetupWizardViewConfig.qml" line="101"/>
<location filename="../ui/qml/Pages2/PageSetupWizardViewConfig.qml" line="105"/>
<source>Show content</source>
<translation></translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageSetupWizardViewConfig.qml" line="144"/>
<location filename="../ui/qml/Pages2/PageSetupWizardViewConfig.qml" line="148"/>
<source>Connect</source>
<translation></translation>
</message>
@ -1996,8 +2026,22 @@ and will not be shared or disclosed to the Amnezia or any third parties</source>
</message>
<message>
<location filename="../ui/qml/Pages2/PageShare.qml" line="121"/>
<source>Share VPN Access</source>
<translation> VPN 访</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageShare.qml" line="174"/>
<source>Share VPN access without the ability to manage the server</source>
<translation> VPN 访</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageShare.qml" line="175"/>
<source>Share access to server management. The user with whom you share full access to the server will be able to add and remove any protocols and services to the server, as well as change settings.</source>
<translation>访访</translation>
</message>
<message>
<source>VPN Access</source>
<translation>访VPN</translation>
<translation type="vanished">访VPN</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageShare.qml" line="146"/>
@ -2010,14 +2054,12 @@ and will not be shared or disclosed to the Amnezia or any third parties</source>
<translation>访</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageShare.qml" line="174"/>
<source>VPN access without the ability to manage the server</source>
<translation>访VPN</translation>
<translation type="vanished">访VPN</translation>
</message>
<message>
<location filename="../ui/qml/Pages2/PageShare.qml" line="175"/>
<source>Access to server management. The user with whom you share full access to the connection will be able to add and remove your protocols and services to the server, as well as change settings.</source>
<translation type="unfinished"></translation>
<translation type="vanished">访VPN外</translation>
</message>
<message>
<source>Access to server management. The user with whom you share full access to the connection will be able to add and remove your protocols and services to the servers, as well as change settings.</source>
@ -2325,7 +2367,7 @@ and will not be shared or disclosed to the Amnezia or any third parties</source>
<context>
<name>QObject</name>
<message>
<location filename="../protocols/protocols_defs.cpp" line="75"/>
<location filename="../protocols/protocols_defs.cpp" line="77"/>
<source>Sftp service</source>
<translation>Sftp </translation>
</message>
@ -2578,7 +2620,7 @@ and will not be shared or disclosed to the Amnezia or any third parties</source>
<message>
<location filename="../containers/containers_defs.cpp" line="111"/>
<source>AmneziaWG - Special protocol from Amnezia, based on WireGuard. It&apos;s fast like WireGuard, but very resistant to blockages. Recommended for regions with high levels of censorship.</source>
<translation type="unfinished"></translation>
<translation>AmneziaWG - Amnezia WireGuard WireGuard </translation>
</message>
<message>
<location filename="../containers/containers_defs.cpp" line="115"/>
@ -2610,7 +2652,14 @@ It employs its unique security protocol, leveraging the strength of SSL/TLS for
* Flexible customisation to suit user needs to work with different operating systems and devices
* Recognised by DPI analysis systems and therefore susceptible to blocking
* Can operate over both TCP and UDP network protocols.</source>
<translation type="unfinished"></translation>
<translation>OpenVPN VPN
SSL/TLS OpenVPN 使OpenVPN 广OpenVPN
* AmneziaVPN 使
*
* 使
* DPI分析系统识别
* TCP UDP </translation>
</message>
<message>
<location filename="../containers/containers_defs.cpp" line="145"/>
@ -2622,7 +2671,14 @@ It employs its unique security protocol, leveraging the strength of SSL/TLS for
* Configurable encryption protocol
* Detectable by some DPI systems
* Works over TCP network protocol.</source>
<translation type="unfinished"></translation>
<translation>Shadowsocks SOCKS5 使 AEAD Shadowsocks HTTPS Shadowsocks Amnezia支持有限使AmneziaWG协议
* AmneziaVPN
*
*
* DPI
* TCP </translation>
</message>
<message>
<location filename="../containers/containers_defs.cpp" line="155"/>
@ -2644,7 +2700,23 @@ If there is a extreme level of Internet censorship in your region, we advise you
* Not recognised by DPI analysis systems
* Works over TCP network protocol, 443 port.
</source>
<translation type="unfinished"></translation>
<translation> OpenVPN Cloak
OpenVPN Internet VPN
Cloak OpenVPN
Cloak 便 VPN Web VPN 使
Cloak VPN
使 OpenVPN over Cloak
* AmneziaVPN 使
*
*
* DPI
* TCP 443 </translation>
</message>
<message>
<location filename="../containers/containers_defs.cpp" line="174"/>
@ -2657,7 +2729,15 @@ WireGuard is very susceptible to blocking due to its distinct packet signatures.
* Minimum number of settings
* Easily recognised by DPI analysis systems, susceptible to blocking
* Works over UDP network protocol.</source>
<translation type="unfinished"></translation>
<translation> VPN
VPN 使 WireGuard OpenVPN
WireGuard VPN WireGuard (DPI)
* AmneziaVPN 使
*
*
* DPI分析系统识别
* UDP </translation>
</message>
<message>
<location filename="../containers/containers_defs.cpp" line="187"/>
@ -2670,7 +2750,15 @@ This means that AmneziaWG keeps the fast performance of the original while addin
* Minimum number of settings
* Not recognised by DPI analysis systems, resistant to blocking
* Works over UDP network protocol.</source>
<translation type="unfinished"></translation>
<translation>AmneziaWG VPN WireGuard
WireGuard AmneziaWG 使使
AmneziaWG 使 VPN
* AmneziaVPN 使
*
*
* DPI分析系统识别
* UDP </translation>
</message>
<message>
<location filename="../containers/containers_defs.cpp" line="203"/>
@ -2683,7 +2771,15 @@ While it offers a blend of security, stability, and speed, it&apos;s essential t
* Minimal configuration
* Recognised by DPI analysis systems
* Works over UDP network protocol, ports 500 and 4500.</source>
<translation type="unfinished"></translation>
<translation>IKEv2 IPSec 使 VPN
使
IKEv2 IKEv2
* Windows AmneziaVPN
*
*
* DPI分析系统认可
* UDP 500 4500 </translation>
</message>
<message>
<source>OpenVPN container</source>
@ -2956,7 +3052,7 @@ While it offers a blend of security, stability, and speed, it&apos;s essential t
<context>
<name>VpnConnection</name>
<message>
<location filename="../vpnconnection.cpp" line="422"/>
<location filename="../vpnconnection.cpp" line="406"/>
<source>Mbps</source>
<translation></translation>
</message>
@ -3014,27 +3110,27 @@ While it offers a blend of security, stability, and speed, it&apos;s essential t
<message>
<location filename="../containers/containers_defs.cpp" line="309"/>
<source>Medium or High</source>
<translation type="unfinished"></translation>
<translation></translation>
</message>
<message>
<location filename="../containers/containers_defs.cpp" line="310"/>
<source>Extreme</source>
<translation type="unfinished"></translation>
<translation></translation>
</message>
<message>
<location filename="../containers/containers_defs.cpp" line="318"/>
<source>I just want to increase the level of my privacy.</source>
<translation type="unfinished"></translation>
<translation></translation>
</message>
<message>
<location filename="../containers/containers_defs.cpp" line="319"/>
<source>I want to bypass censorship. This option recommended in most cases.</source>
<translation type="unfinished"></translation>
<translation>使</translation>
</message>
<message>
<location filename="../containers/containers_defs.cpp" line="321"/>
<source>Most VPN protocols are blocked. Recommended if other options are not working.</source>
<translation type="unfinished"></translation>
<translation> VPN </translation>
</message>
<message>
<source>High</source>

View file

@ -144,8 +144,6 @@ void ImportController::importConfig()
if (credentials.isValid() || m_config.contains(config_key::containers)) {
m_serversModel->addServer(m_config);
m_serversModel->setDefaultServerIndex(m_serversModel->getServersCount() - 1);
emit importFinished();
} else {
qDebug() << "Failed to import profile";

View file

@ -5,6 +5,7 @@
#include <QEventLoop>
#include <QJsonObject>
#include <QStandardPaths>
#include <QRandomGenerator>
#include "core/errorstrings.h"
#include "core/servercontroller.h"
@ -73,6 +74,38 @@ void InstallController::install(DockerContainer container, int port, TransportPr
containerConfig.insert(config_key::transport_proto,
ProtocolProps::transportProtoToString(transportProto, protocol));
if (container == DockerContainer::Awg) {
QString junkPacketCount = QString::number(QRandomGenerator::global()->bounded(3, 10));
QString junkPacketMinSize = QString::number(50);
QString junkPacketMaxSize = QString::number(1000);
QString initPacketJunkSize = QString::number(QRandomGenerator::global()->bounded(15, 150));
QString responsePacketJunkSize = QString::number(QRandomGenerator::global()->bounded(15, 150));
QSet<QString> headersValue;
while (headersValue.size() != 4) {
auto max = (std::numeric_limits<qint32>::max)();
headersValue.insert(QString::number(QRandomGenerator::global()->bounded(1, max)));
}
auto headersValueList = headersValue.values();
QString initPacketMagicHeader = headersValueList.at(0);
QString responsePacketMagicHeader = headersValueList.at(1);
QString underloadPacketMagicHeader = headersValueList.at(2);
QString transportPacketMagicHeader = headersValueList.at(3);
containerConfig[config_key::junkPacketCount] = junkPacketCount;
containerConfig[config_key::junkPacketMinSize] = junkPacketMinSize;
containerConfig[config_key::junkPacketMaxSize] = junkPacketMaxSize;
containerConfig[config_key::initPacketJunkSize] = initPacketJunkSize;
containerConfig[config_key::responsePacketJunkSize] = responsePacketJunkSize;
containerConfig[config_key::initPacketMagicHeader] = initPacketMagicHeader;
containerConfig[config_key::responsePacketMagicHeader] = responsePacketMagicHeader;
containerConfig[config_key::underloadPacketMagicHeader] = underloadPacketMagicHeader;
containerConfig[config_key::transportPacketMagicHeader] = transportPacketMagicHeader;
}
if (container == DockerContainer::Sftp) {
containerConfig.insert(config_key::userName, protocols::sftp::defaultUserName);
containerConfig.insert(config_key::password, Utils::getRandomString(10));
@ -132,7 +165,6 @@ void InstallController::installServer(DockerContainer container, QJsonObject &co
server.insert(config_key::defaultContainer, ContainerProps::containerToString(container));
m_serversModel->addServer(server);
m_serversModel->setDefaultServerIndex(m_serversModel->getServersCount() - 1);
emit installServerFinished(finishMessage);
return;
@ -183,9 +215,6 @@ void InstallController::installContainer(DockerContainer container, QJsonObject
"All installed containers have been added to the application");
}
if (ContainerProps::containerService(container) == ServiceType::Vpn) {
m_containersModel->setData(m_containersModel->index(0, 0), container, ContainersModel::Roles::IsDefaultRole);
}
emit installContainerFinished(finishMessage, ContainerProps::containerService(container) == ServiceType::Other);
return;
}
@ -475,8 +504,9 @@ void InstallController::addEmptyServer()
server.insert(config_key::port, m_currentlyInstalledServerCredentials.port);
server.insert(config_key::description, m_settings->nextAvailableServerName());
server.insert(config_key::defaultContainer, ContainerProps::containerToString(DockerContainer::None));
m_serversModel->addServer(server);
m_serversModel->setDefaultServerIndex(m_serversModel->getServersCount() - 1);
emit installServerFinished(tr("Server added successfully"));
}

View file

@ -41,7 +41,7 @@ bool ContainersModel::setData(const QModelIndex &index, const QVariant &value, i
// return container;
case IsInstalledRole:
// return m_settings->containers(m_currentlyProcessedServerIndex).contains(container);
case IsDefaultRole: {
case IsDefaultRole: { //todo remove
m_settings->setDefaultContainer(m_currentlyProcessedServerIndex, container);
m_defaultContainerIndex = container;
emit defaultContainerChanged();
@ -117,6 +117,14 @@ QString ContainersModel::getDefaultContainerName()
return ContainerProps::containerHumanNames().value(m_defaultContainerIndex);
}
void ContainersModel::setDefaultContainer(int index)
{
auto container = static_cast<DockerContainer>(index);
m_settings->setDefaultContainer(m_currentlyProcessedServerIndex, container);
m_defaultContainerIndex = container;
emit defaultContainerChanged();
}
int ContainersModel::getCurrentlyProcessedContainerIndex()
{
return m_currentlyProcessedContainerIndex;

View file

@ -46,6 +46,7 @@ public:
public slots:
DockerContainer getDefaultContainer();
QString getDefaultContainerName();
void setDefaultContainer(int index);
void setCurrentlyProcessedServerIndex(const int index);

View file

@ -96,7 +96,7 @@ void ServersModel::setDefaultServerIndex(const int index)
{
m_settings->setDefaultServer(index);
m_defaultServerIndex = m_settings->defaultServerIndex();
emit defaultServerIndexChanged();
emit defaultServerIndexChanged(m_defaultServerIndex);
}
const int ServersModel::getDefaultServerIndex()

View file

@ -64,7 +64,7 @@ protected:
signals:
void currentlyProcessedServerIndexChanged(const int index);
void defaultServerIndexChanged();
void defaultServerIndexChanged(const int index);
void defaultServerNameChanged();
private:

View file

@ -8,6 +8,7 @@ SitesModel::SitesModel(std::shared_ptr<Settings> settings, QObject *parent)
m_isSplitTunnelingEnabled = false;
m_currentRouteMode = Settings::RouteMode::VpnOnlyForwardSites;
} else {
m_isSplitTunnelingEnabled = true;
m_currentRouteMode = routeMode;
}
fillSites();

View file

@ -142,6 +142,7 @@ Button {
PageController.setTriggeredBtConnectButton(true)
ServersModel.currentlyProcessedIndex = ServersModel.getDefaultServerIndex()
InstallController.setShouldCreateServer(false)
PageController.goToPage(PageEnum.PageSetupWizardEasy)
return

View file

@ -50,34 +50,26 @@ ListView {
imageSource: "qrc:/images/controls/download.svg"
showImage: !isInstalled
checkable: isInstalled
checkable: isInstalled && !ConnectionController.isConnected && isSupported
checked: isDefault
onPressed: function(mouse) {
if (!isSupported) {
PageController.showErrorMessage(qsTr("The selected protocol is not supported on the current platform"))
}
}
onClicked: {
if (checked) {
var needReconnected = false
if (!isDefault) {
needReconnected = true
}
if (ConnectionController.isConnected && isInstalled) {
PageController.showNotificationMessage(qsTr("Unable change protocol while there is an active connection"))
return
}
if (checked) {
isDefault = true
menuContent.currentIndex = index
containersDropDown.menuVisible = false
if (needReconnected && (ConnectionController.isConnected || ConnectionController.isConnectionInProgress)) {
PageController.showNotificationMessage(qsTr("Reconnect via VPN Procotol: ") + name)
PageController.goToPageHome()
ConnectionController.openConnection()
}
} else {
if (!isSupported && isInstalled) {
PageController.showErrorMessage(qsTr("The selected protocol is not supported on the current platform"))
return
}
ContainersModel.setCurrentlyProcessedContainerIndex(proxyContainersModel.mapToSource(index))
InstallController.setShouldCreateServer(false)
PageController.goToPage(PageEnum.PageSetupWizardProtocolSettings)

View file

@ -17,9 +17,11 @@ DrawerType {
property var noButtonFunction
width: parent.width
height: parent.height * 0.5
height: content.implicitHeight + 32
ColumnLayout {
id: content
anchors.top: parent.top
anchors.left: parent.left
anchors.right: parent.right

View file

@ -81,6 +81,7 @@ RadioButton {
Text {
text: root.headerText
wrapMode: Text.WordWrap
color: "#D7D8DB"
font.pixelSize: 25
font.weight: 700
@ -110,6 +111,7 @@ RadioButton {
Text {
text: root.footerText
wrapMode: Text.WordWrap
visible: root.footerText !== ""
color: "#878B91"
font.pixelSize: 13

View file

@ -1,6 +1,8 @@
import QtQuick
import QtQuick.Controls
import "../Config"
Drawer {
id: drawer
property bool needCloseButton: true
@ -39,6 +41,18 @@ Drawer {
border.color: "#2C2D30"
border.width: 1
Rectangle {
visible: GC.isMobile()
anchors.top: parent.top
anchors.horizontalCenter: parent.horizontalCenter
anchors.topMargin: 10
width: 20
height: 2
color: "#2C2D30"
}
}
Overlay.modal: Rectangle {

View file

@ -30,17 +30,13 @@ Switch {
property string hoveredIndicatorBackgroundColor: Qt.rgba(1, 1, 1, 0.08)
property string defaultIndicatorBackgroundColor: "transparent"
implicitWidth: content.implicitWidth + switcher.implicitWidth
implicitHeight: content.implicitHeight
hoverEnabled: enabled ? true : false
indicator: Rectangle {
id: switcher
anchors.left: content.right
anchors.right: parent.right
anchors.verticalCenter: parent.verticalCenter
anchors.leftMargin: 4
implicitWidth: 52
implicitHeight: 32
@ -90,11 +86,11 @@ Switch {
contentItem: ColumnLayout {
id: content
anchors.fill: parent
anchors.rightMargin: switcher.implicitWidth
anchors.verticalCenter: parent.verticalCenter
ListItemTitleType {
Layout.fillWidth: true
rightPadding: indicator.width
text: root.text
color: root.enabled ? root.textColor : root.textDisabledColor
@ -104,6 +100,7 @@ Switch {
id: description
Layout.fillWidth: true
rightPadding: indicator.width
color: root.enabled ? root.descriptionTextColor : root.descriptionTextDisabledColor

View file

@ -241,8 +241,18 @@ PageType {
}
]
DividerType {
Layout.topMargin: 10
Layout.fillWidth: false
Layout.preferredWidth: 20
Layout.preferredHeight: 2
Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter
visible: (buttonContent.collapsedVisibility || buttonContent.expandedVisibility)
}
RowLayout {
Layout.topMargin: 24
Layout.topMargin: 14
Layout.leftMargin: 24
Layout.rightMargin: 24
Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter
@ -305,7 +315,7 @@ PageType {
Header1TextType {
Layout.fillWidth: true
Layout.topMargin: 24
Layout.topMargin: 14
Layout.leftMargin: 16
Layout.rightMargin: 16
@ -471,10 +481,16 @@ PageType {
}
checked: index === serversMenuContent.currentIndex
checkable: !ConnectionController.isConnected
ButtonGroup.group: serversRadioButtonGroup
onClicked: {
if (ConnectionController.isConnected) {
PageController.showNotificationMessage(qsTr("Unable change server while there is an active connection"))
return
}
serversMenuContent.currentIndex = index
ServersModel.currentlyProcessedIndex = index

View file

@ -276,7 +276,7 @@ PageType {
onClicked: {
questionDrawer.headerText = qsTr("Remove AmneziaWG from server?")
questionDrawer.descriptionText = qsTr("All users who you shared a connection with will no longer be able to connect to it.")
questionDrawer.descriptionText = qsTr("All users with whom you shared a connection will no longer be able to connect to it.")
questionDrawer.yesButtonText = qsTr("Continue")
questionDrawer.noButtonText = qsTr("Cancel")

View file

@ -5,6 +5,7 @@ import QtQuick.Layouts
import SortFilterProxyModel 0.2
import PageEnum 1.0
import ContainerEnum 1.0
import "./"
import "../Controls2"
@ -252,6 +253,8 @@ PageType {
ColumnLayout {
id: checkboxLayout
anchors.fill: parent
CheckBoxType {
Layout.fillWidth: true
@ -351,6 +354,8 @@ PageType {
Layout.leftMargin: -8
implicitHeight: 32
visible: ContainersModel.getCurrentlyProcessedContainerIndex() === ContainerEnum.OpenVpn
defaultColor: "transparent"
hoveredColor: Qt.rgba(1, 1, 1, 0.08)
pressedColor: Qt.rgba(1, 1, 1, 0.12)
@ -360,7 +365,7 @@ PageType {
onClicked: {
questionDrawer.headerText = qsTr("Remove OpenVpn from server?")
questionDrawer.descriptionText = qsTr("All users who you shared a connection with will no longer be able to connect to it.")
questionDrawer.descriptionText = qsTr("All users with whom you shared a connection will no longer be able to connect to it.")
questionDrawer.yesButtonText = qsTr("Continue")
questionDrawer.noButtonText = qsTr("Cancel")

View file

@ -169,12 +169,14 @@ PageType {
width: parent.width
visible: ServersModel.isCurrentlyProcessedServerHasWriteAccess()
text: qsTr("Remove ") + ContainersModel.getCurrentlyProcessedContainerName()
textColor: "#EB5757"
clickedFunction: function() {
questionDrawer.headerText = qsTr("Remove %1 from server?").arg(ContainersModel.getCurrentlyProcessedContainerName())
questionDrawer.descriptionText = qsTr("All users who you shared a connection with will no longer be able to connect to it.")
questionDrawer.descriptionText = qsTr("All users with whom you shared a connection will no longer be able to connect to it.")
questionDrawer.yesButtonText = qsTr("Continue")
questionDrawer.noButtonText = qsTr("Cancel")

View file

@ -70,7 +70,7 @@ PageType {
Layout.margins: 16
text: qsTr("Auto start")
descriptionText: qsTr("Launch the application every time %1 starts").arg(Qt.platform.os)
descriptionText: qsTr("Launch the application every time the device is starts")
checked: SettingsController.isAutoStartEnabled()
onCheckedChanged: {

View file

@ -108,11 +108,11 @@ PageType {
}
DividerType {
visible: !GC.isMobile()
visible: GC.isDesktop()
}
LabelWithButtonType {
visible: false//!GC.isMobile()
visible: false
Layout.fillWidth: true
@ -125,7 +125,7 @@ PageType {
}
DividerType {
visible: false//!GC.isMobile()
visible: false
}
}
}

View file

@ -46,6 +46,7 @@ PageType {
}
ParagraphTextType {
Layout.fillWidth: true
text: qsTr("If AmneziaDNS is not used or installed")
}

View file

@ -114,7 +114,7 @@ PageType {
clickedFunction: function() {
questionDrawer.headerText = qsTr("Remove %1 from server?").arg(ContainersModel.getCurrentlyProcessedContainerName())
questionDrawer.descriptionText = qsTr("All users who you shared a connection with will no longer be able to connect to it.")
questionDrawer.descriptionText = qsTr("All users with whom you shared a connection will no longer be able to connect to it.")
questionDrawer.yesButtonText = qsTr("Continue")
questionDrawer.noButtonText = qsTr("Cancel")

View file

@ -24,6 +24,10 @@ PageType {
target: InstallController
function onInstallContainerFinished(finishedMessage, isServiceInstall) {
if (!ConnectionController.isConnected && !isServiceInstall) {
ContainersModel.setDefaultContainer(ContainersModel.getCurrentlyProcessedContainerIndex())
}
PageController.goToStartPage()
if (stackView.currentItem.objectName === PageController.getPagePath(PageEnum.PageHome)) {
PageController.restorePageHomeState(true)
@ -41,6 +45,10 @@ PageType {
}
function onInstallServerFinished(finishedMessage) {
if (!ConnectionController.isConnected) {
ServersModel.setDefaultServerIndex(ServersModel.getServersCount() - 1);
}
PageController.goToStartPage()
if (stackView.currentItem.objectName === PageController.getPagePath(PageEnum.PageSetupWizardStart)) {
PageController.replaceStartPage()

View file

@ -224,7 +224,7 @@ PageType {
if (ProtocolProps.defaultPort(defaultContainerProto) < 0) {
port.visible = false
} else {
port.textFieldText = ProtocolProps.defaultPort(defaultContainerProto)
port.textFieldText = ProtocolProps.getPortForInstall(defaultContainerProto)
}
transportProtoSelector.currentIndex = ProtocolProps.defaultTransportProto(defaultContainerProto)

View file

@ -134,7 +134,7 @@ PageType {
text: qsTr("I have nothing")
onClicked: Qt.openUrlExternally("https://ru-docs.amnezia.org/guides/hosting-instructions")
onClicked: Qt.openUrlExternally("https://amnezia.org/instructions/0_starter-guide")
}
}

View file

@ -24,6 +24,10 @@ PageType {
}
function onImportFinished() {
if (ConnectionController.isConnected) {
ServersModel.setDefaultServerIndex(ServersModel.getServersCount() - 1);
}
PageController.goToStartPage()
if (stackView.currentItem.objectName === PageController.getPagePath(PageEnum.PageSetupWizardStart)) {
PageController.replaceStartPage()

View file

@ -118,7 +118,7 @@ PageType {
Layout.fillWidth: true
Layout.topMargin: 24
headerText: qsTr("VPN Access")
headerText: qsTr("Share VPN Access")
}
Rectangle {
@ -171,8 +171,8 @@ PageType {
Layout.topMargin: 24
Layout.bottomMargin: 24
text: accessTypeSelector.currentIndex === 0 ? qsTr("VPN access without the ability to manage the server") :
qsTr("Access to server management. The user with whom you share full access to the connection will be able to add and remove your protocols and services to the server, as well as change settings.")
text: accessTypeSelector.currentIndex === 0 ? qsTr("Share VPN access without the ability to manage the server") :
qsTr("Share access to server management. The user with whom you share full access to the server will be able to add and remove any protocols and services to the server, as well as change settings.")
color: "#878B91"
}
@ -320,7 +320,7 @@ PageType {
if (index === ContainerProps.containerFromString("amnezia-openvpn")) {
root.connectionTypesModel.push(openVpnConnectionFormat)
} else if (index === ContainerProps.containerFromString("amnezia-awg")) {
} else if (index === ContainerProps.containerFromString("amnezia-wireguard")) {
root.connectionTypesModel.push(wireGuardConnectionFormat)
}
}

View file

@ -96,16 +96,16 @@ if [ "${MAC_CERT_PW+x}" ]; then
security find-identity -p codesigning
echo "Signing App bundle..."
/usr/bin/codesign --deep --force --verbose --timestamp -o runtime --sign "Developer ID Application: Privacy Technologies OU (X7UJ388FXK)" $BUNDLE_DIR
/usr/bin/codesign --deep --force --verbose --timestamp -o runtime --sign "$MAC_SIGNER_ID" $BUNDLE_DIR
/usr/bin/codesign --verify -vvvv $BUNDLE_DIR || true
spctl -a -vvvv $BUNDLE_DIR || true
if [ "${NOTARIZE_APP+x}" ]; then
echo "Notarizing App bundle..."
/usr/bin/ditto -c -k --keepParent $BUNDLE_DIR $PROJECT_DIR/Bundle_to_notarize.zip
xcrun altool --notarize-app -f $PROJECT_DIR/Bundle_to_notarize.zip -t osx --primary-bundle-id "$APP_DOMAIN" -u "$APPLE_DEV_EMAIL" -p $APPLE_DEV_PASSWORD
xcrun notarytool submit $PROJECT_DIR/Bundle_to_notarize.zip --apple-id $APPLE_DEV_EMAIL --team-id $MAC_TEAM_ID --password $APPLE_DEV_PASSWORD
rm $PROJECT_DIR/Bundle_to_notarize.zip
sleep 600
sleep 300
xcrun stapler staple $BUNDLE_DIR
xcrun stapler validate $BUNDLE_DIR
spctl -a -vvvv $BUNDLE_DIR || true
@ -130,15 +130,15 @@ $QIF_BIN_DIR/binarycreator --offline-only -v -c $BUILD_DIR/installer/config/maco
if [ "${MAC_CERT_PW+x}" ]; then
echo "Signing installer bundle..."
security unlock-keychain -p $TEMP_PASS $KEYCHAIN
/usr/bin/codesign --deep --force --verbose --timestamp -o runtime --sign "Developer ID Application: Privacy Technologies OU (X7UJ388FXK)" $INSTALLER_BUNDLE_DIR
/usr/bin/codesign --deep --force --verbose --timestamp -o runtime --sign "$MAC_SIGNER_ID" $INSTALLER_BUNDLE_DIR
/usr/bin/codesign --verify -vvvv $INSTALLER_BUNDLE_DIR || true
if [ "${NOTARIZE_APP+x}" ]; then
echo "Notarizing installer bundle..."
/usr/bin/ditto -c -k --keepParent $INSTALLER_BUNDLE_DIR $PROJECT_DIR/Installer_bundle_to_notarize.zip
xcrun altool --notarize-app -f $PROJECT_DIR/Installer_bundle_to_notarize.zip -t osx --primary-bundle-id "$APP_DOMAIN" -u "$APPLE_DEV_EMAIL" -p $APPLE_DEV_PASSWORD
xcrun notarytool submit $PROJECT_DIR/Installer_bundle_to_notarize.zip --apple-id $APPLE_DEV_EMAIL --team-id $MAC_TEAM_ID --password $APPLE_DEV_PASSWORD
rm $PROJECT_DIR/Installer_bundle_to_notarize.zip
sleep 600
sleep 300
xcrun stapler staple $INSTALLER_BUNDLE_DIR
xcrun stapler validate $INSTALLER_BUNDLE_DIR
spctl -a -vvvv $INSTALLER_BUNDLE_DIR || true
@ -151,13 +151,13 @@ hdiutil create -volname AmneziaVPN -srcfolder $BUILD_DIR/installer/$APP_NAME.app
if [ "${MAC_CERT_PW+x}" ]; then
echo "Signing DMG installer..."
security unlock-keychain -p $TEMP_PASS $KEYCHAIN
/usr/bin/codesign --deep --force --verbose --timestamp -o runtime --sign "Developer ID Application: Privacy Technologies OU (X7UJ388FXK)" $DMG_FILENAME
/usr/bin/codesign --deep --force --verbose --timestamp -o runtime --sign "$MAC_SIGNER_ID" $DMG_FILENAME
/usr/bin/codesign --verify -vvvv $DMG_FILENAME || true
if [ "${NOTARIZE_APP+x}" ]; then
echo "Notarizing DMG installer..."
xcrun altool --notarize-app -f $DMG_FILENAME -t osx --primary-bundle-id $APP_DOMAIN -u $APPLE_DEV_EMAIL -p $APPLE_DEV_PASSWORD
sleep 600
xcrun notarytool submit $DMG_FILENAME --apple-id $APPLE_DEV_EMAIL --team-id $MAC_TEAM_ID --password $APPLE_DEV_PASSWORD
sleep 300
xcrun stapler staple $DMG_FILENAME
xcrun stapler validate $DMG_FILENAME
fi