diff --git a/libnymea-app/configuration/nymeaconfiguration.cpp b/libnymea-app/configuration/nymeaconfiguration.cpp index a8be34a9..5b67bfad 100644 --- a/libnymea-app/configuration/nymeaconfiguration.cpp +++ b/libnymea-app/configuration/nymeaconfiguration.cpp @@ -24,28 +24,28 @@ #include "nymeaconfiguration.h" +#include "mqttpolicies.h" +#include "mqttpolicy.h" #include "serverconfiguration.h" #include "serverconfigurations.h" -#include "mqttpolicy.h" -#include "mqttpolicies.h" #include "jsonrpc/jsonrpcclient.h" -#include #include +#include #include "logging.h" NYMEA_LOGGING_CATEGORY(dcNymeaConfiguration, "NymeaConfiguration") -NymeaConfiguration::NymeaConfiguration(JsonRpcClient *client, QObject *parent): - QObject(parent), - m_client(client), - m_tcpServerConfigurations(new ServerConfigurations(this)), - m_webSocketServerConfigurations(new ServerConfigurations(this)), - m_webServerConfigurations(new WebServerConfigurations(this)), - m_tunnelProxyServerConfigurations(new TunnelProxyServerConfigurations(this)), - m_mqttServerConfigurations(new ServerConfigurations(this)), - m_mqttPolicies(new MqttPolicies(this)) +NymeaConfiguration::NymeaConfiguration(JsonRpcClient *client, QObject *parent) + : QObject(parent) + , m_client(client) + , m_tcpServerConfigurations(new ServerConfigurations(this)) + , m_webSocketServerConfigurations(new ServerConfigurations(this)) + , m_webServerConfigurations(new WebServerConfigurations(this)) + , m_tunnelProxyServerConfigurations(new TunnelProxyServerConfigurations(this)) + , m_mqttServerConfigurations(new ServerConfigurations(this)) + , m_mqttPolicies(new MqttPolicies(this)) { client->registerNotificationHandler(this, "Configuration", "notificationReceived"); } @@ -100,6 +100,28 @@ void NymeaConfiguration::setDebugServerEnabled(bool debugServerEnabled) m_client->sendCommand("Configuration.SetDebugServerEnabled", params, this, "setDebugServerEnabledResponse"); } +QString NymeaConfiguration::backupDestinationDirectory() const +{ + return m_backupDestinationDirectory; +} + +void NymeaConfiguration::setBackupDestinationDirectory(const QString &backupDestinationDirectory) +{ + m_backupDestinationDirectory = backupDestinationDirectory; + emit backupDestinationDirectoryChanged(); +} + +int NymeaConfiguration::backupMaxCount() const +{ + return m_backupMaxCount; +} + +void NymeaConfiguration::setBackupMaxCount(int backupMaxCount) +{ + m_backupMaxCount = backupMaxCount; + emit backupMaxCountChanged(); +} + ServerConfigurations *NymeaConfiguration::tcpServerConfigurations() const { return m_tcpServerConfigurations; @@ -285,35 +307,59 @@ void NymeaConfiguration::getConfigurationsResponse(int commandId, const QVariant emit serverNameChanged(); QVariantMap cloudConfig = params.value("cloud").toMap(); + QVariantMap backupConifgurations = params.value("backupConfigurations").toMap(); + setBackupDestinationDirectory(backupConifgurations.value("destinationDirectory").toString()); + setBackupMaxCount(backupConifgurations.value("maxCount").toInt()); + tcpServerConfigurations()->clear(); foreach (const QVariant &tcpServerVariant, params.value("tcpServerConfigurations").toList()) { QVariantMap tcpConfigMap = tcpServerVariant.toMap(); - ServerConfiguration *config = new ServerConfiguration(tcpConfigMap.value("id").toString(), tcpConfigMap.value("address").toString(), tcpConfigMap.value("port").toInt(), tcpConfigMap.value("authenticationEnabled").toBool(), tcpConfigMap.value("sslEnabled").toBool()); + ServerConfiguration *config = new ServerConfiguration(tcpConfigMap.value("id").toString(), + tcpConfigMap.value("address").toString(), + tcpConfigMap.value("port").toInt(), + tcpConfigMap.value("authenticationEnabled").toBool(), + tcpConfigMap.value("sslEnabled").toBool()); qCInfo(dcNymeaConfiguration) << "TCP server config:" << config->id() << config->address() << config->port() << config->authenticationEnabled() << config->sslEnabled(); m_tcpServerConfigurations->addConfiguration(config); } webSocketServerConfigurations()->clear(); foreach (const QVariant &websocketServerVariant, params.value("webSocketServerConfigurations").toList()) { QVariantMap websocketConfigMap = websocketServerVariant.toMap(); - ServerConfiguration *config = new ServerConfiguration(websocketConfigMap.value("id").toString(), websocketConfigMap.value("address").toString(), websocketConfigMap.value("port").toInt(), websocketConfigMap.value("authenticationEnabled").toBool(), websocketConfigMap.value("sslEnabled").toBool()); - qCInfo(dcNymeaConfiguration) << "WebSocket server config:" << config->id() << config->address() << config->port() << config->authenticationEnabled() << config->sslEnabled(); + ServerConfiguration *config = new ServerConfiguration(websocketConfigMap.value("id").toString(), + websocketConfigMap.value("address").toString(), + websocketConfigMap.value("port").toInt(), + websocketConfigMap.value("authenticationEnabled").toBool(), + websocketConfigMap.value("sslEnabled").toBool()); + qCInfo(dcNymeaConfiguration) << "WebSocket server config:" << config->id() << config->address() << config->port() << config->authenticationEnabled() + << config->sslEnabled(); m_webSocketServerConfigurations->addConfiguration(config); } webServerConfigurations()->clear(); foreach (const QVariant &webServerVariant, params.value("webServerConfigurations").toList()) { QVariantMap webServerConfigMap = webServerVariant.toMap(); - WebServerConfiguration* config = new WebServerConfiguration(webServerConfigMap.value("id").toString(), webServerConfigMap.value("address").toString(), webServerConfigMap.value("port").toInt(), webServerConfigMap.value("authenticationEnabled").toBool(), webServerConfigMap.value("sslEnabled").toBool()); + WebServerConfiguration *config = new WebServerConfiguration(webServerConfigMap.value("id").toString(), + webServerConfigMap.value("address").toString(), + webServerConfigMap.value("port").toInt(), + webServerConfigMap.value("authenticationEnabled").toBool(), + webServerConfigMap.value("sslEnabled").toBool()); config->setPublicFolder(webServerConfigMap.value("publicFolder").toString()); - qCInfo(dcNymeaConfiguration) << "WebServer server config:" << config->id() << config->address() << config->port() << config->authenticationEnabled() << config->sslEnabled() << config->publicFolder(); + qCInfo(dcNymeaConfiguration) << "WebServer server config:" << config->id() << config->address() << config->port() << config->authenticationEnabled() << config->sslEnabled() + << config->publicFolder(); m_webServerConfigurations->addConfiguration(config); } tunnelProxyServerConfigurations()->clear(); foreach (const QVariant &tunnelProxyServerVariant, params.value("tunnelProxyServerConfigurations").toList()) { QVariantMap tunnelProxyServerConfigMap = tunnelProxyServerVariant.toMap(); - TunnelProxyServerConfiguration *config = new TunnelProxyServerConfiguration(tunnelProxyServerConfigMap.value("id").toString(), tunnelProxyServerConfigMap.value("address").toString(), tunnelProxyServerConfigMap.value("port").toInt(), tunnelProxyServerConfigMap.value("authenticationEnabled").toBool(), tunnelProxyServerConfigMap.value("sslEnabled").toBool(), tunnelProxyServerConfigMap.value("ignoreSslErrors").toBool()); - qCInfo(dcNymeaConfiguration) << "Tunnel server config:" << config->id() << config->address() << config->port() << config->authenticationEnabled() << config->sslEnabled() << config->ignoreSslErrors(); + TunnelProxyServerConfiguration *config = new TunnelProxyServerConfiguration(tunnelProxyServerConfigMap.value("id").toString(), + tunnelProxyServerConfigMap.value("address").toString(), + tunnelProxyServerConfigMap.value("port").toInt(), + tunnelProxyServerConfigMap.value("authenticationEnabled").toBool(), + tunnelProxyServerConfigMap.value("sslEnabled").toBool(), + tunnelProxyServerConfigMap.value("ignoreSslErrors").toBool()); + qCInfo(dcNymeaConfiguration) << "Tunnel server config:" << config->id() << config->address() << config->port() << config->authenticationEnabled() << config->sslEnabled() + << config->ignoreSslErrors(); m_tunnelProxyServerConfigurations->addConfiguration(config); } @@ -387,7 +433,11 @@ void NymeaConfiguration::getMqttServerConfigsReply(int commandId, const QVariant m_mqttServerConfigurations->clear(); foreach (const QVariant &mqttServerVariant, params.value("mqttServerConfigurations").toList()) { QVariantMap mqttConfigMap = mqttServerVariant.toMap(); - ServerConfiguration *config = new ServerConfiguration(mqttConfigMap.value("id").toString(), mqttConfigMap.value("address").toString(), mqttConfigMap.value("port").toInt(), mqttConfigMap.value("authenticationEnabled").toBool(), mqttConfigMap.value("sslEnabled").toBool()); + ServerConfiguration *config = new ServerConfiguration(mqttConfigMap.value("id").toString(), + mqttConfigMap.value("address").toString(), + mqttConfigMap.value("port").toInt(), + mqttConfigMap.value("authenticationEnabled").toBool(), + mqttConfigMap.value("sslEnabled").toBool()); m_mqttServerConfigurations->addConfiguration(config); } } @@ -405,16 +455,15 @@ void NymeaConfiguration::deleteMqttConfigReply(int commandId, const QVariantMap void NymeaConfiguration::getMqttPoliciesReply(int commandId, const QVariantMap ¶ms) { Q_UNUSED(commandId) -// qCDebug(dcNymeaConfiguration) << "Mqtt polices:" << params; + // qCDebug(dcNymeaConfiguration) << "Mqtt polices:" << params; m_mqttPolicies->clear(); foreach (const QVariant &policyVariant, params.value("mqttPolicies").toList()) { QVariantMap policyMap = policyVariant.toMap(); - MqttPolicy *policy = new MqttPolicy( - policyMap.value("clientId").toString(), - policyMap.value("username").toString(), - policyMap.value("password").toString(), - policyMap.value("allowedPublishTopicFilters").toStringList(), - policyMap.value("allowedSubscribeTopicFilters").toStringList()); + MqttPolicy *policy = new MqttPolicy(policyMap.value("clientId").toString(), + policyMap.value("username").toString(), + policyMap.value("password").toString(), + policyMap.value("allowedPublishTopicFilters").toStringList(), + policyMap.value("allowedSubscribeTopicFilters").toStringList()); m_mqttPolicies->addPolicy(policy); } } @@ -437,10 +486,21 @@ void NymeaConfiguration::notificationReceived(const QVariantMap ¬ification) if (notif == "Configuration.BasicConfigurationChanged") { QVariantMap configMap = params.value("basicConfiguration").toMap(); + m_debugServerEnabled = configMap.value("debugServerEnabled").toBool(); emit debugServerEnabledChanged(); + m_serverName = configMap.value("serverName").toString(); emit serverNameChanged(); + + QVariantMap backupConfigMap = params.value("backupConfiguration").toMap(); + + m_backupDestinationDirectory = backupConfigMap.value("destinationDirectory").toString(); + emit backupDestinationDirectoryChanged(); + + m_backupMaxCount = backupConfigMap.value("maxCount").toInt(); + emit backupMaxCountChanged(); + qCDebug(dcNymeaConfiguration()) << "Basic configuration changed. Server name:" << m_serverName << "Debug server enabled:" << m_debugServerEnabled; } else if (notif == "Configuration.TcpServerConfigurationChanged") { QVariantMap configMap = params.value("tcpServerConfiguration").toMap(); @@ -493,7 +553,7 @@ void NymeaConfiguration::notificationReceived(const QVariantMap ¬ification) bool sslEnabled = configMap.value("sslEnabled").toBool(); bool ignoreSslErrors = configMap.value("ignoreSslErrors").toBool(); - TunnelProxyServerConfiguration *config = qobject_cast(m_tunnelProxyServerConfigurations->getConfiguration(id)); + TunnelProxyServerConfiguration *config = qobject_cast(m_tunnelProxyServerConfigurations->getConfiguration(id)); bool existing = true; if (!config) { existing = false; @@ -505,7 +565,8 @@ void NymeaConfiguration::notificationReceived(const QVariantMap ¬ification) config->setSslEnabled(sslEnabled); config->setIgnoreSslErrors(ignoreSslErrors); if (!existing) { - qCInfo(dcNymeaConfiguration()) << "Adding tunnel proxy connection:" << config->id() << config->address() << config->port() << config->sslEnabled() << config->authenticationEnabled() << config->ignoreSslErrors(); + qCInfo(dcNymeaConfiguration()) << "Adding tunnel proxy connection:" << config->id() << config->address() << config->port() << config->sslEnabled() + << config->authenticationEnabled() << config->ignoreSslErrors(); m_tunnelProxyServerConfigurations->addConfiguration(config); } } else if (notif == "Configuration.WebServerConfigurationChanged") { @@ -515,9 +576,9 @@ void NymeaConfiguration::notificationReceived(const QVariantMap ¬ification) int port = configMap.value("port").toInt(); bool authEnabled = configMap.value("authenticationEnabled").toBool(); bool sslEnabled = configMap.value("sslEnabled").toBool(); - QString publicFolder = configMap.value("publicFolder").toString(); + QString publicFolder = configMap.value("publicFolder").toString(); - WebServerConfiguration *config = qobject_cast(m_webServerConfigurations->getConfiguration(id)); + WebServerConfiguration *config = qobject_cast(m_webServerConfigurations->getConfiguration(id)); bool existing = true; if (!config) { existing = false; @@ -581,7 +642,7 @@ void NymeaConfiguration::notificationReceived(const QVariantMap ¬ification) policy->setAllowedSubscribeTopicFilters(policyMap.value("allowedSubscribeTopicFilters").toStringList()); qCInfo(dcNymeaConfiguration()) << "MQTT policy changed" << policy->clientId() << policy->username() << policy->password(); } else if (notif == "Configuration.MqttPolicyRemoved") { - MqttPolicy* policy = m_mqttPolicies->getPolicy(params.value("clientId").toString()); + MqttPolicy *policy = m_mqttPolicies->getPolicy(params.value("clientId").toString()); if (!policy) { qCWarning(dcNymeaConfiguration()) << "Reveived a policy removed notification for apolicy we don't know"; return; diff --git a/libnymea-app/configuration/nymeaconfiguration.h b/libnymea-app/configuration/nymeaconfiguration.h index d1201b04..a846fd41 100644 --- a/libnymea-app/configuration/nymeaconfiguration.h +++ b/libnymea-app/configuration/nymeaconfiguration.h @@ -27,8 +27,8 @@ #include -#include "serverconfigurations.h" #include "mqttpolicies.h" +#include "serverconfigurations.h" class JsonRpcClient; class ServerConfiguration; @@ -49,16 +49,19 @@ class NymeaConfiguration : public QObject Q_PROPERTY(bool debugServerEnabled READ debugServerEnabled WRITE setDebugServerEnabled NOTIFY debugServerEnabledChanged) - Q_PROPERTY(ServerConfigurations* tcpServerConfigurations READ tcpServerConfigurations CONSTANT) - Q_PROPERTY(ServerConfigurations* webSocketServerConfigurations READ webSocketServerConfigurations CONSTANT) - Q_PROPERTY(WebServerConfigurations* webServerConfigurations READ webServerConfigurations CONSTANT) - Q_PROPERTY(TunnelProxyServerConfigurations* tunnelProxyServerConfigurations READ tunnelProxyServerConfigurations CONSTANT) - Q_PROPERTY(ServerConfigurations* mqttServerConfigurations READ mqttServerConfigurations CONSTANT) + Q_PROPERTY(QString backupDestinationDirectory READ backupDestinationDirectory WRITE setBackupDestinationDirectory NOTIFY backupDestinationDirectoryChanged FINAL) + Q_PROPERTY(int backupMaxCount READ backupMaxCount NOTIFY backupMaxCountChanged FINAL) - Q_PROPERTY(MqttPolicies* mqttPolicies READ mqttPolicies CONSTANT) + Q_PROPERTY(ServerConfigurations *tcpServerConfigurations READ tcpServerConfigurations CONSTANT) + Q_PROPERTY(ServerConfigurations *webSocketServerConfigurations READ webSocketServerConfigurations CONSTANT) + Q_PROPERTY(WebServerConfigurations *webServerConfigurations READ webServerConfigurations CONSTANT) + Q_PROPERTY(TunnelProxyServerConfigurations *tunnelProxyServerConfigurations READ tunnelProxyServerConfigurations CONSTANT) + Q_PROPERTY(ServerConfigurations *mqttServerConfigurations READ mqttServerConfigurations CONSTANT) + + Q_PROPERTY(MqttPolicies *mqttPolicies READ mqttPolicies CONSTANT) public: - explicit NymeaConfiguration(JsonRpcClient* client, QObject *parent = nullptr); + explicit NymeaConfiguration(JsonRpcClient *client, QObject *parent = nullptr); bool fetchingData() const; @@ -76,6 +79,12 @@ public: bool debugServerEnabled() const; void setDebugServerEnabled(bool debugServerEnabled); + QString backupDestinationDirectory() const; + void setBackupDestinationDirectory(const QString &backupDestinationDirectory); + + int backupMaxCount() const; + void setBackupMaxCount(int backupMaxCount); + ServerConfigurations *tcpServerConfigurations() const; ServerConfigurations *webSocketServerConfigurations() const; WebServerConfigurations *webServerConfigurations() const; @@ -83,10 +92,12 @@ public: ServerConfigurations *mqttServerConfigurations() const; MqttPolicies *mqttPolicies() const; - Q_INVOKABLE ServerConfiguration* createServerConfiguration(const QString &address = "0.0.0.0", int port = 0, bool authEnabled = false, bool sslEnabled = false); - Q_INVOKABLE WebServerConfiguration* createWebServerConfiguration(const QString &address = "0.0.0.0", int port = 0, bool authEnabled = false, bool sslEnabled = false, const QString &publicFolder = QString()); - Q_INVOKABLE TunnelProxyServerConfiguration* createTunnelProxyServerConfiguration(const QString &address, int port, bool authEnabled = true, bool sslEnabled = true, bool ignoreSslErrors = false); - Q_INVOKABLE MqttPolicy* createMqttPolicy() const; + Q_INVOKABLE ServerConfiguration *createServerConfiguration(const QString &address = "0.0.0.0", int port = 0, bool authEnabled = false, bool sslEnabled = false); + Q_INVOKABLE WebServerConfiguration *createWebServerConfiguration( + const QString &address = "0.0.0.0", int port = 0, bool authEnabled = false, bool sslEnabled = false, const QString &publicFolder = QString()); + Q_INVOKABLE TunnelProxyServerConfiguration *createTunnelProxyServerConfiguration( + const QString &address, int port, bool authEnabled = true, bool sslEnabled = true, bool ignoreSslErrors = false); + Q_INVOKABLE MqttPolicy *createMqttPolicy() const; Q_INVOKABLE void setTcpServerConfiguration(ServerConfiguration *configuration); Q_INVOKABLE void setWebSocketServerConfiguration(ServerConfiguration *configuration); @@ -100,7 +111,7 @@ public: Q_INVOKABLE void deleteTunnelProxyServerConfiguration(const QString &id); Q_INVOKABLE void deleteMqttServerConfiguration(const QString &id); - Q_INVOKABLE void updateMqttPolicy(MqttPolicy* policy); + Q_INVOKABLE void updateMqttPolicy(MqttPolicy *policy); Q_INVOKABLE void deleteMqttPolicy(const QString &clientId); void init(); @@ -131,6 +142,8 @@ signals: void fetchingDataChanged(); void debugServerEnabledChanged(); void serverNameChanged(); + void backupDestinationDirectoryChanged(); + void backupMaxCountChanged(); private: JsonRpcClient *m_client = nullptr; @@ -139,13 +152,15 @@ private: bool m_debugServerEnabled = false; QString m_serverName; + QString m_backupDestinationDirectory; + int m_backupMaxCount = 1; + ServerConfigurations *m_tcpServerConfigurations = nullptr; ServerConfigurations *m_webSocketServerConfigurations = nullptr; - WebServerConfigurations* m_webServerConfigurations = nullptr; + WebServerConfigurations *m_webServerConfigurations = nullptr; TunnelProxyServerConfigurations *m_tunnelProxyServerConfigurations = nullptr; ServerConfigurations *m_mqttServerConfigurations = nullptr; MqttPolicies *m_mqttPolicies = nullptr; - }; #endif // NYMEACONFIGURATION_H