/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright (C) 2016 Simon Stürz * * * * This file is part of nymea. * * * * nymea is free software: you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation, version 2 of the License. * * * * nymea is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with nymea. If not, see . * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #ifndef NYMEACONFIGURATION_H #define NYMEACONFIGURATION_H #include #include #include #include #include namespace nymeaserver { class ServerConfiguration { Q_GADGET Q_PROPERTY(QString id MEMBER id) Q_PROPERTY(QString address READ addressString WRITE setAddress) Q_PROPERTY(uint port MEMBER port) Q_PROPERTY(bool sslEnabled MEMBER sslEnabled) Q_PROPERTY(bool authenticationEnabled MEMBER authenticationEnabled) public: QString id; QHostAddress address; QString addressString() { return address.toString(); } void setAddress(const QString &addressString) {address = QHostAddress(addressString); } uint port = 0; bool sslEnabled = true; bool authenticationEnabled = true; bool operator==(const ServerConfiguration &other) const { return id == other.id && address == other.address && port == other.port && sslEnabled == other.sslEnabled && authenticationEnabled == other.authenticationEnabled; } }; QDebug operator <<(QDebug debug, const ServerConfiguration &configuration); class WebServerConfiguration: public ServerConfiguration { Q_GADGET Q_PROPERTY(QString publicFolder MEMBER publicFolder) public: QString publicFolder; bool restServerEnabled = false; }; class MqttPolicy { Q_GADGET Q_PROPERTY(QString clientId MEMBER clientId) Q_PROPERTY(QString username MEMBER username) Q_PROPERTY(QString password MEMBER password) Q_PROPERTY(QStringList allowedPublishTopicFilters MEMBER allowedPublishTopicFilters) Q_PROPERTY(QStringList allowedSubscribeTopicFilters MEMBER allowedSubscribeTopicFilters) public: QString clientId; QString username; QString password; QStringList allowedSubscribeTopicFilters; QStringList allowedPublishTopicFilters; }; typedef QList MqttPolicies; class NymeaConfiguration : public QObject { Q_OBJECT public: enum ConfigurationError { ConfigurationErrorNoError, ConfigurationErrorInvalidTimeZone, ConfigurationErrorInvalidStationName, ConfigurationErrorInvalidId, ConfigurationErrorInvalidPort, ConfigurationErrorInvalidHostAddress, ConfigurationErrorBluetoothHardwareNotAvailable, ConfigurationErrorInvalidCertificate }; Q_ENUM(ConfigurationError) explicit NymeaConfiguration(QObject *parent = nullptr); // Global settings QUuid serverUuid() const; QString serverName() const; void setServerName(const QString &serverName); QByteArray timeZone() const; void setTimeZone(const QByteArray &timeZone); QLocale locale() const; void setLocale(const QLocale &locale); QString sslCertificate() const; QString sslCertificateKey() const; void setSslCertificate(const QString &sslCertificate, const QString &sslCertificateKey); // Debug server bool debugServerEnabled() const; void setDebugServerEnabled(bool enabled); // TCP server QHash tcpServerConfigurations() const; void setTcpServerConfiguration(const ServerConfiguration &config); void removeTcpServerConfiguration(const QString &id); // Web server QHash webServerConfigurations() const; void setWebServerConfiguration(const WebServerConfiguration &config); void removeWebServerConfiguration(const QString &id); // Websocket QHash webSocketServerConfigurations() const; void setWebSocketServerConfiguration(const ServerConfiguration &config); void removeWebSocketServerConfiguration(const QString &id); // MQTT QHash mqttServerConfigurations() const; void setMqttServerConfiguration(const ServerConfiguration &config); void removeMqttServerConfiguration(const QString &id); QHash mqttPolicies() const; void updateMqttPolicy(const MqttPolicy &policy); bool removeMqttPolicy(const QString &clientId); // Bluetooth bool bluetoothServerEnabled() const; void setBluetoothServerEnabled(bool enabled); // Cloud bool cloudEnabled() const; void setCloudEnabled(bool enabled); QString cloudServerUrl() const; void setCloudServerUrl(const QString &cloudServerUrl); QString cloudCertificateCA() const; void setCloudCertificateCA(const QString &cloudCertificateCA); QString cloudCertificate() const; void setCloudCertificate(const QString &cloudCertificate); QString cloudCertificateKey() const; void setCloudCertificateKey(const QString &cloudCertificateKey); // Logging QString logDBDriver() const; QString logDBName() const; QString logDBHost() const; QString logDBUser() const; QString logDBPassword() const; int logDBMaxEntries() const; private: QHash m_tcpServerConfigs; QHash m_webServerConfigs; QHash m_webSocketServerConfigs; QHash m_mqttServerConfigs; QHash m_mqttPolicies; void setServerUuid(const QUuid &uuid); void setWebServerPublicFolder(const QString & path); QString defaultWebserverPublicFolderPath() const; void storeServerConfig(const QString &group, const ServerConfiguration &config); ServerConfiguration readServerConfig(const QString &group, const QString &id); void deleteServerConfig(const QString &group, const QString &id); void storeWebServerConfig(const WebServerConfiguration &config); WebServerConfiguration readWebServerConfig(const QString &id); void storeMqttPolicy(const MqttPolicy &policy); MqttPolicy readMqttPolicy(const QString &clientId); void deleteMqttPolicy(const QString &clientId); signals: void serverNameChanged(const QString &serverName); void timeZoneChanged(); void localeChanged(); void tcpServerConfigurationChanged(const QString &configId); void tcpServerConfigurationRemoved(const QString &configId); void webServerConfigurationChanged(const QString &configId); void webServerConfigurationRemoved(const QString &configId); void webSocketServerConfigurationChanged(const QString &configId); void webSocketServerConfigurationRemoved(const QString &configId); void mqttServerConfigurationChanged(const QString &configId); void mqttServerConfigurationRemoved(const QString &configId); void mqttPolicyChanged(const QString &clientId); void mqttPolicyRemoved(const QString &clientId); void bluetoothServerEnabledChanged(); void mqttBrokerEnabledChanged(); void mqttPortChanged(); void cloudEnabledChanged(bool enabled); void debugServerEnabledChanged(bool enabled); }; } Q_DECLARE_METATYPE(nymeaserver::ServerConfiguration) Q_DECLARE_METATYPE(nymeaserver::MqttPolicy) #endif // NYMEACONFIGURATION_H