Merge PR #245: Use a more unique nonce for the remote connection

This commit is contained in:
Jenkins nymea 2020-01-22 23:47:15 +01:00
commit f82bc6949c

View File

@ -416,11 +416,18 @@ void AWSConnector::onPublishReceived(const QString &topic, const QByteArray &pay
storeSyncedNameCache(m_clientName); storeSyncedNameCache(m_clientName);
} }
} else if (topic.startsWith(QString("%1/").arg(m_clientId)) && topic.contains("proxy")) { } else if (topic.startsWith(QString("%1/").arg(m_clientId)) && topic.contains("proxy")) {
QString token = jsonDoc.toVariant().toMap().value("token").toString(); QVariantMap payload = jsonDoc.toVariant().toMap();
QString timestamp = jsonDoc.toVariant().toMap().value("timestamp").toString(); QString token = payload.value("token").toString();
QString serverUrl = jsonDoc.toVariant().toMap().value("serverUrl").toString(); QString nonce;
// Backwards compatibility. Old protocol spec had "timestamp", keeping it for a while for backwards compatiblity
if (payload.contains("nonce")) {
nonce = payload.value("nonce").toString();
} else {
nonce = payload.value("timestamp").toString();
}
QString serverUrl = payload.value("serverUrl").toString();
static QHash<QString, QDateTime> dupes; static QHash<QString, QDateTime> dupes;
QString packetId = topic + token + timestamp; QString packetId = topic + token + nonce;
if (dupes.contains(packetId)) { if (dupes.contains(packetId)) {
qCDebug(dcAWS()) << "Dropping duplicate packet"; qCDebug(dcAWS()) << "Dropping duplicate packet";
return; return;
@ -432,7 +439,7 @@ void AWSConnector::onPublishReceived(const QString &topic, const QByteArray &pay
} }
} }
qCDebug(dcAWS) << "Proxy remote connection request received"; qCDebug(dcAWS) << "Proxy remote connection request received";
proxyConnectionRequestReceived(token, timestamp, serverUrl); proxyConnectionRequestReceived(token, nonce, serverUrl);
} else if (topic == QString("%1/notify/response").arg(m_clientId)) { } else if (topic == QString("%1/notify/response").arg(m_clientId)) {
int transactionId = jsonDoc.toVariant().toMap().value("id").toInt(); int transactionId = jsonDoc.toVariant().toMap().value("id").toInt();
int status = jsonDoc.toVariant().toMap().value("status").toInt(); int status = jsonDoc.toVariant().toMap().value("status").toInt();