mirror of
https://github.com/amnezia-vpn/amnezia-client.git
synced 2026-06-24 02:00:24 +07:00
update: separated self-hosted dns settings
This commit is contained in:
@@ -73,7 +73,7 @@ ErrorCode ConnectionController::prepareConnection(const QString &serverId,
|
|||||||
if (!cfg.has_value()) return ErrorCode::InternalError;
|
if (!cfg.has_value()) return ErrorCode::InternalError;
|
||||||
container = cfg->defaultContainer;
|
container = cfg->defaultContainer;
|
||||||
containerConfigModel = cfg->containerConfig(container);
|
containerConfigModel = cfg->containerConfig(container);
|
||||||
dns = cfg->getDnsPair(m_appSettingsRepository->useAmneziaDns(), primaryDns, secondaryDns);
|
dns = cfg->getDnsPair(primaryDns, secondaryDns);
|
||||||
hostName = cfg->hostName;
|
hostName = cfg->hostName;
|
||||||
description = cfg->description;
|
description = cfg->description;
|
||||||
break;
|
break;
|
||||||
|
|||||||
@@ -65,13 +65,15 @@ ExportController::ExportResult ExportController::generateConnectionConfig(const
|
|||||||
}
|
}
|
||||||
ContainerConfig containerConfig = adminConfig->containerConfig(container);
|
ContainerConfig containerConfig = adminConfig->containerConfig(container);
|
||||||
|
|
||||||
|
const QPair<QString, QString> dns = adminConfig->getDnsPair(m_appSettingsRepository->primaryDns(), m_appSettingsRepository->secondaryDns());
|
||||||
|
|
||||||
if (ContainerUtils::containerService(container) != ServiceType::Other) {
|
if (ContainerUtils::containerService(container) != ServiceType::Other) {
|
||||||
SshSession sshSession;
|
SshSession sshSession;
|
||||||
Proto protocol = ContainerUtils::defaultProtocol(container);
|
Proto protocol = ContainerUtils::defaultProtocol(container);
|
||||||
|
|
||||||
DnsSettings dnsSettings = {
|
DnsSettings dnsSettings = {
|
||||||
m_appSettingsRepository->primaryDns(),
|
dns.first,
|
||||||
m_appSettingsRepository->secondaryDns()
|
dns.second
|
||||||
};
|
};
|
||||||
|
|
||||||
auto configurator = ConfiguratorBase::create(protocol, &sshSession);
|
auto configurator = ConfiguratorBase::create(protocol, &sshSession);
|
||||||
@@ -88,10 +90,6 @@ ExportController::ExportResult ExportController::generateConnectionConfig(const
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const QPair<QString, QString> dns = adminConfig->getDnsPair(m_appSettingsRepository->useAmneziaDns(),
|
|
||||||
m_appSettingsRepository->primaryDns(),
|
|
||||||
m_appSettingsRepository->secondaryDns());
|
|
||||||
|
|
||||||
adminConfig->containers.clear();
|
adminConfig->containers.clear();
|
||||||
adminConfig->containers[container] = containerConfig;
|
adminConfig->containers[container] = containerConfig;
|
||||||
adminConfig->defaultContainer = container;
|
adminConfig->defaultContainer = container;
|
||||||
@@ -133,16 +131,14 @@ ExportController::NativeConfigResult ExportController::generateNativeConfig(cons
|
|||||||
result.errorCode = ErrorCode::InternalError;
|
result.errorCode = ErrorCode::InternalError;
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
const QPair<QString, QString> dns = adminConfig->getDnsPair(m_appSettingsRepository->useAmneziaDns(),
|
const QPair<QString, QString> dns = adminConfig->getDnsPair(m_appSettingsRepository->primaryDns(), m_appSettingsRepository->secondaryDns());
|
||||||
m_appSettingsRepository->primaryDns(),
|
|
||||||
m_appSettingsRepository->secondaryDns());
|
|
||||||
|
|
||||||
ContainerConfig modifiedContainerConfig = containerConfig;
|
ContainerConfig modifiedContainerConfig = containerConfig;
|
||||||
modifiedContainerConfig.container = container;
|
modifiedContainerConfig.container = container;
|
||||||
|
|
||||||
DnsSettings dnsSettings = {
|
DnsSettings dnsSettings = {
|
||||||
m_appSettingsRepository->primaryDns(),
|
dns.first,
|
||||||
m_appSettingsRepository->secondaryDns()
|
dns.second
|
||||||
};
|
};
|
||||||
|
|
||||||
SshSession sshSession;
|
SshSession sshSession;
|
||||||
|
|||||||
@@ -211,7 +211,8 @@ ErrorCode InstallController::updateContainer(const QString &serverId, DockerCont
|
|||||||
newConfig.getXrayProtocolConfig() && newConfig.getXrayProtocolConfig()->serverConfig.isThirdPartyConfig;
|
newConfig.getXrayProtocolConfig() && newConfig.getXrayProtocolConfig()->serverConfig.isThirdPartyConfig;
|
||||||
|
|
||||||
if (errorCode == ErrorCode::NoError && xrayServerSettingsChanged && !skipXrayInboundSync) {
|
if (errorCode == ErrorCode::NoError && xrayServerSettingsChanged && !skipXrayInboundSync) {
|
||||||
DnsSettings dnsSettings = { m_appSettingsRepository->primaryDns(), m_appSettingsRepository->secondaryDns() };
|
const QPair<QString, QString> dns = adminConfig->getDnsPair(m_appSettingsRepository->primaryDns(), m_appSettingsRepository->secondaryDns());
|
||||||
|
DnsSettings dnsSettings = { dns.first, dns.second };
|
||||||
XrayConfigurator xrayConfigurator(&sshSession);
|
XrayConfigurator xrayConfigurator(&sshSession);
|
||||||
qDebug() << "InstallController::updateContainer applying Xray server inbound sync, reinstall="
|
qDebug() << "InstallController::updateContainer applying Xray server inbound sync, reinstall="
|
||||||
<< reinstallRequired;
|
<< reinstallRequired;
|
||||||
|
|||||||
@@ -83,6 +83,46 @@ bool ServersController::renameServer(const QString &serverId, const QString &nam
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool ServersController::changeServerDns(const QString &serverId, const QString &primaryDns, const QString &secondaryDns, const int &dnsMode)
|
||||||
|
{
|
||||||
|
const serverConfigUtils::ConfigType kind = m_serversRepository->serverKind(serverId);
|
||||||
|
if(kind == serverConfigUtils::ConfigType::SelfHostedAdmin) {
|
||||||
|
auto cfg = m_serversRepository->selfHostedAdminConfig(serverId);
|
||||||
|
if (!cfg.has_value()) return false;
|
||||||
|
cfg->dns1 = primaryDns;
|
||||||
|
cfg->dns2 = secondaryDns;
|
||||||
|
cfg->dnsMode = dnsMode;
|
||||||
|
m_serversRepository->editServer(serverId, cfg->toJson(), kind);
|
||||||
|
return true;
|
||||||
|
}else{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
QPair<QString, QString> ServersController::getDnsPair(const QString &serverId) const
|
||||||
|
{
|
||||||
|
const serverConfigUtils::ConfigType kind = m_serversRepository->serverKind(serverId);
|
||||||
|
if (kind == serverConfigUtils::ConfigType::SelfHostedAdmin) {
|
||||||
|
const auto cfg = m_serversRepository->selfHostedAdminConfig(serverId);
|
||||||
|
return cfg.has_value()
|
||||||
|
? cfg->getDnsPair(m_appSettingsRepository->primaryDns(), m_appSettingsRepository->primaryDns())
|
||||||
|
: QPair<QString, QString>();
|
||||||
|
} else {
|
||||||
|
return QPair<QString, QString>();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int ServersController::getDnsMode(const QString &serverId) const
|
||||||
|
{
|
||||||
|
const serverConfigUtils::ConfigType kind = m_serversRepository->serverKind(serverId);
|
||||||
|
if (kind == serverConfigUtils::ConfigType::SelfHostedAdmin) {
|
||||||
|
const auto cfg = m_serversRepository->selfHostedAdminConfig(serverId);
|
||||||
|
return cfg.has_value() ? cfg->dnsMode : int();
|
||||||
|
} else {
|
||||||
|
return int();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void ServersController::removeServer(const QString &serverId)
|
void ServersController::removeServer(const QString &serverId)
|
||||||
{
|
{
|
||||||
m_serversRepository->removeServer(serverId);
|
m_serversRepository->removeServer(serverId);
|
||||||
|
|||||||
@@ -37,6 +37,7 @@ public:
|
|||||||
|
|
||||||
// Server management
|
// Server management
|
||||||
bool renameServer(const QString &serverId, const QString &name);
|
bool renameServer(const QString &serverId, const QString &name);
|
||||||
|
bool changeServerDns(const QString &serverId, const QString &primaryDns, const QString &secondaryDns, const int &dnsMode);
|
||||||
void removeServer(const QString &serverId);
|
void removeServer(const QString &serverId);
|
||||||
void setDefaultServer(const QString &serverId);
|
void setDefaultServer(const QString &serverId);
|
||||||
|
|
||||||
@@ -57,6 +58,8 @@ public:
|
|||||||
QMap<DockerContainer, ContainerConfig> getServerContainersMap(const QString &serverId) const;
|
QMap<DockerContainer, ContainerConfig> getServerContainersMap(const QString &serverId) const;
|
||||||
DockerContainer getDefaultContainer(const QString &serverId) const;
|
DockerContainer getDefaultContainer(const QString &serverId) const;
|
||||||
ContainerConfig getContainerConfig(const QString &serverId, DockerContainer container) const;
|
ContainerConfig getContainerConfig(const QString &serverId, DockerContainer container) const;
|
||||||
|
QPair<QString, QString> getDnsPair(const QString &serverId) const;
|
||||||
|
int getDnsMode(const QString &serverId) const;
|
||||||
|
|
||||||
// Validation
|
// Validation
|
||||||
bool isServerFromApiAlreadyExists(const QString &userCountryCode, const QString &serviceType, const QString &serviceProtocol) const;
|
bool isServerFromApiAlreadyExists(const QString &userCountryCode, const QString &serviceType, const QString &serviceProtocol) const;
|
||||||
|
|||||||
@@ -64,15 +64,14 @@ void SelfHostedAdminServerConfig::clearCachedClientProfile(DockerContainer conta
|
|||||||
containers[container] = cleared;
|
containers[container] = cleared;
|
||||||
}
|
}
|
||||||
|
|
||||||
QPair<QString, QString> SelfHostedAdminServerConfig::getDnsPair(bool isAmneziaDnsEnabled, const QString &primaryDns,
|
QPair<QString, QString> SelfHostedAdminServerConfig::getDnsPair(const QString &primaryDns, const QString &secondaryDns) const
|
||||||
const QString &secondaryDns) const
|
|
||||||
{
|
{
|
||||||
QString d1 = dns1;
|
QString d1 = dns1;
|
||||||
QString d2 = dns2;
|
QString d2 = dns2;
|
||||||
const bool dnsOnServer = containers.contains(DockerContainer::Dns);
|
const bool dnsOnServer = containers.contains(DockerContainer::Dns);
|
||||||
|
|
||||||
if (d1.isEmpty() || !NetworkUtilities::checkIPv4Format(d1)) {
|
if (d1.isEmpty() || !NetworkUtilities::checkIPv4Format(d1)) {
|
||||||
d1 = (isAmneziaDnsEnabled && dnsOnServer) ? protocols::dns::amneziaDnsIp : primaryDns;
|
d1 = ((dnsMode == 1) && dnsOnServer) ? protocols::dns::amneziaDnsIp : primaryDns;
|
||||||
}
|
}
|
||||||
if (d2.isEmpty() || !NetworkUtilities::checkIPv4Format(d2)) {
|
if (d2.isEmpty() || !NetworkUtilities::checkIPv4Format(d2)) {
|
||||||
d2 = secondaryDns;
|
d2 = secondaryDns;
|
||||||
@@ -110,6 +109,9 @@ QJsonObject SelfHostedAdminServerConfig::toJson() const
|
|||||||
if (!dns2.isEmpty()) {
|
if (!dns2.isEmpty()) {
|
||||||
obj[configKey::dns2] = dns2;
|
obj[configKey::dns2] = dns2;
|
||||||
}
|
}
|
||||||
|
if (dnsMode > -1) {
|
||||||
|
obj[configKey::dnsMode] = dnsMode;
|
||||||
|
}
|
||||||
|
|
||||||
if (!userName.isEmpty()) {
|
if (!userName.isEmpty()) {
|
||||||
obj[configKey::userName] = userName;
|
obj[configKey::userName] = userName;
|
||||||
@@ -147,6 +149,11 @@ SelfHostedAdminServerConfig SelfHostedAdminServerConfig::fromJson(const QJsonObj
|
|||||||
|
|
||||||
config.dns1 = json.value(configKey::dns1).toString();
|
config.dns1 = json.value(configKey::dns1).toString();
|
||||||
config.dns2 = json.value(configKey::dns2).toString();
|
config.dns2 = json.value(configKey::dns2).toString();
|
||||||
|
if (json.contains(configKey::dnsMode)) {
|
||||||
|
config.dnsMode = json.value(configKey::dnsMode).toInt();
|
||||||
|
} else {
|
||||||
|
config.dnsMode = 0;
|
||||||
|
}
|
||||||
|
|
||||||
config.userName = json.value(configKey::userName).toString();
|
config.userName = json.value(configKey::userName).toString();
|
||||||
config.password = json.value(configKey::password).toString();
|
config.password = json.value(configKey::password).toString();
|
||||||
|
|||||||
@@ -26,6 +26,7 @@ struct SelfHostedAdminServerConfig {
|
|||||||
DockerContainer defaultContainer;
|
DockerContainer defaultContainer;
|
||||||
QString dns1;
|
QString dns1;
|
||||||
QString dns2;
|
QString dns2;
|
||||||
|
int dnsMode = 0;
|
||||||
|
|
||||||
QString userName;
|
QString userName;
|
||||||
QString password;
|
QString password;
|
||||||
@@ -41,8 +42,7 @@ struct SelfHostedAdminServerConfig {
|
|||||||
|
|
||||||
void clearCachedClientProfile(DockerContainer container);
|
void clearCachedClientProfile(DockerContainer container);
|
||||||
|
|
||||||
QPair<QString, QString> getDnsPair(bool isAmneziaDnsEnabled, const QString &primaryDns,
|
QPair<QString, QString> getDnsPair(const QString &primaryDns, const QString &secondaryDns) const;
|
||||||
const QString &secondaryDns) const;
|
|
||||||
|
|
||||||
QJsonObject toJson() const;
|
QJsonObject toJson() const;
|
||||||
static SelfHostedAdminServerConfig fromJson(const QJsonObject &json);
|
static SelfHostedAdminServerConfig fromJson(const QJsonObject &json);
|
||||||
|
|||||||
@@ -80,8 +80,8 @@ QString getProtocolName(DockerContainer defaultContainer, const QMap<DockerConta
|
|||||||
namespace amnezia
|
namespace amnezia
|
||||||
{
|
{
|
||||||
|
|
||||||
ServerDescription buildServerDescription(const SelfHostedAdminServerConfig &server, bool isAmneziaDnsEnabled)
|
ServerDescription buildServerDescription(const SelfHostedAdminServerConfig &server, bool /*isAmneziaDnsEnabled*/)
|
||||||
{
|
{
|
||||||
ServerDescription row = buildBaseDescription(server);
|
ServerDescription row = buildBaseDescription(server);
|
||||||
row.selfHostedSshCredentials.hostName = server.hostName;
|
row.selfHostedSshCredentials.hostName = server.hostName;
|
||||||
row.selfHostedSshCredentials.userName = server.userName;
|
row.selfHostedSshCredentials.userName = server.userName;
|
||||||
@@ -92,7 +92,7 @@ ServerDescription buildServerDescription(const SelfHostedAdminServerConfig &serv
|
|||||||
&& !row.selfHostedSshCredentials.secretData.isEmpty();
|
&& !row.selfHostedSshCredentials.secretData.isEmpty();
|
||||||
|
|
||||||
row.serverName = server.displayName;
|
row.serverName = server.displayName;
|
||||||
row.baseDescription = getBaseDescription(server.containers, isAmneziaDnsEnabled, row.hasWriteAccess, row.primaryDnsIsAmnezia);
|
row.baseDescription = getBaseDescription(server.containers, server.dnsMode == 1, row.hasWriteAccess, row.primaryDnsIsAmnezia);
|
||||||
|
|
||||||
const QString protocolName = getProtocolName(server.defaultContainer, server.containers);
|
const QString protocolName = getProtocolName(server.defaultContainer, server.containers);
|
||||||
row.expandedServerDescription = row.baseDescription + row.hostName;
|
row.expandedServerDescription = row.baseDescription + row.hostName;
|
||||||
|
|||||||
@@ -15,6 +15,7 @@ namespace amnezia
|
|||||||
|
|
||||||
constexpr QLatin1String dns1("dns1");
|
constexpr QLatin1String dns1("dns1");
|
||||||
constexpr QLatin1String dns2("dns2");
|
constexpr QLatin1String dns2("dns2");
|
||||||
|
constexpr QLatin1String dnsMode("dnsMode");
|
||||||
|
|
||||||
constexpr QLatin1String serverIndex("serverIndex");
|
constexpr QLatin1String serverIndex("serverIndex");
|
||||||
constexpr QLatin1String description("description");
|
constexpr QLatin1String description("description");
|
||||||
|
|||||||
Reference in New Issue
Block a user