diff --git a/src/browser/BrowserAction.cpp b/src/browser/BrowserAction.cpp index a303df7a5..70b301fda 100644 --- a/src/browser/BrowserAction.cpp +++ b/src/browser/BrowserAction.cpp @@ -149,6 +149,16 @@ QJsonObject BrowserAction::handleGetDatabaseHash(const QJsonObject& json, const QJsonObject message = buildMessage(newNonce); message["hash"] = hash; + + // Update a legacy database hash if found + const QJsonArray hashes = decrypted.value("connectedKeys").toArray(); + if (!hashes.isEmpty()) { + const QString legacyHash = getLegacyDatabaseHash(); + if (hashes.contains(legacyHash)) { + message["oldHash"] = legacyHash; + } + } + return buildResponse(action, message, newNonce); } @@ -528,6 +538,17 @@ QString BrowserAction::getReturnValue(const BrowserService::ReturnValue returnVa } QString BrowserAction::getDatabaseHash() +{ + QMutexLocker locker(&m_mutex); + QByteArray hash = + QCryptographicHash::hash( + m_browserService.getDatabaseRootUuid().toUtf8(), + QCryptographicHash::Sha256) + .toHex(); + return QString(hash); +} + +QString BrowserAction::getLegacyDatabaseHash() { QMutexLocker locker(&m_mutex); QByteArray hash = diff --git a/src/browser/BrowserAction.h b/src/browser/BrowserAction.h index c1d6795eb..a8af0915e 100644 --- a/src/browser/BrowserAction.h +++ b/src/browser/BrowserAction.h @@ -75,6 +75,7 @@ private: QString getErrorMessage(const int errorCode) const; QString getReturnValue(const BrowserService::ReturnValue returnValue) const; QString getDatabaseHash(); + QString getLegacyDatabaseHash(); QString encryptMessage(const QJsonObject& message, const QString& nonce); QJsonObject decryptMessage(const QString& message, const QString& nonce);