added the ability to change awg parameters on the protocol settings page

This commit is contained in:
vladimir.kuznetsov 2023-10-06 16:43:52 +05:00
parent 9df262d502
commit b7a65343af
9 changed files with 224 additions and 80 deletions

View file

@ -3,6 +3,8 @@
#include <QJsonDocument>
#include <QJsonObject>
#include "core/servercontroller.h"
AmneziaWireGuardConfigurator::AmneziaWireGuardConfigurator(std::shared_ptr<Settings> settings, QObject *parent)
: WireguardConfigurator(settings, true, parent)
{
@ -15,46 +17,43 @@ QString AmneziaWireGuardConfigurator::genAmneziaWireGuardConfig(const ServerCred
QString config = WireguardConfigurator::genWireguardConfig(credentials, container, containerConfig, errorCode);
QJsonObject jsonConfig = QJsonDocument::fromJson(config.toUtf8()).object();
QJsonObject awgConfig = containerConfig.value(config_key::amneziaWireguard).toObject();
auto junkPacketCount =
awgConfig.value(config_key::junkPacketCount).toString(protocols::amneziawireguard::defaultJunkPacketCount);
auto junkPacketMinSize =
awgConfig.value(config_key::junkPacketMinSize).toString(protocols::amneziawireguard::defaultJunkPacketMinSize);
auto junkPacketMaxSize =
awgConfig.value(config_key::junkPacketMaxSize).toString(protocols::amneziawireguard::defaultJunkPacketMaxSize);
auto initPacketJunkSize =
awgConfig.value(config_key::initPacketJunkSize).toString(protocols::amneziawireguard::defaultInitPacketJunkSize);
auto responsePacketJunkSize =
awgConfig.value(config_key::responsePacketJunkSize).toString(protocols::amneziawireguard::defaultResponsePacketJunkSize);
auto initPacketMagicHeader =
awgConfig.value(config_key::initPacketMagicHeader).toString(protocols::amneziawireguard::defaultInitPacketMagicHeader);
auto responsePacketMagicHeader =
awgConfig.value(config_key::responsePacketMagicHeader).toString(protocols::amneziawireguard::defaultResponsePacketMagicHeader);
auto underloadPacketMagicHeader =
awgConfig.value(config_key::underloadPacketMagicHeader).toString(protocols::amneziawireguard::defaultUnderloadPacketMagicHeader);
auto transportPacketMagicHeader =
awgConfig.value(config_key::transportPacketMagicHeader).toString(protocols::amneziawireguard::defaultTransportPacketMagicHeader);
ServerController serverController(m_settings);
QString serverConfig = serverController.getTextFileFromContainer(container, credentials, protocols::amneziawireguard::serverConfigPath, errorCode);
config.replace("$JUNK_PACKET_COUNT", junkPacketCount);
config.replace("$JUNK_PACKET_MIN_SIZE", junkPacketMinSize);
config.replace("$JUNK_PACKET_MAX_SIZE", junkPacketMaxSize);
config.replace("$INIT_PACKET_JUNK_SIZE", initPacketJunkSize);
config.replace("$RESPONSE_PACKET_JUNK_SIZE", responsePacketJunkSize);
config.replace("$INIT_PACKET_MAGIC_HEADER", initPacketMagicHeader);
config.replace("$RESPONSE_PACKET_MAGIC_HEADER", responsePacketMagicHeader);
config.replace("$UNDERLOAD_PACKET_MAGIC_HEADER", underloadPacketMagicHeader);
config.replace("$TRANSPORT_PACKET_MAGIC_HEADER", transportPacketMagicHeader);
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());
}
}
}
jsonConfig[config_key::junkPacketCount] = junkPacketCount;
jsonConfig[config_key::junkPacketMinSize] = junkPacketMinSize;
jsonConfig[config_key::junkPacketMaxSize] = junkPacketMaxSize;
jsonConfig[config_key::initPacketJunkSize] = initPacketJunkSize;
jsonConfig[config_key::responsePacketJunkSize] = responsePacketJunkSize;
jsonConfig[config_key::initPacketMagicHeader] = initPacketMagicHeader;
jsonConfig[config_key::responsePacketMagicHeader] = responsePacketMagicHeader;
jsonConfig[config_key::underloadPacketMagicHeader] = underloadPacketMagicHeader;
jsonConfig[config_key::transportPacketMagicHeader] = transportPacketMagicHeader;
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);
return QJsonDocument(jsonConfig).toJson();
}

View file

@ -30,6 +30,9 @@ WireguardConfigurator::WireguardConfigurator(std::shared_ptr<Settings> settings,
: amnezia::protocols::wireguard::serverPskKeyPath;
m_configTemplate = m_isAmneziaWireGuard ? ProtocolScriptType::amnezia_wireguard_template
: ProtocolScriptType::wireguard_template;
m_protocolName = m_isAmneziaWireGuard ? config_key::amneziaWireguard : config_key::wireguard;
m_defaultPort = m_isAmneziaWireGuard ? protocols::wireguard::defaultPort : protocols::amneziawireguard::defaultPort;
}
WireguardConfigurator::ConnectionData WireguardConfigurator::genClientKeys()
@ -70,10 +73,7 @@ WireguardConfigurator::ConnectionData WireguardConfigurator::prepareWireguardCon
{
WireguardConfigurator::ConnectionData connData = WireguardConfigurator::genClientKeys();
connData.host = credentials.hostName;
connData.port = containerConfig.value(m_isAmneziaWireGuard ? config_key::amneziaWireguard : config_key::wireguard)
.toObject()
.value(config_key::port)
.toString(protocols::wireguard::defaultPort);
connData.port = containerConfig.value(m_protocolName).toObject().value(config_key::port).toString(m_defaultPort);
if (connData.clientPrivKey.isEmpty() || connData.clientPubKey.isEmpty()) {
if (errorCode)

View file

@ -42,6 +42,8 @@ private:
QString m_serverPublicKeyPath;
QString m_serverPskKeyPath;
amnezia::ProtocolScriptType m_configTemplate;
QString m_protocolName;
QString m_defaultPort;
};
#endif // WIREGUARD_CONFIGURATOR_H