diff --git a/libnymea-app/connection/nymeaconnection.h b/libnymea-app/connection/nymeaconnection.h index 288ce46f..b143916c 100644 --- a/libnymea-app/connection/nymeaconnection.h +++ b/libnymea-app/connection/nymeaconnection.h @@ -49,8 +49,8 @@ class NymeaConnection : public QObject { Q_OBJECT Q_PROPERTY(bool connected READ connected NOTIFY connectedChanged) - Q_PROPERTY(NymeaHost* currentHost READ currentHost WRITE setCurrentHost NOTIFY currentHostChanged) - Q_PROPERTY(Connection* currentConnection READ currentConnection NOTIFY currentConnectionChanged) + Q_PROPERTY(NymeaHost *currentHost READ currentHost WRITE setCurrentHost NOTIFY currentHostChanged) + Q_PROPERTY(Connection *currentConnection READ currentConnection NOTIFY currentConnectionChanged) Q_PROPERTY(NymeaConnection::BearerTypes availableBearerTypes READ availableBearerTypes NOTIFY availableBearerTypesChanged) Q_PROPERTY(ConnectionStatus connectionStatus READ connectionStatus NOTIFY connectionStatusChanged) @@ -98,11 +98,10 @@ public: bool connected(); ConnectionStatus connectionStatus() const; - NymeaHost* currentHost() const; + NymeaHost *currentHost() const; void setCurrentHost(NymeaHost *host); - Connection* currentConnection() const; - + Connection *currentConnection() const; void sendData(const QByteArray &data); @@ -134,8 +133,8 @@ private: ConnectionStatus m_connectionStatus = ConnectionStatusUnconnected; NetworkReachabilityMonitor *m_networkReachabilityMonitor = nullptr; - QHash m_transportFactories; - QHash m_transportCandidates; + QHash m_transportFactories; + QHash m_transportCandidates; NymeaTransportInterface *m_currentTransport = nullptr; NymeaHost *m_currentHost = nullptr; Connection *m_preferredConnection = nullptr; diff --git a/libnymea-app/connection/nymeahosts.cpp b/libnymea-app/connection/nymeahosts.cpp index 8789572c..d687e4a6 100644 --- a/libnymea-app/connection/nymeahosts.cpp +++ b/libnymea-app/connection/nymeahosts.cpp @@ -92,12 +92,15 @@ void NymeaHosts::removeHost(NymeaHost *host) { int idx = m_hosts.indexOf(host); if (idx == -1) { - qWarning() << "Cannot remove NymeaHost" << host << "as its nit in the model"; + qWarning() << "Cannot remove NymeaHost" << host << "as its not in the model"; return; } beginRemoveRows(QModelIndex(), idx, idx); m_hosts.takeAt(idx); endRemoveRows(); + + + emit hostRemoved(host); emit countChanged(); } diff --git a/libnymea-app/connection/nymeahosts.h b/libnymea-app/connection/nymeahosts.h index b26cf3d7..83e06e0e 100644 --- a/libnymea-app/connection/nymeahosts.h +++ b/libnymea-app/connection/nymeahosts.h @@ -79,7 +79,7 @@ protected: QHash roleNames() const; private: - QList m_hosts; + QList m_hosts; }; class NymeaHostsFilterModel: public QSortFilterProxyModel @@ -94,10 +94,10 @@ class NymeaHostsFilterModel: public QSortFilterProxyModel public: NymeaHostsFilterModel(QObject *parent = nullptr); - NymeaDiscovery* discovery() const; + NymeaDiscovery *discovery() const; void setDiscovery(NymeaDiscovery *discovery); - JsonRpcClient* jsonRpcClient() const; + JsonRpcClient *jsonRpcClient() const; void setJsonRpcClient(JsonRpcClient* jsonRpcClient); bool showUnreachableBearers() const; diff --git a/libnymea-app/jsonrpc/jsonrpcclient.h b/libnymea-app/jsonrpc/jsonrpcclient.h index 14d6b949..6b5197f8 100644 --- a/libnymea-app/jsonrpc/jsonrpcclient.h +++ b/libnymea-app/jsonrpc/jsonrpcclient.h @@ -77,8 +77,8 @@ public: NymeaConnection::BearerTypes availableBearerTypes() const; NymeaConnection::ConnectionStatus connectionStatus() const; bool connected() const; - NymeaHost* currentHost() const; - Connection* currentConnection() const; + NymeaHost *currentHost() const; + Connection *currentConnection() const; QVariantMap certificateIssuerInfo() const; bool initialSetupRequired() const; bool authenticationRequired() const; @@ -147,8 +147,8 @@ private slots: private: int m_id; // < namespace, method> > - QHash m_notificationHandlerMethods; - QMultiHash m_notificationHandlers; + QHash m_notificationHandlerMethods; + QMultiHash m_notificationHandlers; QHash m_replies; NymeaConnection *m_connection = nullptr; diff --git a/nymea-app/configuredhostsmodel.cpp b/nymea-app/configuredhostsmodel.cpp index 6a2c973b..6144d038 100644 --- a/nymea-app/configuredhostsmodel.cpp +++ b/nymea-app/configuredhostsmodel.cpp @@ -1,6 +1,8 @@ #include "configuredhostsmodel.h" +#include #include +#include #include Q_DECLARE_LOGGING_CATEGORY(dcApplication) @@ -99,12 +101,55 @@ void ConfiguredHostsModel::removeHost(int index) qCWarning(dcApplication()) << "Cannot remove connection at index" << index; return; } + beginRemoveRows(QModelIndex(), index, index); - m_list.takeAt(index)->deleteLater(); + + ConfiguredHost *host = m_list.takeAt(index); + qCDebug(dcApplication()) << "Remove configured host" << host->name() << host->uuid().toString(); + + QSettings settings; + + QString hostUuidString = host->uuid().toString(); + + qCDebug(dcApplication()) << "-> Remove stored token"; + settings.beginGroup("jsonTokens"); + if (settings.contains(hostUuidString)) { + settings.remove(hostUuidString); + } + settings.endGroup(); + + qCDebug(dcApplication()) << "-> Remove cached hosts"; + settings.beginGroup("HostCache"); + settings.beginGroup(hostUuidString); + settings.remove(""); + settings.endGroup(); + settings.endGroup(); + + qCDebug(dcApplication()) << "-> Remove host settings"; + settings.beginGroup(hostUuidString); + settings.remove(""); + settings.endGroup(); + + QDir dir(QStandardPaths::writableLocation(QStandardPaths::DataLocation) + "/sslcerts/"); + QFile certFile(dir.absoluteFilePath(hostUuidString.remove(QRegExp("[{}]")) + ".pem")); + if (certFile.exists()) { + if (!certFile.remove()) { + qCWarning(dcApplication()) << "Failed to remove certificate file" << certFile.fileName() << certFile.errorString(); + } else { + qCDebug(dcApplication()) << "-> Removed successfully host certificate" << certFile.fileName(); + } + } else { + qCDebug(dcApplication()) << "-> No certificated stored for this host"; + } + + host->deleteLater(); + saveToDisk(); + endRemoveRows(); emit countChanged(); + if (m_list.isEmpty()) { createHost(); } diff --git a/nymea-app/configuredhostsmodel.h b/nymea-app/configuredhostsmodel.h index e24ab108..b5caee49 100644 --- a/nymea-app/configuredhostsmodel.h +++ b/nymea-app/configuredhostsmodel.h @@ -12,7 +12,7 @@ class ConfiguredHost: public QObject Q_OBJECT Q_PROPERTY(QUuid uuid READ uuid WRITE setUuid NOTIFY uuidChanged) Q_PROPERTY(QString name READ name NOTIFY nameChanged) - Q_PROPERTY(Engine* engine READ engine CONSTANT) + Q_PROPERTY(Engine *engine READ engine CONSTANT) public: ConfiguredHost(const QUuid &uuid = QUuid(), QObject *parent = nullptr); @@ -57,8 +57,8 @@ public: void setCurrentIndex(int currentIndex); Q_INVOKABLE int indexOf(ConfiguredHost *host) const; - Q_INVOKABLE ConfiguredHost* get(int index) const; - Q_INVOKABLE ConfiguredHost* createHost(); + Q_INVOKABLE ConfiguredHost *get(int index) const; + Q_INVOKABLE ConfiguredHost *createHost(); Q_INVOKABLE void removeHost(int index); Q_INVOKABLE void move(int from, int to); @@ -72,7 +72,7 @@ private: void saveToDisk(); private: - QList m_list; + QList m_list; int m_currentIndex = 0; }; @@ -85,13 +85,13 @@ class ConfiguredHostsProxyModel: public QSortFilterProxyModel public: ConfiguredHostsProxyModel(QObject *parent = nullptr); - ConfiguredHostsModel* model() const; + ConfiguredHostsModel *model() const; void setModel(ConfiguredHostsModel *model); QUuid currentHost() const; void setCurrentHost(const QUuid ¤tHost); - Q_INVOKABLE ConfiguredHost* get(int index) const; + Q_INVOKABLE ConfiguredHost *get(int index) const; signals: void modelChanged();