
* Add allowed DNS list for killswitch * Windows killswitch strict mode backend part * Killswitch strict mode for Linux and MacOS * Windows fixes * feature: Add Kill Switch settings page with strict mode option * fix windows build after merge * Refresh killswitch mode when it toggled * Use HLM to store strictMode flag * Some Linux updates * feat: Enhance VerticalRadioButton with improved styling and disabled states * Refresh killSwitch state update * Fix build * refactor: Modularize header components * Change kill switch radio button styling * Fix strict kill switch mode handling * Refactor: Replace HeaderType with new Types for headers in QML pages * Remove deprecated HeaderType QML component * Refresh strict mode killswitch after global toggle change * Implement model, controller and UI for killswitch dns exceptions * Connect backend part and UI * Change label text to DNS exceptions * Remove HeaderType from PageSettingsApiDevices * Some pretty fixes * Fix problem with definition sequence of PageSettingsKillSwitchExceptions.pml elements * Add exclusion method for Windows firewall * Change ubuntu version in deploy script * Update ubuntu version in GH actions * Add confirmation popup for strict killswitch mode * Add qt standard path for build script * Add method to killswitch for expanding strickt mode exceptions list and fix allowTrafficTo() for Windows. Also Added cache in KillSwitch class for exceptions * Add insertion of gateway address to strict killswitch exceptions * Review fixes * buildfix and naming --------- Co-authored-by: aiamnezia <ai@amnezia.org>
101 lines
2.8 KiB
C++
101 lines
2.8 KiB
C++
#include "allowedDnsController.h"
|
|
|
|
#include <QFile>
|
|
#include <QStandardPaths>
|
|
#include <QJsonDocument>
|
|
#include <QJsonArray>
|
|
#include <QJsonObject>
|
|
|
|
#include "systemController.h"
|
|
#include "core/networkUtilities.h"
|
|
#include "core/defs.h"
|
|
|
|
AllowedDnsController::AllowedDnsController(const std::shared_ptr<Settings> &settings,
|
|
const QSharedPointer<AllowedDnsModel> &allowedDnsModel,
|
|
QObject *parent)
|
|
: QObject(parent), m_settings(settings), m_allowedDnsModel(allowedDnsModel)
|
|
{
|
|
}
|
|
|
|
void AllowedDnsController::addDns(QString ip)
|
|
{
|
|
if (ip.isEmpty()) {
|
|
return;
|
|
}
|
|
|
|
if (!NetworkUtilities::ipAddressRegExp().match(ip).hasMatch()) {
|
|
emit errorOccurred(tr("The address does not look like a valid IP address"));
|
|
return;
|
|
}
|
|
|
|
if (m_allowedDnsModel->addDns(ip)) {
|
|
emit finished(tr("New DNS server added: %1").arg(ip));
|
|
} else {
|
|
emit errorOccurred(tr("DNS server already exists: %1").arg(ip));
|
|
}
|
|
}
|
|
|
|
void AllowedDnsController::removeDns(int index)
|
|
{
|
|
auto modelIndex = m_allowedDnsModel->index(index);
|
|
auto ip = m_allowedDnsModel->data(modelIndex, AllowedDnsModel::Roles::IpRole).toString();
|
|
m_allowedDnsModel->removeDns(modelIndex);
|
|
|
|
emit finished(tr("DNS server removed: %1").arg(ip));
|
|
}
|
|
|
|
void AllowedDnsController::importDns(const QString &fileName, bool replaceExisting)
|
|
{
|
|
QByteArray jsonData;
|
|
if (!SystemController::readFile(fileName, jsonData)) {
|
|
emit errorOccurred(tr("Can't open file: %1").arg(fileName));
|
|
return;
|
|
}
|
|
|
|
QJsonDocument jsonDocument = QJsonDocument::fromJson(jsonData);
|
|
if (jsonDocument.isNull()) {
|
|
emit errorOccurred(tr("Failed to parse JSON data from file: %1").arg(fileName));
|
|
return;
|
|
}
|
|
|
|
if (!jsonDocument.isArray()) {
|
|
emit errorOccurred(tr("The JSON data is not an array in file: %1").arg(fileName));
|
|
return;
|
|
}
|
|
|
|
auto jsonArray = jsonDocument.array();
|
|
QStringList dnsServers;
|
|
|
|
for (auto jsonValue : jsonArray) {
|
|
auto ip = jsonValue.toString();
|
|
|
|
if (!NetworkUtilities::ipAddressRegExp().match(ip).hasMatch()) {
|
|
qDebug() << ip << " is not a valid IP address";
|
|
continue;
|
|
}
|
|
|
|
dnsServers.append(ip);
|
|
}
|
|
|
|
m_allowedDnsModel->addDnsList(dnsServers, replaceExisting);
|
|
|
|
emit finished(tr("Import completed"));
|
|
}
|
|
|
|
void AllowedDnsController::exportDns(const QString &fileName)
|
|
{
|
|
auto dnsServers = m_allowedDnsModel->getCurrentDnsServers();
|
|
|
|
QJsonArray jsonArray;
|
|
|
|
for (const auto &ip : dnsServers) {
|
|
jsonArray.append(ip);
|
|
}
|
|
|
|
QJsonDocument jsonDocument(jsonArray);
|
|
QByteArray jsonData = jsonDocument.toJson();
|
|
|
|
SystemController::saveFile(fileName, jsonData);
|
|
|
|
emit finished(tr("Export completed"));
|
|
}
|