Files

265 lines
7.7 KiB
C
Raw Permalink Normal View History

2020-12-30 17:03:05 +03:00
#ifndef SETTINGS_H
#define SETTINGS_H
#include <QObject>
#include <QSettings>
#include <QString>
2020-12-30 17:03:05 +03:00
2021-04-20 02:09:47 +03:00
#include <QJsonArray>
#include <QJsonDocument>
2021-04-20 02:09:47 +03:00
#include <QJsonObject>
2021-09-09 20:15:44 +03:00
#include "containers/containers_defs.h"
#include "core/defs.h"
2022-08-05 14:31:12 +03:00
#include "secure_qsettings.h"
2021-01-06 17:12:24 +03:00
using namespace amnezia;
2020-12-30 17:03:05 +03:00
class QSettings;
class Settings : public QObject
{
Q_OBJECT
public:
explicit Settings(QObject *parent = nullptr);
2020-12-30 17:03:05 +03:00
2021-04-20 02:09:47 +03:00
ServerCredentials defaultServerCredentials() const;
2021-04-26 22:54:31 +03:00
ServerCredentials serverCredentials(int index) const;
2020-12-30 17:03:05 +03:00
QJsonArray serversArray() const
{
return QJsonDocument::fromJson(m_settings.value("Servers/serversList").toByteArray()).array();
}
void setServersArray(const QJsonArray &servers)
{
m_settings.setValue("Servers/serversList", QJsonDocument(servers).toJson());
}
2021-04-20 02:09:47 +03:00
// Servers section
int serversCount() const;
QJsonObject server(int index) const;
void addServer(const QJsonObject &server);
void removeServer(int index);
bool editServer(int index, const QJsonObject &server);
int defaultServerIndex() const
{
return m_settings.value("Servers/defaultServerIndex", 0).toInt();
}
void setDefaultServer(int index)
{
m_settings.setValue("Servers/defaultServerIndex", index);
}
QJsonObject defaultServer() const
{
return server(defaultServerIndex());
}
2021-04-20 02:09:47 +03:00
2021-04-26 22:54:31 +03:00
void setDefaultContainer(int serverIndex, DockerContainer container);
2021-04-20 02:09:47 +03:00
DockerContainer defaultContainer(int serverIndex) const;
QString defaultContainerName(int serverIndex) const;
2020-12-30 17:03:05 +03:00
2021-05-07 23:28:37 +03:00
QMap<DockerContainer, QJsonObject> containers(int serverIndex) const;
void setContainers(int serverIndex, const QMap<DockerContainer, QJsonObject> &containers);
2021-04-26 22:54:31 +03:00
QJsonObject containerConfig(int serverIndex, DockerContainer container);
2021-05-07 23:28:37 +03:00
void setContainerConfig(int serverIndex, DockerContainer container, const QJsonObject &config);
void removeContainerConfig(int serverIndex, DockerContainer container);
QJsonObject protocolConfig(int serverIndex, DockerContainer container, Proto proto);
void setProtocolConfig(int serverIndex, DockerContainer container, Proto proto, const QJsonObject &config);
2021-05-07 23:28:37 +03:00
void clearLastConnectionConfig(int serverIndex, DockerContainer container, Proto proto = Proto::Any);
2021-04-26 22:54:31 +03:00
2021-05-10 14:19:36 +03:00
bool haveAuthData(int serverIndex) const;
2021-04-26 22:54:31 +03:00
QString nextAvailableServerName() const;
2020-12-30 17:03:05 +03:00
2021-04-20 02:09:47 +03:00
// App settings section
bool isAutoConnect() const
{
return m_settings.value("Conf/autoConnect", false).toBool();
}
void setAutoConnect(bool enabled)
{
m_settings.setValue("Conf/autoConnect", enabled);
}
bool isStartMinimized() const
{
return m_settings.value("Conf/startMinimized", false).toBool();
}
void setStartMinimized(bool enabled)
{
m_settings.setValue("Conf/startMinimized", enabled);
}
bool isNewsNotifications() const
{
return m_settings.value("Conf/newsNotifications", true).toBool();
}
void setNewsNotifications(bool enabled)
{
m_settings.setValue("Conf/newsNotifications", enabled);
}
bool isSaveLogs() const
{
return m_settings.value("Conf/saveLogs", false).toBool();
}
void setSaveLogs(bool enabled);
2022-01-30 17:35:57 +03:00
QDateTime getLogEnableDate();
void setLogEnableDate(QDateTime date);
2021-05-27 22:18:36 +03:00
enum RouteMode {
VpnAllSites,
VpnOnlyForwardSites,
VpnAllExceptSites
};
Q_ENUM(RouteMode)
2021-05-27 22:18:36 +03:00
QString routeModeString(RouteMode mode) const;
2023-09-10 17:40:18 -07:00
RouteMode routeMode() const;
void setRouteMode(RouteMode mode) { m_settings.setValue("Conf/routeMode", mode); }
bool isSitesSplitTunnelingEnabled() const;
void setSitesSplitTunnelingEnabled(bool enabled);
QVariantMap vpnSites(RouteMode mode) const
{
return m_settings.value("Conf/" + routeModeString(mode)).toMap();
}
void setVpnSites(RouteMode mode, const QVariantMap &sites)
{
m_settings.setValue("Conf/" + routeModeString(mode), sites);
}
bool addVpnSite(RouteMode mode, const QString &site, const QString &ip = "");
2022-01-23 19:16:40 +03:00
void addVpnSites(RouteMode mode, const QMap<QString, QString> &sites); // map <site, ip>
2021-05-27 22:18:36 +03:00
QStringList getVpnIps(RouteMode mode) const;
void removeVpnSite(RouteMode mode, const QString &site);
void addVpnIps(RouteMode mode, const QStringList &ip);
void removeVpnSites(RouteMode mode, const QStringList &sites);
void removeAllVpnSites(RouteMode mode);
2021-05-27 22:18:36 +03:00
bool useAmneziaDns() const
{
return m_settings.value("Conf/useAmneziaDns", true).toBool();
}
void setUseAmneziaDns(bool enabled)
{
m_settings.setValue("Conf/useAmneziaDns", enabled);
}
2021-05-27 22:18:36 +03:00
2021-05-10 05:25:20 -07:00
QString primaryDns() const;
QString secondaryDns() const;
// QString primaryDns() const { return m_primaryDns; }
void setPrimaryDns(const QString &primaryDns)
{
m_settings.setValue("Conf/primaryDns", primaryDns);
}
// QString secondaryDns() const { return m_secondaryDns; }
void setSecondaryDns(const QString &secondaryDns)
{
m_settings.setValue("Conf/secondaryDns", secondaryDns);
}
// static constexpr char openNicNs5[] = "94.103.153.176";
// static constexpr char openNicNs13[] = "144.76.103.143";
QByteArray backupAppConfig() const
{
return m_settings.backupAppConfig();
}
bool restoreAppConfig(const QByteArray &cfg)
{
return m_settings.restoreAppConfig(cfg);
}
QLocale getAppLanguage()
{
QString localeStr = m_settings.value("Conf/appLanguage", QLocale::system().name()).toString();
return QLocale(localeStr);
};
void setAppLanguage(QLocale locale)
{
m_settings.setValue("Conf/appLanguage", locale.name());
};
2022-08-05 18:59:47 +03:00
bool isScreenshotsEnabled() const
{
return m_settings.value("Conf/screenshotsEnabled", true).toBool();
}
void setScreenshotsEnabled(bool enabled)
{
m_settings.setValue("Conf/screenshotsEnabled", enabled);
emit screenshotsEnabledChanged(enabled);
}
void clearSettings();
enum AppsRouteMode {
VpnAllApps,
VpnOnlyForwardApps,
VpnAllExceptApps
};
Q_ENUM(AppsRouteMode)
QString appsRouteModeString(AppsRouteMode mode) const;
AppsRouteMode getAppsRouteMode() const;
void setAppsRouteMode(AppsRouteMode mode);
QVector<InstalledAppInfo> getVpnApps(AppsRouteMode mode) const;
void setVpnApps(AppsRouteMode mode, const QVector<InstalledAppInfo> &apps);
bool isAppsSplitTunnelingEnabled() const;
void setAppsSplitTunnelingEnabled(bool enabled);
bool isKillSwitchEnabled() const;
void setKillSwitchEnabled(bool enabled);
feature: fillswitch strict mode (#1333) * 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>
2025-05-02 23:54:36 -07:00
bool isStrictKillSwitchEnabled() const;
void setStrictKillSwitchEnabled(bool enabled);
QString getInstallationUuid(const bool needCreate);
void resetGatewayEndpoint();
void setGatewayEndpoint(const QString &endpoint);
void setDevGatewayEndpoint();
QString getGatewayEndpoint(bool isTestPurchase = false);
bool isDevGatewayEnv(bool isTestPurchase = false);
void toggleDevGatewayEnv(bool enabled);
bool isHomeAdLabelVisible();
void disableHomeAdLabel();
bool isPremV1MigrationReminderActive();
void disablePremV1MigrationReminder();
feature: fillswitch strict mode (#1333) * 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>
2025-05-02 23:54:36 -07:00
QStringList allowedDnsServers() const;
void setAllowedDnsServers(const QStringList &servers);
QStringList readNewsIds() const;
void setReadNewsIds(const QStringList &ids);
signals:
void saveLogsChanged(bool enabled);
void screenshotsEnabledChanged(bool enabled);
void serverRemoved(int serverIndex);
void settingsCleared();
private:
void setInstallationUuid(const QString &uuid);
mutable SecureQSettings m_settings;
QString m_gatewayEndpoint;
2020-12-30 17:03:05 +03:00
};
#endif // SETTINGS_H