Merge PR #293: Use a more unique nonce for the remote connection
This commit is contained in:
commit
6c3c3ccacf
@ -846,7 +846,7 @@ bool AWSClient::tokensExpired() const
|
|||||||
return (m_accessTokenExpiry.addSecs(-10) < QDateTime::currentDateTime()) || (m_sessionTokenExpiry.addSecs(-10) < QDateTime::currentDateTime());
|
return (m_accessTokenExpiry.addSecs(-10) < QDateTime::currentDateTime()) || (m_sessionTokenExpiry.addSecs(-10) < QDateTime::currentDateTime());
|
||||||
}
|
}
|
||||||
|
|
||||||
bool AWSClient::postToMQTT(const QString &coreId, const QString ×tamp, QObject* sender, std::function<void (bool)> callback)
|
bool AWSClient::postToMQTT(const QString &coreId, const QString &nonce, QObject* sender, std::function<void (bool)> callback)
|
||||||
{
|
{
|
||||||
if (!isLoggedIn()) {
|
if (!isLoggedIn()) {
|
||||||
qWarning() << "Cannot post to MQTT. Not logged in to AWS";
|
qWarning() << "Cannot post to MQTT. Not logged in to AWS";
|
||||||
@ -855,7 +855,7 @@ bool AWSClient::postToMQTT(const QString &coreId, const QString ×tamp, QObj
|
|||||||
if (tokensExpired()) {
|
if (tokensExpired()) {
|
||||||
qDebug() << "Cannot post to MQTT. Need to refresh the tokens first";
|
qDebug() << "Cannot post to MQTT. Need to refresh the tokens first";
|
||||||
refreshAccessToken();
|
refreshAccessToken();
|
||||||
QueuedCall::enqueue(m_callQueue, QueuedCall("postToMQTT", coreId, timestamp, sender, callback));
|
QueuedCall::enqueue(m_callQueue, QueuedCall("postToMQTT", coreId, nonce, sender, callback));
|
||||||
return true; // So far it looks we're doing ok... let's return true
|
return true; // So far it looks we're doing ok... let's return true
|
||||||
}
|
}
|
||||||
QString topic = QString("%1/%2/proxy").arg(coreId).arg(QString(m_identityId));
|
QString topic = QString("%1/%2/proxy").arg(coreId).arg(QString(m_identityId));
|
||||||
@ -873,7 +873,9 @@ bool AWSClient::postToMQTT(const QString &coreId, const QString ×tamp, QObj
|
|||||||
|
|
||||||
QVariantMap params;
|
QVariantMap params;
|
||||||
params.insert("token", m_idToken);
|
params.insert("token", m_idToken);
|
||||||
params.insert("timestamp", timestamp);
|
params.insert("nonce", nonce);
|
||||||
|
// FIXME: Old (nymea < 0.18) protocol spec had "timestamp" instead of "nonce", keeping it for backwards compatibility for a bit
|
||||||
|
params.insert("timestamp", nonce);
|
||||||
QByteArray payload = QJsonDocument::fromVariant(params).toJson(QJsonDocument::Compact);
|
QByteArray payload = QJsonDocument::fromVariant(params).toJson(QJsonDocument::Compact);
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -121,7 +121,7 @@ public:
|
|||||||
|
|
||||||
Q_INVOKABLE void fetchDevices();
|
Q_INVOKABLE void fetchDevices();
|
||||||
|
|
||||||
Q_INVOKABLE bool postToMQTT(const QString &coreId, const QString ×tamp, QObject* sender, std::function<void(bool)> callback);
|
Q_INVOKABLE bool postToMQTT(const QString &coreId, const QString &nonce, QObject* sender, std::function<void(bool)> callback);
|
||||||
Q_INVOKABLE void getId();
|
Q_INVOKABLE void getId();
|
||||||
|
|
||||||
Q_INVOKABLE void registerPushNotificationEndpoint(const QString ®istrationId, const QString &deviceDisplayName, const QString mobileDeviceId, const QString &mobileDeviceManufacturer, const QString &mobileDeviceModel);
|
Q_INVOKABLE void registerPushNotificationEndpoint(const QString ®istrationId, const QString &deviceDisplayName, const QString mobileDeviceId, const QString &mobileDeviceManufacturer, const QString &mobileDeviceModel);
|
||||||
|
|||||||
@ -30,7 +30,7 @@ CloudTransport::CloudTransport(AWSClient *awsClient, QObject *parent):
|
|||||||
|
|
||||||
QObject::connect(m_remoteproxyConnection, &RemoteProxyConnection::ready, this,[this]() {
|
QObject::connect(m_remoteproxyConnection, &RemoteProxyConnection::ready, this,[this]() {
|
||||||
qDebug() << "Proxy ready. Authenticating channel.";
|
qDebug() << "Proxy ready. Authenticating channel.";
|
||||||
m_remoteproxyConnection->authenticate(m_awsClient->idToken(), QString::number(m_timestamp.toMSecsSinceEpoch()));
|
m_remoteproxyConnection->authenticate(m_awsClient->idToken(), m_nonce);
|
||||||
});
|
});
|
||||||
QObject::connect(m_remoteproxyConnection, &RemoteProxyConnection::dataReady, this, [this](const QByteArray &data) {
|
QObject::connect(m_remoteproxyConnection, &RemoteProxyConnection::dataReady, this, [this](const QByteArray &data) {
|
||||||
emit dataReady(data);
|
emit dataReady(data);
|
||||||
@ -52,8 +52,8 @@ bool CloudTransport::connect(const QUrl &url)
|
|||||||
qDebug() << "Connecting to" << url;
|
qDebug() << "Connecting to" << url;
|
||||||
m_url = url;
|
m_url = url;
|
||||||
|
|
||||||
m_timestamp = QDateTime::currentDateTime();
|
m_nonce = QUuid::createUuid().toString();
|
||||||
bool postResult = m_awsClient->postToMQTT(url.host(), QString::number(m_timestamp.toMSecsSinceEpoch()), QPointer<QObject>(this), [this](bool success) {
|
bool postResult = m_awsClient->postToMQTT(url.host(), m_nonce, QPointer<QObject>(this), [this](bool success) {
|
||||||
if (success) {
|
if (success) {
|
||||||
qDebug() << "MQTT Post done. Connecting to remote proxy";
|
qDebug() << "MQTT Post done. Connecting to remote proxy";
|
||||||
m_remoteproxyConnection->connectServer(QUrl("wss://remoteproxy.nymea.io"));
|
m_remoteproxyConnection->connectServer(QUrl("wss://remoteproxy.nymea.io"));
|
||||||
|
|||||||
@ -36,7 +36,7 @@ private:
|
|||||||
QUrl m_url;
|
QUrl m_url;
|
||||||
AWSClient *m_awsClient = nullptr;
|
AWSClient *m_awsClient = nullptr;
|
||||||
remoteproxyclient::RemoteProxyConnection *m_remoteproxyConnection = nullptr;
|
remoteproxyclient::RemoteProxyConnection *m_remoteproxyConnection = nullptr;
|
||||||
QDateTime m_timestamp;
|
QString m_nonce;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // CLOUDTRANSPORT_H
|
#endif // CLOUDTRANSPORT_H
|
||||||
|
|||||||
Reference in New Issue
Block a user