Files
amnezia-client/client/settings.cpp
T

237 lines
7.3 KiB
C++
Raw Normal View History

2020-12-30 17:03:05 +03:00
#include "defines.h"
#include "settings.h"
2021-04-20 02:09:47 +03:00
#include <QDebug>
2021-04-26 22:54:31 +03:00
#include "protocols/protocols_defs.h"
2021-04-20 02:09:47 +03:00
2021-05-10 05:25:20 -07:00
const char Settings::cloudFlareNs1[] = "1.1.1.1";
const char Settings::cloudFlareNs2[] = "1.0.0.1";
2021-01-26 15:01:15 +03:00
Settings::Settings(QObject* parent) :
QObject(parent),
m_settings (ORGANIZATION_NAME, APPLICATION_NAME, this)
2020-12-30 17:03:05 +03:00
{
2021-04-20 02:09:47 +03:00
// Import old settings
if (serversCount() == 0) {
QString user = m_settings.value("Server/userName").toString();
QString password = m_settings.value("Server/password").toString();
QString serverName = m_settings.value("Server/serverName").toString();
int port = m_settings.value("Server/serverPort").toInt();
if (!user.isEmpty() && !password.isEmpty() && !serverName.isEmpty()){
QJsonObject server;
2021-04-26 22:54:31 +03:00
server.insert(config_key::userName, user);
server.insert(config_key::password, password);
server.insert(config_key::hostName, serverName);
server.insert(config_key::port, port);
server.insert(config_key::description, tr("Server #1"));
2021-04-20 02:09:47 +03:00
addServer(server);
2021-05-10 05:25:20 -07:00
m_settings.remove("Server/userName");
m_settings.remove("Server/password");
m_settings.remove("Server/serverName");
m_settings.remove("Server/serverPort");
2021-04-20 02:09:47 +03:00
}
}
2020-12-30 17:03:05 +03:00
}
2021-04-20 02:09:47 +03:00
int Settings::serversCount() const
2020-12-30 17:03:05 +03:00
{
2021-04-20 02:09:47 +03:00
return serversArray().size();
}
QJsonObject Settings::server(int index) const
{
const QJsonArray &servers = serversArray();
if (index >= servers.size()) return QJsonObject();
return servers.at(index).toObject();
2020-12-30 17:03:05 +03:00
}
2021-04-20 02:09:47 +03:00
void Settings::addServer(const QJsonObject &server)
2020-12-30 17:03:05 +03:00
{
2021-04-20 02:09:47 +03:00
QJsonArray servers = serversArray();
servers.append(server);
setServersArray(servers);
}
void Settings::removeServer(int index)
{
QJsonArray servers = serversArray();
if (index >= servers.size()) return;
servers.removeAt(index);
setServersArray(servers);
}
bool Settings::editServer(int index, const QJsonObject &server)
{
QJsonArray servers = serversArray();
if (index >= servers.size()) return false;
servers.replace(index, server);
setServersArray(servers);
return true;
2020-12-30 17:03:05 +03:00
}
2021-04-20 02:09:47 +03:00
void Settings::setDefaultContainer(int serverIndex, DockerContainer container)
2020-12-30 17:03:05 +03:00
{
2021-04-20 02:09:47 +03:00
QJsonObject s = server(serverIndex);
2021-04-26 22:54:31 +03:00
s.insert(config_key::defaultContainer, containerToString(container));
2021-04-20 02:09:47 +03:00
editServer(serverIndex, s);
}
DockerContainer Settings::defaultContainer(int serverIndex) const
{
return containerFromString(defaultContainerName(serverIndex));
}
QString Settings::defaultContainerName(int serverIndex) const
{
2021-04-26 22:54:31 +03:00
QString name = server(serverIndex).value(config_key::defaultContainer).toString();
2021-04-20 02:09:47 +03:00
if (name.isEmpty()) {
2021-05-10 20:51:38 +03:00
return containerToString(DockerContainer::None);
2021-04-20 02:09:47 +03:00
}
else return name;
}
2021-05-07 23:28:37 +03:00
QMap<DockerContainer, QJsonObject> Settings::containers(int serverIndex) const
2021-04-26 22:54:31 +03:00
{
const QJsonArray &containers = server(serverIndex).value(config_key::containers).toArray();
2021-05-07 23:28:37 +03:00
QMap<DockerContainer, QJsonObject> containersMap;
2021-04-26 22:54:31 +03:00
for (const QJsonValue &val : containers) {
2021-05-07 23:28:37 +03:00
containersMap.insert(containerFromString(val.toObject().value(config_key::container).toString()), val.toObject());
}
return containersMap;
}
void Settings::setContainers(int serverIndex, const QMap<DockerContainer, QJsonObject> &containers)
{
QJsonObject s = server(serverIndex);
QJsonArray c;
for (const QJsonObject &o: containers) {
c.append(o);
2021-04-26 22:54:31 +03:00
}
2021-05-07 23:28:37 +03:00
s.insert(config_key::containers, c);
editServer(serverIndex, s);
}
QJsonObject Settings::containerConfig(int serverIndex, DockerContainer container)
{
if (container == DockerContainer::None) return QJsonObject();
return containers(serverIndex).value(container);
2021-04-26 22:54:31 +03:00
}
2021-05-07 23:28:37 +03:00
void Settings::setContainerConfig(int serverIndex, DockerContainer container, const QJsonObject &config)
{
2021-05-10 02:33:31 +03:00
if (container == DockerContainer::None) {
qCritical() << "Settings::setContainerConfig trying to set config for container == DockerContainer::None";
return;
}
2021-05-07 23:28:37 +03:00
auto c = containers(serverIndex);
c[container] = config;
c[container][config_key::container] = containerToString(container);
setContainers(serverIndex, c);
}
void Settings::removeContainerConfig(int serverIndex, DockerContainer container)
{
2021-05-10 02:33:31 +03:00
if (container == DockerContainer::None) {
qCritical() << "Settings::removeContainerConfig trying to remove config for container == DockerContainer::None";
return;
}
2021-05-07 23:28:37 +03:00
auto c = containers(serverIndex);
c.remove(container);
setContainers(serverIndex, c);
}
2021-04-26 22:54:31 +03:00
QJsonObject Settings::protocolConfig(int serverIndex, DockerContainer container, Protocol proto)
{
const QJsonObject &c = containerConfig(serverIndex, container);
2021-05-07 23:28:37 +03:00
return c.value(protoToString(proto)).toObject();
}
2021-04-26 22:54:31 +03:00
2021-05-07 23:28:37 +03:00
void Settings::setProtocolConfig(int serverIndex, DockerContainer container, Protocol proto, const QJsonObject &config)
{
QJsonObject c = containerConfig(serverIndex, container);
c.insert(protoToString(proto), config);
setContainerConfig(serverIndex, container, c);
}
void Settings::clearLastConnectionConfig(int serverIndex, DockerContainer container, Protocol proto)
{
if (proto == Protocol::Any) {
for (Protocol p: { Protocol::OpenVpn, Protocol::ShadowSocks, Protocol::Cloak, Protocol::WireGuard}) {
clearLastConnectionConfig(serverIndex, container, p);
}
return;
2021-04-26 22:54:31 +03:00
}
2021-05-07 23:28:37 +03:00
QJsonObject c = protocolConfig(serverIndex, container, proto);
c.remove(config_key::last_config);
setProtocolConfig(serverIndex, container, proto, c);
2021-05-10 02:33:31 +03:00
qDebug() << "Settings::clearLastConnectionConfig for" << serverIndex << container << proto;
2021-04-26 22:54:31 +03:00
}
2021-05-10 14:19:36 +03:00
bool Settings::haveAuthData(int serverIndex) const
2021-04-20 02:09:47 +03:00
{
2021-05-10 14:19:36 +03:00
if (serverIndex < 0) return false;
ServerCredentials cred = serverCredentials(serverIndex);
2021-04-20 02:09:47 +03:00
return (!cred.hostName.isEmpty() && !cred.userName.isEmpty() && !cred.password.isEmpty());
}
2021-04-26 22:54:31 +03:00
QString Settings::nextAvailableServerName() const
{
int i = 0;
bool nameExist = false;
do {
i++;
nameExist = false;
for (const QJsonValue &server: serversArray()) {
if (server.toObject().value(config_key::description).toString() == tr("Server") + " " + QString::number(i)) {
nameExist = true;
break;
}
}
} while (nameExist);
return tr("Server") + " " + QString::number(i);
}
2021-05-10 05:25:20 -07:00
QString Settings::primaryDns() const { return m_settings.value("Conf/primaryDns", cloudFlareNs1).toString(); }
QString Settings::secondaryDns() const { return m_settings.value("Conf/secondaryDns", cloudFlareNs2).toString(); }
2021-04-20 02:09:47 +03:00
//void Settings::setServerCredentials(const ServerCredentials &credentials)
//{
// setServerName(credentials.hostName);
// setServerPort(credentials.port);
// setUserName(credentials.userName);
// setPassword(credentials.password);
//}
ServerCredentials Settings::defaultServerCredentials() const
{
2021-04-26 22:54:31 +03:00
return serverCredentials(defaultServerIndex());
}
ServerCredentials Settings::serverCredentials(int index) const
{
const QJsonObject &s = server(index);
2021-04-20 02:09:47 +03:00
2021-01-06 17:12:24 +03:00
ServerCredentials credentials;
2021-04-26 22:54:31 +03:00
credentials.hostName = s.value(config_key::hostName).toString();
credentials.userName = s.value(config_key::userName).toString();
credentials.password = s.value(config_key::password).toString();
credentials.port = s.value(config_key::port).toInt();
2021-01-06 17:12:24 +03:00
return credentials;
2020-12-30 17:03:05 +03:00
}