From 699065f68939edd7eb3b76e7ef3ff131158047c4 Mon Sep 17 00:00:00 2001 From: Michael Zanetti Date: Sat, 1 Sep 2018 01:20:30 +0200 Subject: [PATCH] update to use nonce --- libnymea-core/cloud/awsconnector.cpp | 6 +++--- libnymea-core/cloud/awsconnector.h | 2 +- libnymea-core/cloud/cloudtransport.cpp | 5 +++-- libnymea-core/cloud/cloudtransport.h | 3 ++- 4 files changed, 9 insertions(+), 7 deletions(-) diff --git a/libnymea-core/cloud/awsconnector.cpp b/libnymea-core/cloud/awsconnector.cpp index 0e50f51f..980fcfac 100644 --- a/libnymea-core/cloud/awsconnector.cpp +++ b/libnymea-core/cloud/awsconnector.cpp @@ -468,9 +468,9 @@ void AWSConnector::onSubscriptionReceived(const QMQTT::Message &message) // silently drop our own things (should not be subscribed to that in the first place) } else if (topic.startsWith(QString("%1/eu-west-1:").arg(m_clientId)) && topic.contains("proxy")) { QString token = jsonDoc.toVariant().toMap().value("token").toString(); - qlonglong timestamp = jsonDoc.toVariant().toMap().value("timestamp").toLongLong(); + QString timestamp = jsonDoc.toVariant().toMap().value("timestamp").toString(); static QHash dupes; - QString packetId = topic + token + QString::number(timestamp); + QString packetId = topic + token + timestamp; if (dupes.contains(packetId)) { qCDebug(dcAWS()) << "Dropping duplicate packet"; return; @@ -482,7 +482,7 @@ void AWSConnector::onSubscriptionReceived(const QMQTT::Message &message) } } qCDebug(dcAWS) << "Proxy remote connection request received"; - proxyConnectionRequestReceived(token); + proxyConnectionRequestReceived(token, timestamp); } else if (topic == QString("%1/notify/response").arg(m_clientId)) { int transactionId = jsonDoc.toVariant().toMap().value("id").toInt(); int status = jsonDoc.toVariant().toMap().value("status").toInt(); diff --git a/libnymea-core/cloud/awsconnector.h b/libnymea-core/cloud/awsconnector.h index 1b4f3171..817e36cb 100644 --- a/libnymea-core/cloud/awsconnector.h +++ b/libnymea-core/cloud/awsconnector.h @@ -64,7 +64,7 @@ signals: void pushNotificationSent(int id, int status); void turnCredentialsReceived(const QVariantMap &turnCredentials); - void proxyConnectionRequestReceived(const QString &token); + void proxyConnectionRequestReceived(const QString &token, const QString &nonce); private slots: void doConnect(); diff --git a/libnymea-core/cloud/cloudtransport.cpp b/libnymea-core/cloud/cloudtransport.cpp index 61ccb1eb..5ceca374 100644 --- a/libnymea-core/cloud/cloudtransport.cpp +++ b/libnymea-core/cloud/cloudtransport.cpp @@ -65,13 +65,14 @@ bool CloudTransport::stopServer() return true; } -void CloudTransport::connectToCloud(const QString &token) +void CloudTransport::connectToCloud(const QString &token, const QString &nonce) { qCDebug(dcCloud()) << "Connecting to remote proxy server" << m_proxyUrl.toString(); ConnectionContext context; context.clientId = QUuid::createUuid(); context.token = token; + context.nonce = nonce; QString identifier = QString("nymea:core (%1)").arg(NymeaCore::instance()->configuration()->serverName()); context.proxyConnection = new RemoteProxyConnection(NymeaCore::instance()->configuration()->serverUuid().toString(), identifier, this); m_connections.insert(context.proxyConnection, context); @@ -110,7 +111,7 @@ void CloudTransport::transportReady() proxyConnection->proxyServerVersion() << "API version:" << proxyConnection->proxyServerApiVersion(); ConnectionContext context = m_connections.value(proxyConnection); - context.proxyConnection->authenticate(context.token); + context.proxyConnection->authenticate(context.token, context.nonce); } void CloudTransport::transportDataReady(const QByteArray &data) diff --git a/libnymea-core/cloud/cloudtransport.h b/libnymea-core/cloud/cloudtransport.h index 686050cc..d9ea8302 100644 --- a/libnymea-core/cloud/cloudtransport.h +++ b/libnymea-core/cloud/cloudtransport.h @@ -42,7 +42,7 @@ public: signals: public slots: - void connectToCloud(const QString &token); + void connectToCloud(const QString &token, const QString &nonce); void remoteConnectionStateChanged(remoteproxyclient::RemoteProxyConnection::State state); private slots: @@ -56,6 +56,7 @@ private: public: QUuid clientId; QString token; + QString nonce; remoteproxyclient::RemoteProxyConnection* proxyConnection; }; QHash m_connections;