From bb576450b2e5dd574bd370cfbabfe50b5c3fb018 Mon Sep 17 00:00:00 2001 From: aiamnezia Date: Mon, 28 Jul 2025 15:36:49 +0400 Subject: [PATCH] Fix AmneziaWG settings --- client/containers/containers_defs.cpp | 9 +++++++++ client/containers/containers_defs.h | 1 + client/ui/controllers/api/apiConfigsController.cpp | 2 +- client/ui/controllers/importController.cpp | 6 +++--- client/ui/models/containers_model.cpp | 6 ++---- client/ui/models/protocols_model.cpp | 5 +++-- client/ui/models/servers_model.cpp | 4 ++-- 7 files changed, 21 insertions(+), 12 deletions(-) diff --git a/client/containers/containers_defs.cpp b/client/containers/containers_defs.cpp index 27d03df46..8130df884 100644 --- a/client/containers/containers_defs.cpp +++ b/client/containers/containers_defs.cpp @@ -281,6 +281,15 @@ Proto ContainerProps::defaultProtocol(DockerContainer c) } } +QString ContainerProps::containerTypeToProtocolString(DockerContainer c) +{ + if (c == DockerContainer::None) + return "none"; + + Proto p = defaultProtocol(c); + return ProtocolProps::protoToString(p); +} + bool ContainerProps::isSupportedByCurrentPlatform(DockerContainer c) { #ifdef Q_OS_WINDOWS diff --git a/client/containers/containers_defs.h b/client/containers/containers_defs.h index 4548d322a..1bb1adf72 100644 --- a/client/containers/containers_defs.h +++ b/client/containers/containers_defs.h @@ -46,6 +46,7 @@ namespace amnezia Q_INVOKABLE static amnezia::DockerContainer containerFromString(const QString &container); Q_INVOKABLE static QString containerToString(amnezia::DockerContainer container); Q_INVOKABLE static QString containerTypeToString(amnezia::DockerContainer c); + Q_INVOKABLE static QString containerTypeToProtocolString(amnezia::DockerContainer c); Q_INVOKABLE static QList allContainers(); diff --git a/client/ui/controllers/api/apiConfigsController.cpp b/client/ui/controllers/api/apiConfigsController.cpp index 500c48964..72fd29750 100644 --- a/client/ui/controllers/api/apiConfigsController.cpp +++ b/client/ui/controllers/api/apiConfigsController.cpp @@ -158,7 +158,7 @@ namespace return ErrorCode::ApiConfigEmptyError; } auto container = containers.at(0).toObject(); - QString containerName = ContainerProps::containerTypeToString(DockerContainer::Awg); + QString containerName = ContainerProps::containerTypeToProtocolString(DockerContainer::Awg); auto serverProtocolConfig = container.value(containerName).toObject(); auto clientProtocolConfig = QJsonDocument::fromJson(serverProtocolConfig.value(config_key::last_config).toString().toUtf8()).object(); diff --git a/client/ui/controllers/importController.cpp b/client/ui/controllers/importController.cpp index df5c66c58..36a10901c 100644 --- a/client/ui/controllers/importController.cpp +++ b/client/ui/controllers/importController.cpp @@ -271,7 +271,7 @@ void ImportController::processNativeWireGuardConfig() auto containers = m_config.value(config_key::containers).toArray(); if (!containers.isEmpty()) { auto container = containers.at(0).toObject(); - auto serverProtocolConfig = container.value(ContainerProps::containerTypeToString(DockerContainer::WireGuard)).toObject(); + auto serverProtocolConfig = container.value(ContainerProps::containerTypeToProtocolString(DockerContainer::WireGuard)).toObject(); auto clientProtocolConfig = QJsonDocument::fromJson(serverProtocolConfig.value(config_key::last_config).toString().toUtf8()).object(); QString junkPacketCount = QString::number(QRandomGenerator::global()->bounded(2, 5)); @@ -728,7 +728,7 @@ void ImportController::processAmneziaConfig(QJsonObject &config) auto container = containers.at(i).toObject(); auto dockerContainer = ContainerProps::containerFromString(container.value(config_key::container).toString()); if (dockerContainer == DockerContainer::Awg || dockerContainer == DockerContainer::AwgLegacy || dockerContainer == DockerContainer::WireGuard) { - auto containerConfig = container.value(ContainerProps::containerTypeToString(dockerContainer)).toObject(); + auto containerConfig = container.value(ContainerProps::containerTypeToProtocolString(dockerContainer)).toObject(); auto protocolConfig = containerConfig.value(config_key::last_config).toString(); if (protocolConfig.isEmpty()) { return; @@ -740,7 +740,7 @@ void ImportController::processAmneziaConfig(QJsonObject &config) containerConfig[config_key::last_config] = QString(QJsonDocument(jsonConfig).toJson()); - container[ContainerProps::containerTypeToString(dockerContainer)] = containerConfig; + container[ContainerProps::containerTypeToProtocolString(dockerContainer)] = containerConfig; containers.replace(i, container); config.insert(config_key::containers, containers); } diff --git a/client/ui/models/containers_model.cpp b/client/ui/models/containers_model.cpp index 081c4d6ef..046d937b4 100644 --- a/client/ui/models/containers_model.cpp +++ b/client/ui/models/containers_model.cpp @@ -32,10 +32,8 @@ QVariant ContainersModel::data(const QModelIndex &index, int role) const return m_containers.value(container); } case IsThirdPartyConfigRole: { - QJsonObject c = m_containers.value(container); - auto p = ContainerProps::defaultProtocol(container); - QString key = ProtocolProps::protoToString(p); - return c.value(key).toObject().value(config_key::isThirdPartyConfig).toBool(); + QString protocolKey = ContainerProps::containerTypeToProtocolString(container); + return m_containers.value(container).value(protocolKey).toObject().value(config_key::isThirdPartyConfig).toBool(); } case ServiceTypeRole: return ContainerProps::containerService(container); case DockerContainerRole: return container; diff --git a/client/ui/models/protocols_model.cpp b/client/ui/models/protocols_model.cpp index 019b2d2f6..8ddbaa81e 100644 --- a/client/ui/models/protocols_model.cpp +++ b/client/ui/models/protocols_model.cpp @@ -42,7 +42,7 @@ QVariant ProtocolsModel::data(const QModelIndex &index, int role) const return static_cast(clientProtocolPage(ProtocolProps::protoFromString(m_content.keys().at(index.row())))); case ProtocolIndexRole: return ProtocolProps::protoFromString(m_content.keys().at(index.row())); case RawConfigRole: { - auto protocolConfig = m_content.value(ContainerProps::containerTypeToString(m_container)).toObject(); + auto protocolConfig = m_content.value(ContainerProps::containerTypeToProtocolString(m_container)).toObject(); auto lastConfigJsonDoc = QJsonDocument::fromJson(protocolConfig.value(config_key::last_config).toString().toUtf8()); auto lastConfigJson = lastConfigJsonDoc.object(); @@ -55,7 +55,8 @@ QVariant ProtocolsModel::data(const QModelIndex &index, int role) const return rawConfig; } case IsClientProtocolExistsRole: { - auto protocolConfig = m_content.value(ContainerProps::containerTypeToString(m_container)).toObject(); + QString protocolKey = ContainerProps::containerTypeToProtocolString(m_container); + auto protocolConfig = m_content.value(protocolKey).toObject(); auto lastConfigJsonDoc = QJsonDocument::fromJson(protocolConfig.value(config_key::last_config).toString().toUtf8()); auto lastConfigJson = lastConfigJsonDoc.object(); diff --git a/client/ui/models/servers_model.cpp b/client/ui/models/servers_model.cpp index 772547bb1..9c038eb29 100644 --- a/client/ui/models/servers_model.cpp +++ b/client/ui/models/servers_model.cpp @@ -734,7 +734,7 @@ bool ServersModel::isDefaultServerDefaultContainerHasSplitTunneling() continue; } if (defaultContainer == DockerContainer::Awg || defaultContainer == DockerContainer::AwgLegacy || defaultContainer == DockerContainer::WireGuard) { - QJsonObject serverProtocolConfig = container.value(ContainerProps::containerTypeToString(defaultContainer)).toObject(); + QJsonObject serverProtocolConfig = container.value(ContainerProps::containerTypeToProtocolString(defaultContainer)).toObject(); QString clientProtocolConfigString = serverProtocolConfig.value(config_key::last_config).toString(); QJsonObject clientProtocolConfig = QJsonDocument::fromJson(clientProtocolConfigString.toUtf8()).object(); return (clientProtocolConfigString.contains("AllowedIPs") && !clientProtocolConfigString.contains("AllowedIPs = 0.0.0.0/0, ::/0")) @@ -742,7 +742,7 @@ bool ServersModel::isDefaultServerDefaultContainerHasSplitTunneling() && !clientProtocolConfig.value(config_key::allowed_ips).toArray().contains("0.0.0.0/0")); } else if (defaultContainer == DockerContainer::Cloak || defaultContainer == DockerContainer::OpenVpn || defaultContainer == DockerContainer::ShadowSocks) { - auto serverProtocolConfig = container.value(ContainerProps::containerTypeToString(DockerContainer::OpenVpn)).toObject(); + auto serverProtocolConfig = container.value(ContainerProps::containerTypeToProtocolString(DockerContainer::OpenVpn)).toObject(); QString clientProtocolConfigString = serverProtocolConfig.value(config_key::last_config).toString(); return !clientProtocolConfigString.isEmpty() && !clientProtocolConfigString.contains("redirect-gateway"); }