Dns selection implemented
This commit is contained in:
parent
5fffb2afe3
commit
ad9d45a154
16 changed files with 196 additions and 52 deletions
|
@ -10,6 +10,7 @@
|
||||||
#include <QJsonDocument>
|
#include <QJsonDocument>
|
||||||
|
|
||||||
#include "containers/containers_defs.h"
|
#include "containers/containers_defs.h"
|
||||||
|
#include "utils.h"
|
||||||
|
|
||||||
Settings &VpnConfigurator::m_settings()
|
Settings &VpnConfigurator::m_settings()
|
||||||
{
|
{
|
||||||
|
@ -41,24 +42,59 @@ QString VpnConfigurator::genVpnProtocolConfig(const ServerCredentials &credentia
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
QString VpnConfigurator::processConfigWithLocalSettings(DockerContainer container, Proto proto, QString config)
|
QPair<QString, QString> VpnConfigurator::getDnsForConfig(int serverIndex)
|
||||||
{
|
{
|
||||||
config.replace("$PRIMARY_DNS", m_settings().primaryDns());
|
QPair<QString, QString> dns;
|
||||||
config.replace("$SECONDARY_DNS", m_settings().secondaryDns());
|
|
||||||
|
bool useAmneziaDns = m_settings().useAmneziaDns();
|
||||||
|
const QJsonObject &server = m_settings().server(serverIndex);
|
||||||
|
|
||||||
|
dns.first = server.value(config_key::dns1).toString();
|
||||||
|
dns.second = server.value(config_key::dns2).toString();
|
||||||
|
|
||||||
|
if (dns.first.isEmpty() || !Utils::checkIPv4Format(dns.first)) {
|
||||||
|
if (useAmneziaDns && m_settings().containers(serverIndex).contains(DockerContainer::Dns)) {
|
||||||
|
dns.first = protocols::dns::amneziaDnsIp;
|
||||||
|
}
|
||||||
|
else dns.first = m_settings().primaryDns();
|
||||||
|
}
|
||||||
|
if (dns.second.isEmpty() || !Utils::checkIPv4Format(dns.second)) {
|
||||||
|
dns.second = m_settings().secondaryDns();
|
||||||
|
}
|
||||||
|
|
||||||
|
qDebug() << "VpnConfigurator::getDnsForConfig" << dns.first << dns.second;
|
||||||
|
return dns;
|
||||||
|
}
|
||||||
|
|
||||||
|
QString &VpnConfigurator::processConfigWithDnsSettings(int serverIndex, DockerContainer container,
|
||||||
|
Proto proto, QString &config)
|
||||||
|
{
|
||||||
|
auto dns = getDnsForConfig(serverIndex);
|
||||||
|
|
||||||
|
config.replace("$PRIMARY_DNS", dns.first);
|
||||||
|
config.replace("$SECONDARY_DNS", dns.second);
|
||||||
|
|
||||||
|
return config;
|
||||||
|
}
|
||||||
|
|
||||||
|
QString &VpnConfigurator::processConfigWithLocalSettings(int serverIndex, DockerContainer container,
|
||||||
|
Proto proto, QString &config)
|
||||||
|
{
|
||||||
|
processConfigWithDnsSettings(serverIndex, container, proto, config);
|
||||||
|
|
||||||
if (proto == Proto::OpenVpn) {
|
if (proto == Proto::OpenVpn) {
|
||||||
return OpenVpnConfigurator::processConfigWithLocalSettings(config);
|
config = OpenVpnConfigurator::processConfigWithLocalSettings(config);
|
||||||
}
|
}
|
||||||
return config;
|
return config;
|
||||||
}
|
}
|
||||||
|
|
||||||
QString VpnConfigurator::processConfigWithExportSettings(DockerContainer container, Proto proto, QString config)
|
QString &VpnConfigurator::processConfigWithExportSettings(int serverIndex, DockerContainer container,
|
||||||
|
Proto proto, QString &config)
|
||||||
{
|
{
|
||||||
config.replace("$PRIMARY_DNS", m_settings().primaryDns());
|
processConfigWithDnsSettings(serverIndex, container, proto, config);
|
||||||
config.replace("$SECONDARY_DNS", m_settings().secondaryDns());
|
|
||||||
|
|
||||||
if (proto == Proto::OpenVpn) {
|
if (proto == Proto::OpenVpn) {
|
||||||
return OpenVpnConfigurator::processConfigWithExportSettings(config);
|
config = OpenVpnConfigurator::processConfigWithExportSettings(config);
|
||||||
}
|
}
|
||||||
return config;
|
return config;
|
||||||
}
|
}
|
||||||
|
|
|
@ -15,8 +15,11 @@ public:
|
||||||
static QString genVpnProtocolConfig(const ServerCredentials &credentials, DockerContainer container,
|
static QString genVpnProtocolConfig(const ServerCredentials &credentials, DockerContainer container,
|
||||||
const QJsonObject &containerConfig, Proto proto, ErrorCode *errorCode = nullptr);
|
const QJsonObject &containerConfig, Proto proto, ErrorCode *errorCode = nullptr);
|
||||||
|
|
||||||
static QString processConfigWithLocalSettings(DockerContainer container, Proto proto, QString config);
|
static QPair<QString, QString> getDnsForConfig(int serverIndex);
|
||||||
static QString processConfigWithExportSettings(DockerContainer container, Proto proto, QString config);
|
static QString &processConfigWithDnsSettings(int serverIndex, DockerContainer container, Proto proto, QString &config);
|
||||||
|
|
||||||
|
static QString &processConfigWithLocalSettings(int serverIndex, DockerContainer container, Proto proto, QString &config);
|
||||||
|
static QString &processConfigWithExportSettings(int serverIndex, DockerContainer container, Proto proto, QString &config);
|
||||||
|
|
||||||
// workaround for containers which is not support normal configaration
|
// workaround for containers which is not support normal configaration
|
||||||
static void updateContainerConfigAfterInstallation(DockerContainer container,
|
static void updateContainerConfigAfterInstallation(DockerContainer container,
|
||||||
|
|
|
@ -62,6 +62,20 @@ QString Debug::userLogsDir()
|
||||||
return QStandardPaths::writableLocation(QStandardPaths::AppDataLocation) + "/log";
|
return QStandardPaths::writableLocation(QStandardPaths::AppDataLocation) + "/log";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QString Debug::userLogsFilePath()
|
||||||
|
{
|
||||||
|
return userLogsDir() + QDir::separator() + m_logFileName;
|
||||||
|
}
|
||||||
|
|
||||||
|
QString Debug::getLogs()
|
||||||
|
{
|
||||||
|
m_file.flush();
|
||||||
|
QFile file(userLogsFilePath());
|
||||||
|
|
||||||
|
file.open(QIODevice::ReadOnly);
|
||||||
|
return file.readAll();
|
||||||
|
}
|
||||||
|
|
||||||
bool Debug::openLogsFolder()
|
bool Debug::openLogsFolder()
|
||||||
{
|
{
|
||||||
QString path = userLogsDir();
|
QString path = userLogsDir();
|
||||||
|
@ -93,11 +107,7 @@ void Debug::clearLogs()
|
||||||
bool isLogActive = m_file.isOpen();
|
bool isLogActive = m_file.isOpen();
|
||||||
m_file.close();
|
m_file.close();
|
||||||
|
|
||||||
|
QFile file(userLogsFilePath());
|
||||||
QString path = userLogsDir();
|
|
||||||
QDir appDir(path);
|
|
||||||
QFile file;
|
|
||||||
file.setFileName(appDir.filePath(m_logFileName));
|
|
||||||
|
|
||||||
file.open(QIODevice::WriteOnly | QIODevice::Truncate);
|
file.open(QIODevice::WriteOnly | QIODevice::Truncate);
|
||||||
file.resize(0);
|
file.resize(0);
|
||||||
|
|
|
@ -18,6 +18,9 @@ public:
|
||||||
static void clearServiceLogs();
|
static void clearServiceLogs();
|
||||||
static void cleanUp();
|
static void cleanUp();
|
||||||
|
|
||||||
|
static QString userLogsFilePath();
|
||||||
|
static QString getLogs();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
static QString userLogsDir();
|
static QString userLogsDir();
|
||||||
|
|
||||||
|
|
|
@ -15,6 +15,10 @@ constexpr char password[] = "password";
|
||||||
constexpr char port[] = "port";
|
constexpr char port[] = "port";
|
||||||
constexpr char local_port[] = "local_port";
|
constexpr char local_port[] = "local_port";
|
||||||
|
|
||||||
|
constexpr char dns1[] = "dns1";
|
||||||
|
constexpr char dns2[] = "dns2";
|
||||||
|
|
||||||
|
|
||||||
constexpr char description[] = "description";
|
constexpr char description[] = "description";
|
||||||
constexpr char cert[] = "cert";
|
constexpr char cert[] = "cert";
|
||||||
constexpr char config[] = "config";
|
constexpr char config[] = "config";
|
||||||
|
@ -55,6 +59,9 @@ constexpr char last_config[] = "last_config";
|
||||||
|
|
||||||
namespace protocols {
|
namespace protocols {
|
||||||
|
|
||||||
|
namespace dns {
|
||||||
|
constexpr char amneziaDnsIp[] = "172.29.172.254";
|
||||||
|
}
|
||||||
|
|
||||||
namespace openvpn {
|
namespace openvpn {
|
||||||
constexpr char defaultSubnetAddress[] = "10.8.0.0";
|
constexpr char defaultSubnetAddress[] = "10.8.0.0";
|
||||||
|
|
|
@ -92,6 +92,8 @@ public:
|
||||||
void addVpnIps(RouteMode mode, const QStringList &ip);
|
void addVpnIps(RouteMode mode, const QStringList &ip);
|
||||||
void removeVpnSites(RouteMode mode, const QStringList &sites);
|
void removeVpnSites(RouteMode mode, const QStringList &sites);
|
||||||
|
|
||||||
|
bool useAmneziaDns() const { return m_settings.value("Conf/useAmneziaDns", true).toBool(); }
|
||||||
|
void setUseAmneziaDns(bool enabled) { m_settings.setValue("Conf/useAmneziaDns", enabled); }
|
||||||
|
|
||||||
QString primaryDns() const;
|
QString primaryDns() const;
|
||||||
QString secondaryDns() const;
|
QString secondaryDns() const;
|
||||||
|
|
|
@ -4,6 +4,10 @@
|
||||||
#include "defines.h"
|
#include "defines.h"
|
||||||
#include "ui/qautostart.h"
|
#include "ui/qautostart.h"
|
||||||
|
|
||||||
|
#include <QDesktopServices>
|
||||||
|
#include <QFileDialog>
|
||||||
|
#include <QStandardPaths>
|
||||||
|
|
||||||
using namespace amnezia;
|
using namespace amnezia;
|
||||||
using namespace PageEnumNS;
|
using namespace PageEnumNS;
|
||||||
|
|
||||||
|
@ -61,7 +65,22 @@ void AppSettingsLogic::onPushButtonOpenLogsClicked()
|
||||||
|
|
||||||
void AppSettingsLogic::onPushButtonExportLogsClicked()
|
void AppSettingsLogic::onPushButtonExportLogsClicked()
|
||||||
{
|
{
|
||||||
|
QString log = Debug::getLogs();
|
||||||
|
QString ext = ".log";
|
||||||
|
|
||||||
|
QString fileName = QFileDialog::getSaveFileName(nullptr, tr("Save log"),
|
||||||
|
QStandardPaths::writableLocation(QStandardPaths::DocumentsLocation), "*" + ext);
|
||||||
|
|
||||||
|
if (fileName.isEmpty()) return;
|
||||||
|
if (!fileName.endsWith(ext)) fileName.append(ext);
|
||||||
|
|
||||||
|
QFile save(fileName);
|
||||||
|
save.open(QIODevice::WriteOnly);
|
||||||
|
save.write(log.toUtf8());
|
||||||
|
save.close();
|
||||||
|
|
||||||
|
QFileInfo fi(fileName);
|
||||||
|
QDesktopServices::openUrl(fi.absoluteDir().absolutePath());
|
||||||
}
|
}
|
||||||
|
|
||||||
void AppSettingsLogic::onPushButtonClearLogsClicked()
|
void AppSettingsLogic::onPushButtonClearLogsClicked()
|
||||||
|
|
|
@ -5,6 +5,7 @@
|
||||||
|
|
||||||
NetworkSettingsLogic::NetworkSettingsLogic(UiLogic *logic, QObject *parent):
|
NetworkSettingsLogic::NetworkSettingsLogic(UiLogic *logic, QObject *parent):
|
||||||
PageLogicBase(logic, parent),
|
PageLogicBase(logic, parent),
|
||||||
|
m_checkBoxUseAmneziaDnsChecked{false},
|
||||||
m_ipAddressRegex{Utils::ipAddressRegExp()}
|
m_ipAddressRegex{Utils::ipAddressRegExp()}
|
||||||
{
|
{
|
||||||
|
|
||||||
|
@ -12,6 +13,8 @@ NetworkSettingsLogic::NetworkSettingsLogic(UiLogic *logic, QObject *parent):
|
||||||
|
|
||||||
void NetworkSettingsLogic::onUpdatePage()
|
void NetworkSettingsLogic::onUpdatePage()
|
||||||
{
|
{
|
||||||
|
set_checkBoxUseAmneziaDnsChecked(m_settings.useAmneziaDns());
|
||||||
|
|
||||||
set_lineEditDns1Text(m_settings.primaryDns());
|
set_lineEditDns1Text(m_settings.primaryDns());
|
||||||
set_lineEditDns2Text(m_settings.secondaryDns());
|
set_lineEditDns2Text(m_settings.secondaryDns());
|
||||||
}
|
}
|
||||||
|
@ -41,3 +44,8 @@ void NetworkSettingsLogic::onPushButtonResetDns2Clicked()
|
||||||
m_settings.setSecondaryDns(m_settings.cloudFlareNs2);
|
m_settings.setSecondaryDns(m_settings.cloudFlareNs2);
|
||||||
onUpdatePage();
|
onUpdatePage();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void NetworkSettingsLogic::onCheckBoxUseAmneziaDnsToggled(bool checked)
|
||||||
|
{
|
||||||
|
m_settings.setUseAmneziaDns(checked);
|
||||||
|
}
|
||||||
|
|
|
@ -9,6 +9,8 @@ class NetworkSettingsLogic : public PageLogicBase
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
|
AUTO_PROPERTY(bool, checkBoxUseAmneziaDnsChecked)
|
||||||
|
|
||||||
AUTO_PROPERTY(QString, lineEditDns1Text)
|
AUTO_PROPERTY(QString, lineEditDns1Text)
|
||||||
AUTO_PROPERTY(QString, lineEditDns2Text)
|
AUTO_PROPERTY(QString, lineEditDns2Text)
|
||||||
READONLY_PROPERTY(QRegExp, ipAddressRegex)
|
READONLY_PROPERTY(QRegExp, ipAddressRegex)
|
||||||
|
@ -21,6 +23,8 @@ public:
|
||||||
Q_INVOKABLE void onPushButtonResetDns1Clicked();
|
Q_INVOKABLE void onPushButtonResetDns1Clicked();
|
||||||
Q_INVOKABLE void onPushButtonResetDns2Clicked();
|
Q_INVOKABLE void onPushButtonResetDns2Clicked();
|
||||||
|
|
||||||
|
Q_INVOKABLE void onCheckBoxUseAmneziaDnsToggled(bool checked);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
explicit NetworkSettingsLogic(UiLogic *uiLogic, QObject *parent = nullptr);
|
explicit NetworkSettingsLogic(UiLogic *uiLogic, QObject *parent = nullptr);
|
||||||
~NetworkSettingsLogic() = default;
|
~NetworkSettingsLogic() = default;
|
||||||
|
|
|
@ -28,8 +28,8 @@ void ServerSettingsLogic::onUpdatePage()
|
||||||
set_pushButtonClearVisible(m_settings.haveAuthData(uiLogic()->selectedServerIndex));
|
set_pushButtonClearVisible(m_settings.haveAuthData(uiLogic()->selectedServerIndex));
|
||||||
set_pushButtonClearClientCacheVisible(m_settings.haveAuthData(uiLogic()->selectedServerIndex));
|
set_pushButtonClearClientCacheVisible(m_settings.haveAuthData(uiLogic()->selectedServerIndex));
|
||||||
set_pushButtonShareFullVisible(m_settings.haveAuthData(uiLogic()->selectedServerIndex));
|
set_pushButtonShareFullVisible(m_settings.haveAuthData(uiLogic()->selectedServerIndex));
|
||||||
QJsonObject server = m_settings.server(uiLogic()->selectedServerIndex);
|
const QJsonObject &server = m_settings.server(uiLogic()->selectedServerIndex);
|
||||||
QString port = server.value(config_key::port).toString();
|
const QString &port = server.value(config_key::port).toString();
|
||||||
set_labelServerText(QString("%1@%2%3%4")
|
set_labelServerText(QString("%1@%2%3%4")
|
||||||
.arg(server.value(config_key::userName).toString())
|
.arg(server.value(config_key::userName).toString())
|
||||||
.arg(server.value(config_key::hostName).toString())
|
.arg(server.value(config_key::hostName).toString())
|
||||||
|
|
|
@ -60,21 +60,24 @@ void ShareConnectionLogic::onPushButtonShareAmneziaGenerateClicked()
|
||||||
set_shareAmneziaQrCodeTextSeriesLength(0);
|
set_shareAmneziaQrCodeTextSeriesLength(0);
|
||||||
|
|
||||||
QJsonObject serverConfig;
|
QJsonObject serverConfig;
|
||||||
|
int serverIndex = uiLogic()->selectedServerIndex;
|
||||||
|
DockerContainer container = uiLogic()->selectedDockerContainer;
|
||||||
|
|
||||||
// Full access
|
// Full access
|
||||||
if (shareFullAccess()) {
|
if (shareFullAccess()) {
|
||||||
serverConfig = m_settings.server(uiLogic()->selectedServerIndex);
|
serverConfig = m_settings.server(serverIndex);
|
||||||
}
|
}
|
||||||
// Container share
|
// Container share
|
||||||
else {
|
else {
|
||||||
ServerCredentials credentials = m_settings.serverCredentials(uiLogic()->selectedServerIndex);
|
ServerCredentials credentials = m_settings.serverCredentials(serverIndex);
|
||||||
QJsonObject containerConfig = m_settings.containerConfig(uiLogic()->selectedServerIndex, uiLogic()->selectedDockerContainer);
|
QJsonObject containerConfig = m_settings.containerConfig(serverIndex, container);
|
||||||
containerConfig.insert(config_key::container, ContainerProps::containerToString(uiLogic()->selectedDockerContainer));
|
containerConfig.insert(config_key::container, ContainerProps::containerToString(container));
|
||||||
|
|
||||||
ErrorCode e = ErrorCode::NoError;
|
ErrorCode e = ErrorCode::NoError;
|
||||||
for (Proto p: ContainerProps::protocolsForContainer(uiLogic()->selectedDockerContainer)) {
|
for (Proto p: ContainerProps::protocolsForContainer(container)) {
|
||||||
QJsonObject protoConfig = m_settings.protocolConfig(uiLogic()->selectedServerIndex, uiLogic()->selectedDockerContainer, p);
|
QJsonObject protoConfig = m_settings.protocolConfig(serverIndex, container, p);
|
||||||
|
|
||||||
QString cfg = VpnConfigurator::genVpnProtocolConfig(credentials, uiLogic()->selectedDockerContainer, containerConfig, p, &e);
|
QString cfg = VpnConfigurator::genVpnProtocolConfig(credentials, container, containerConfig, p, &e);
|
||||||
if (e) {
|
if (e) {
|
||||||
cfg = "Error generating config";
|
cfg = "Error generating config";
|
||||||
break;
|
break;
|
||||||
|
@ -85,12 +88,17 @@ void ShareConnectionLogic::onPushButtonShareAmneziaGenerateClicked()
|
||||||
|
|
||||||
QByteArray ba;
|
QByteArray ba;
|
||||||
if (!e) {
|
if (!e) {
|
||||||
serverConfig = m_settings.server(uiLogic()->selectedServerIndex);
|
serverConfig = m_settings.server(serverIndex);
|
||||||
serverConfig.remove(config_key::userName);
|
serverConfig.remove(config_key::userName);
|
||||||
serverConfig.remove(config_key::password);
|
serverConfig.remove(config_key::password);
|
||||||
serverConfig.remove(config_key::port);
|
serverConfig.remove(config_key::port);
|
||||||
serverConfig.insert(config_key::containers, QJsonArray {containerConfig});
|
serverConfig.insert(config_key::containers, QJsonArray {containerConfig});
|
||||||
serverConfig.insert(config_key::defaultContainer, ContainerProps::containerToString(uiLogic()->selectedDockerContainer));
|
serverConfig.insert(config_key::defaultContainer, ContainerProps::containerToString(container));
|
||||||
|
|
||||||
|
auto dns = VpnConfigurator::getDnsForConfig(serverIndex);
|
||||||
|
serverConfig.insert(config_key::dns1, dns.first);
|
||||||
|
serverConfig.insert(config_key::dns2, dns.second);
|
||||||
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
set_textEditShareAmneziaCodeText(tr("Error while generating connection profile"));
|
set_textEditShareAmneziaCodeText(tr("Error while generating connection profile"));
|
||||||
|
@ -111,12 +119,15 @@ void ShareConnectionLogic::onPushButtonShareAmneziaGenerateClicked()
|
||||||
|
|
||||||
void ShareConnectionLogic::onPushButtonShareOpenVpnGenerateClicked()
|
void ShareConnectionLogic::onPushButtonShareOpenVpnGenerateClicked()
|
||||||
{
|
{
|
||||||
ServerCredentials credentials = m_settings.serverCredentials(uiLogic()->selectedServerIndex);
|
int serverIndex = uiLogic()->selectedServerIndex;
|
||||||
const QJsonObject &containerConfig = m_settings.containerConfig(uiLogic()->selectedServerIndex, uiLogic()->selectedDockerContainer);
|
DockerContainer container = uiLogic()->selectedDockerContainer;
|
||||||
|
ServerCredentials credentials = m_settings.serverCredentials(serverIndex);
|
||||||
|
|
||||||
|
const QJsonObject &containerConfig = m_settings.containerConfig(serverIndex, container);
|
||||||
|
|
||||||
ErrorCode e = ErrorCode::NoError;
|
ErrorCode e = ErrorCode::NoError;
|
||||||
QString cfg = OpenVpnConfigurator::genOpenVpnConfig(credentials, uiLogic()->selectedDockerContainer, containerConfig, &e);
|
QString cfg = OpenVpnConfigurator::genOpenVpnConfig(credentials, container, containerConfig, &e);
|
||||||
cfg = VpnConfigurator::processConfigWithExportSettings(uiLogic()->selectedDockerContainer, Proto::OpenVpn, cfg);
|
cfg = VpnConfigurator::processConfigWithExportSettings(serverIndex, container, Proto::OpenVpn, cfg);
|
||||||
|
|
||||||
set_textEditShareOpenVpnCodeText(QJsonDocument::fromJson(cfg.toUtf8()).object()[config_key::config].toString());
|
set_textEditShareOpenVpnCodeText(QJsonDocument::fromJson(cfg.toUtf8()).object()[config_key::config].toString());
|
||||||
}
|
}
|
||||||
|
@ -202,7 +213,7 @@ void ShareConnectionLogic::onPushButtonShareWireGuardGenerateClicked()
|
||||||
errorString(e));
|
errorString(e));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
cfg = VpnConfigurator::processConfigWithExportSettings(container, Proto::WireGuard, cfg);
|
cfg = VpnConfigurator::processConfigWithExportSettings(serverIndex, container, Proto::WireGuard, cfg);
|
||||||
cfg = QJsonDocument::fromJson(cfg.toUtf8()).object()[config_key::config].toString();
|
cfg = QJsonDocument::fromJson(cfg.toUtf8()).object()[config_key::config].toString();
|
||||||
|
|
||||||
set_textEditShareWireGuardCodeText(cfg);
|
set_textEditShareWireGuardCodeText(cfg);
|
||||||
|
@ -223,7 +234,7 @@ void ShareConnectionLogic::onPushButtonShareIkev2GenerateClicked()
|
||||||
Ikev2Configurator::ConnectionData connData = Ikev2Configurator::prepareIkev2Config(credentials, container);
|
Ikev2Configurator::ConnectionData connData = Ikev2Configurator::prepareIkev2Config(credentials, container);
|
||||||
|
|
||||||
QString cfg = Ikev2Configurator::genIkev2Config(connData);
|
QString cfg = Ikev2Configurator::genIkev2Config(connData);
|
||||||
cfg = VpnConfigurator::processConfigWithExportSettings(container, Proto::Ikev2, cfg);
|
cfg = VpnConfigurator::processConfigWithExportSettings(serverIndex, container, Proto::Ikev2, cfg);
|
||||||
cfg = QJsonDocument::fromJson(cfg.toUtf8()).object()[config_key::cert].toString();
|
cfg = QJsonDocument::fromJson(cfg.toUtf8()).object()[config_key::cert].toString();
|
||||||
|
|
||||||
set_textEditShareIkev2CertText(cfg);
|
set_textEditShareIkev2CertText(cfg);
|
||||||
|
|
|
@ -58,9 +58,19 @@ PageBase {
|
||||||
anchors.topMargin: 20
|
anchors.topMargin: 20
|
||||||
font.pixelSize: 22
|
font.pixelSize: 22
|
||||||
text: qsTr("Donate")
|
text: qsTr("Donate")
|
||||||
|
width: undefined
|
||||||
anchors.top: label_support.bottom
|
anchors.top: label_support.bottom
|
||||||
}
|
}
|
||||||
|
|
||||||
|
LabelType {
|
||||||
|
anchors.bottom: caption3.bottom
|
||||||
|
anchors.left: caption3.right
|
||||||
|
anchors.leftMargin: 5
|
||||||
|
font.pixelSize: 24
|
||||||
|
text: "♥"
|
||||||
|
color: "red"
|
||||||
|
}
|
||||||
|
|
||||||
RichLabelType {
|
RichLabelType {
|
||||||
id: label_donate
|
id: label_donate
|
||||||
anchors.top: caption3.bottom
|
anchors.top: caption3.bottom
|
||||||
|
|
|
@ -17,17 +17,41 @@ PageBase {
|
||||||
id: caption
|
id: caption
|
||||||
text: qsTr("DNS Servers")
|
text: qsTr("DNS Servers")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
CheckBoxType {
|
||||||
|
id: cb_amnezia_dns
|
||||||
|
anchors.top: caption.bottom
|
||||||
|
x: 30
|
||||||
|
width: parent.width - 60
|
||||||
|
text: qsTr("Use AmneziaDNS service (recommended)")
|
||||||
|
checked: NetworkSettingsLogic.checkBoxUseAmneziaDnsChecked
|
||||||
|
onCheckedChanged: {
|
||||||
|
NetworkSettingsLogic.checkBoxUseAmneziaDnsChecked = checked
|
||||||
|
NetworkSettingsLogic.onCheckBoxUseAmneziaDnsToggled(checked)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
LabelType {
|
||||||
|
id: lb_amnezia_dns
|
||||||
|
x: 30
|
||||||
|
anchors.top: cb_amnezia_dns.bottom
|
||||||
|
width: parent.width - 60
|
||||||
|
text: qsTr("Use AmneziaDNS container on your server, when it installed.\n
|
||||||
|
Your AmneziaDNS server available only when it installed and VPN connected, it has internal IP address 172.29.172.254\n
|
||||||
|
If AmneziaDNS service is not installed on the same server, or this option is unchecked, the following DNS servers will be used:")
|
||||||
|
}
|
||||||
|
|
||||||
LabelType {
|
LabelType {
|
||||||
id: l1
|
id: l1
|
||||||
x: 40
|
x: 30
|
||||||
anchors.top: caption.bottom
|
anchors.top: lb_amnezia_dns.bottom
|
||||||
width: parent.width - 40
|
width: parent.width - 30
|
||||||
height: 21
|
height: 21
|
||||||
text: qsTr("Primary DNS server")
|
text: qsTr("Primary DNS server")
|
||||||
}
|
}
|
||||||
TextFieldType {
|
TextFieldType {
|
||||||
id: dns1
|
id: dns1
|
||||||
x: 40
|
x: 30
|
||||||
anchors.top: l1.bottom
|
anchors.top: l1.bottom
|
||||||
width: parent.width - 90
|
width: parent.width - 90
|
||||||
height: 40
|
height: 40
|
||||||
|
@ -55,16 +79,16 @@ PageBase {
|
||||||
|
|
||||||
LabelType {
|
LabelType {
|
||||||
id: l2
|
id: l2
|
||||||
x: 40
|
x: 30
|
||||||
anchors.top: dns1.bottom
|
anchors.top: dns1.bottom
|
||||||
anchors.topMargin: 20
|
anchors.topMargin: 20
|
||||||
width: parent.width - 40
|
width: parent.width - 60
|
||||||
height: 21
|
height: 21
|
||||||
text: qsTr("Secondray DNS server")
|
text: qsTr("Secondray DNS server")
|
||||||
}
|
}
|
||||||
TextFieldType {
|
TextFieldType {
|
||||||
id: dns2
|
id: dns2
|
||||||
x: 40
|
x: 30
|
||||||
anchors.top: l2.bottom
|
anchors.top: l2.bottom
|
||||||
width: parent.width - 90
|
width: parent.width - 90
|
||||||
height: 40
|
height: 40
|
||||||
|
|
|
@ -600,10 +600,11 @@ PageEnumNS::Page UiLogic::currentPage()
|
||||||
return static_cast<PageEnumNS::Page>(currentPageValue());
|
return static_cast<PageEnumNS::Page>(currentPageValue());
|
||||||
}
|
}
|
||||||
|
|
||||||
void UiLogic::saveTextFile(const QString& desc, const QString& ext, const QString& data)
|
void UiLogic::saveTextFile(const QString& desc, QString ext, const QString& data)
|
||||||
{
|
{
|
||||||
|
ext.replace("*", "");
|
||||||
QString fileName = QFileDialog::getSaveFileName(nullptr, desc,
|
QString fileName = QFileDialog::getSaveFileName(nullptr, desc,
|
||||||
QStandardPaths::writableLocation(QStandardPaths::DocumentsLocation), ext);
|
QStandardPaths::writableLocation(QStandardPaths::DocumentsLocation), "*" + ext);
|
||||||
|
|
||||||
if (fileName.isEmpty()) return;
|
if (fileName.isEmpty()) return;
|
||||||
if (!fileName.endsWith(ext)) fileName.append(ext);
|
if (!fileName.endsWith(ext)) fileName.append(ext);
|
||||||
|
@ -617,10 +618,11 @@ void UiLogic::saveTextFile(const QString& desc, const QString& ext, const QStrin
|
||||||
QDesktopServices::openUrl(fi.absoluteDir().absolutePath());
|
QDesktopServices::openUrl(fi.absoluteDir().absolutePath());
|
||||||
}
|
}
|
||||||
|
|
||||||
void UiLogic::saveBinaryFile(const QString &desc, const QString &ext, const QString &data)
|
void UiLogic::saveBinaryFile(const QString &desc, QString ext, const QString &data)
|
||||||
{
|
{
|
||||||
|
ext.replace("*", "");
|
||||||
QString fileName = QFileDialog::getSaveFileName(nullptr, desc,
|
QString fileName = QFileDialog::getSaveFileName(nullptr, desc,
|
||||||
QStandardPaths::writableLocation(QStandardPaths::DocumentsLocation), ext);
|
QStandardPaths::writableLocation(QStandardPaths::DocumentsLocation), "*" + ext);
|
||||||
|
|
||||||
if (fileName.isEmpty()) return;
|
if (fileName.isEmpty()) return;
|
||||||
if (!fileName.endsWith(ext)) fileName.append(ext);
|
if (!fileName.endsWith(ext)) fileName.append(ext);
|
||||||
|
|
|
@ -100,8 +100,8 @@ public:
|
||||||
|
|
||||||
Q_INVOKABLE void keyPressEvent(Qt::Key key);
|
Q_INVOKABLE void keyPressEvent(Qt::Key key);
|
||||||
|
|
||||||
Q_INVOKABLE void saveTextFile(const QString& desc, const QString& ext, const QString& data);
|
Q_INVOKABLE void saveTextFile(const QString& desc, QString ext, const QString& data);
|
||||||
Q_INVOKABLE void saveBinaryFile(const QString& desc, const QString& ext, const QString& data);
|
Q_INVOKABLE void saveBinaryFile(const QString& desc, QString ext, const QString& data);
|
||||||
Q_INVOKABLE void copyToClipboard(const QString& text);
|
Q_INVOKABLE void copyToClipboard(const QString& text);
|
||||||
|
|
||||||
QString getDialogConnectErrorText() const;
|
QString getDialogConnectErrorText() const;
|
||||||
|
|
|
@ -55,8 +55,11 @@ void VpnConnection::onConnectionStateChanged(VpnProtocol::VpnConnectionState sta
|
||||||
IpcClient::Interface()->routeDeleteList(m_vpnProtocol->vpnGateway(), QStringList() << "0.0.0.0");
|
IpcClient::Interface()->routeDeleteList(m_vpnProtocol->vpnGateway(), QStringList() << "0.0.0.0");
|
||||||
//qDebug() << "VpnConnection::onConnectionStateChanged :: adding custom routes, count:" << forwardIps.size();
|
//qDebug() << "VpnConnection::onConnectionStateChanged :: adding custom routes, count:" << forwardIps.size();
|
||||||
}
|
}
|
||||||
|
QString dns1 = m_vpnConfiguration.value(config_key::dns1).toString();
|
||||||
|
QString dns2 = m_vpnConfiguration.value(config_key::dns1).toString();
|
||||||
|
|
||||||
IpcClient::Interface()->routeAddList(m_vpnProtocol->vpnGateway(),
|
IpcClient::Interface()->routeAddList(m_vpnProtocol->vpnGateway(),
|
||||||
QStringList() << m_settings.primaryDns() << m_settings.secondaryDns());
|
QStringList() << dns1 << dns2);
|
||||||
|
|
||||||
|
|
||||||
if (m_settings.routeMode() == Settings::VpnOnlyForwardSites) {
|
if (m_settings.routeMode() == Settings::VpnOnlyForwardSites) {
|
||||||
|
@ -194,12 +197,12 @@ QString VpnConnection::createVpnConfigurationForProto(int serverIndex,
|
||||||
ErrorCode *errorCode)
|
ErrorCode *errorCode)
|
||||||
{
|
{
|
||||||
ErrorCode e = ErrorCode::NoError;
|
ErrorCode e = ErrorCode::NoError;
|
||||||
auto lastVpnConfig = getLastVpnConfig(containerConfig);
|
QMap<Proto, QString> lastVpnConfig = getLastVpnConfig(containerConfig);
|
||||||
|
|
||||||
QString configData;
|
QString configData;
|
||||||
if (lastVpnConfig.contains(proto)) {
|
if (lastVpnConfig.contains(proto)) {
|
||||||
configData = lastVpnConfig.value(proto);
|
configData = lastVpnConfig.value(proto);
|
||||||
configData = VpnConfigurator::processConfigWithLocalSettings(container, proto, configData);
|
configData = VpnConfigurator::processConfigWithLocalSettings(serverIndex, container, proto, configData);
|
||||||
|
|
||||||
qDebug() << "VpnConnection::createVpnConfiguration: using saved config for" << ProtocolProps::protoToString(proto);
|
qDebug() << "VpnConnection::createVpnConfiguration: using saved config for" << ProtocolProps::protoToString(proto);
|
||||||
}
|
}
|
||||||
|
@ -210,7 +213,7 @@ QString VpnConnection::createVpnConfigurationForProto(int serverIndex,
|
||||||
|
|
||||||
QString configDataBeforeLocalProcessing = configData;
|
QString configDataBeforeLocalProcessing = configData;
|
||||||
|
|
||||||
configData = VpnConfigurator::processConfigWithLocalSettings(container, proto, configData);
|
configData = VpnConfigurator::processConfigWithLocalSettings(serverIndex, container, proto, configData);
|
||||||
|
|
||||||
|
|
||||||
if (errorCode && e) {
|
if (errorCode && e) {
|
||||||
|
@ -256,6 +259,11 @@ QJsonObject VpnConnection::createVpnConfiguration(int serverIndex,
|
||||||
Proto proto = ContainerProps::defaultProtocol(container);
|
Proto proto = ContainerProps::defaultProtocol(container);
|
||||||
vpnConfiguration[config_key::vpnproto] = ProtocolProps::protoToString(proto);
|
vpnConfiguration[config_key::vpnproto] = ProtocolProps::protoToString(proto);
|
||||||
|
|
||||||
|
auto dns = VpnConfigurator::getDnsForConfig(serverIndex);
|
||||||
|
|
||||||
|
vpnConfiguration[config_key::dns1] = dns.first;
|
||||||
|
vpnConfiguration[config_key::dns2] = dns.second;
|
||||||
|
|
||||||
return vpnConfiguration;
|
return vpnConfiguration;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -285,11 +293,8 @@ void VpnConnection::connectToVpn(int serverIndex,
|
||||||
|
|
||||||
if (m_vpnProtocol) {
|
if (m_vpnProtocol) {
|
||||||
disconnect(m_vpnProtocol.data(), &VpnProtocol::protocolError, this, &VpnConnection::vpnProtocolError);
|
disconnect(m_vpnProtocol.data(), &VpnProtocol::protocolError, this, &VpnConnection::vpnProtocolError);
|
||||||
//qDebug() << "VpnConnection::connectToVpn 1";
|
|
||||||
m_vpnProtocol->stop();
|
m_vpnProtocol->stop();
|
||||||
//qDebug() << "VpnConnection::connectToVpn 2";
|
|
||||||
m_vpnProtocol.reset();
|
m_vpnProtocol.reset();
|
||||||
//qDebug() << "VpnConnection::connectToVpn 3";
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ErrorCode e = ErrorCode::NoError;
|
ErrorCode e = ErrorCode::NoError;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue