mirror of
https://github.com/amnezia-vpn/amnezia-client.git
synced 2026-06-22 02:01:08 +07:00
a49892c7e7
* Feat: Add MtProxy (Telegram) * add path files * Feat: Add Telemt (MtProxy) * fixed secret & enum * remove old path * refactor: move logic from ui to core --------- Co-authored-by: vkamn <vk@amnezia.org>
163 lines
5.5 KiB
C++
163 lines
5.5 KiB
C++
#include "telemtProtocolConfig.h"
|
|
|
|
#include "core/utils/constants/configKeys.h"
|
|
#include "core/utils/constants/protocolConstants.h"
|
|
|
|
#include <QJsonArray>
|
|
#include <algorithm>
|
|
|
|
using namespace amnezia;
|
|
|
|
QJsonObject TelemtProtocolConfig::toJson() const
|
|
{
|
|
QJsonObject obj;
|
|
if (!port.isEmpty()) {
|
|
obj[QString(configKey::port)] = port;
|
|
}
|
|
if (!secret.isEmpty()) {
|
|
obj[protocols::telemt::secretKey] = secret;
|
|
}
|
|
if (!tag.isEmpty()) {
|
|
obj[protocols::telemt::tagKey] = tag;
|
|
}
|
|
if (!tgLink.isEmpty()) {
|
|
obj[protocols::telemt::tgLinkKey] = tgLink;
|
|
}
|
|
if (!tmeLink.isEmpty()) {
|
|
obj[protocols::telemt::tmeLinkKey] = tmeLink;
|
|
}
|
|
obj[protocols::telemt::isEnabledKey] = isEnabled;
|
|
if (!publicHost.isEmpty()) {
|
|
obj[protocols::telemt::publicHostKey] = publicHost;
|
|
}
|
|
if (!transportMode.isEmpty()) {
|
|
obj[protocols::telemt::transportModeKey] = transportMode;
|
|
}
|
|
if (!tlsDomain.isEmpty()) {
|
|
obj[protocols::telemt::tlsDomainKey] = tlsDomain;
|
|
}
|
|
obj[protocols::telemt::maskEnabledKey] = maskEnabled;
|
|
obj[protocols::telemt::tlsEmulationKey] = tlsEmulation;
|
|
obj[protocols::telemt::useMiddleProxyKey] = useMiddleProxy;
|
|
if (!userName.isEmpty()) {
|
|
obj[protocols::telemt::userNameKey] = userName;
|
|
}
|
|
if (!additionalSecrets.isEmpty()) {
|
|
obj[protocols::telemt::additionalSecretsKey] = QJsonArray::fromStringList(additionalSecrets);
|
|
}
|
|
if (!workersMode.isEmpty()) {
|
|
obj[protocols::telemt::workersModeKey] = workersMode;
|
|
}
|
|
if (!workers.isEmpty()) {
|
|
obj[protocols::telemt::workersKey] = workers;
|
|
}
|
|
obj[protocols::telemt::natEnabledKey] = natEnabled;
|
|
if (!natInternalIp.isEmpty()) {
|
|
obj[protocols::telemt::natInternalIpKey] = natInternalIp;
|
|
}
|
|
if (!natExternalIp.isEmpty()) {
|
|
obj[protocols::telemt::natExternalIpKey] = natExternalIp;
|
|
}
|
|
return obj;
|
|
}
|
|
|
|
TelemtProtocolConfig TelemtProtocolConfig::fromJson(const QJsonObject &json)
|
|
{
|
|
TelemtProtocolConfig c;
|
|
c.port = json.value(QString(configKey::port)).toString();
|
|
c.secret = json.value(protocols::telemt::secretKey).toString();
|
|
c.tag = json.value(protocols::telemt::tagKey).toString();
|
|
c.tgLink = json.value(protocols::telemt::tgLinkKey).toString();
|
|
c.tmeLink = json.value(protocols::telemt::tmeLinkKey).toString();
|
|
c.isEnabled = json.value(protocols::telemt::isEnabledKey).toBool(true);
|
|
c.publicHost = json.value(protocols::telemt::publicHostKey).toString();
|
|
c.transportMode = json.value(protocols::telemt::transportModeKey).toString();
|
|
c.tlsDomain = json.value(protocols::telemt::tlsDomainKey).toString();
|
|
c.maskEnabled = json.value(protocols::telemt::maskEnabledKey).toBool(true);
|
|
c.tlsEmulation = json.value(protocols::telemt::tlsEmulationKey).toBool(false);
|
|
c.useMiddleProxy = json.value(protocols::telemt::useMiddleProxyKey).toBool(true);
|
|
c.userName = json.value(protocols::telemt::userNameKey).toString();
|
|
for (const auto &v : json.value(protocols::telemt::additionalSecretsKey).toArray()) {
|
|
const QString s = v.toString();
|
|
if (!s.isEmpty()) {
|
|
c.additionalSecrets.append(s);
|
|
}
|
|
}
|
|
c.workersMode = json.value(protocols::telemt::workersModeKey).toString();
|
|
c.workers = json.value(protocols::telemt::workersKey).toString();
|
|
c.natEnabled = json.value(protocols::telemt::natEnabledKey).toBool(false);
|
|
c.natInternalIp = json.value(protocols::telemt::natInternalIpKey).toString();
|
|
c.natExternalIp = json.value(protocols::telemt::natExternalIpKey).toString();
|
|
return c;
|
|
}
|
|
|
|
bool TelemtProtocolConfig::equalsDockerDeploymentSettings(const TelemtProtocolConfig &other) const
|
|
{
|
|
const auto normPort = [](const QString &p) {
|
|
return p.isEmpty() ? QString(protocols::telemt::defaultPort) : p;
|
|
};
|
|
const auto normTransport = [](const QString &t) {
|
|
return t.isEmpty() ? QString(protocols::telemt::transportModeStandard) : t;
|
|
};
|
|
const auto normWorkersMode = [](const QString &m) {
|
|
return m.isEmpty() ? QString(protocols::telemt::workersModeAuto) : m;
|
|
};
|
|
|
|
if (normPort(port) != normPort(other.port)) {
|
|
return false;
|
|
}
|
|
if (normTransport(transportMode) != normTransport(other.transportMode)) {
|
|
return false;
|
|
}
|
|
if (tlsDomain != other.tlsDomain) {
|
|
return false;
|
|
}
|
|
if (secret != other.secret) {
|
|
return false;
|
|
}
|
|
if (tag != other.tag) {
|
|
return false;
|
|
}
|
|
if (publicHost != other.publicHost) {
|
|
return false;
|
|
}
|
|
if (maskEnabled != other.maskEnabled) {
|
|
return false;
|
|
}
|
|
if (tlsEmulation != other.tlsEmulation) {
|
|
return false;
|
|
}
|
|
if (useMiddleProxy != other.useMiddleProxy) {
|
|
return false;
|
|
}
|
|
if (userName != other.userName) {
|
|
return false;
|
|
}
|
|
if (normWorkersMode(workersMode) != normWorkersMode(other.workersMode)) {
|
|
return false;
|
|
}
|
|
if (workers != other.workers) {
|
|
return false;
|
|
}
|
|
if (natEnabled != other.natEnabled) {
|
|
return false;
|
|
}
|
|
if (natInternalIp != other.natInternalIp) {
|
|
return false;
|
|
}
|
|
if (natExternalIp != other.natExternalIp) {
|
|
return false;
|
|
}
|
|
if (isEnabled != other.isEnabled) {
|
|
return false;
|
|
}
|
|
|
|
QStringList aa = additionalSecrets;
|
|
QStringList bb = other.additionalSecrets;
|
|
aa.removeAll(QString());
|
|
bb.removeAll(QString());
|
|
std::sort(aa.begin(), aa.end());
|
|
std::sort(bb.begin(), bb.end());
|
|
return aa == bb;
|
|
}
|