aboutsummaryrefslogtreecommitdiff
path: root/src/libwalletqt/WalletManager.cpp
diff options
context:
space:
mode:
authorluigi1111 <luigi1111w@gmail.com>2020-04-17 20:45:24 -0500
committerluigi1111 <luigi1111w@gmail.com>2020-04-17 20:45:24 -0500
commit4a7a98034e12450f1f4f5f8e30f62a582dcbfcec (patch)
tree108de1b37fc79928f134516b990cf9f3e301aefe /src/libwalletqt/WalletManager.cpp
parent79f78f48e2d14b2f58b1d0a95d989a081eb9392f (diff)
parentea25b71ca66a7d81203bbfed7fa1a1d6fa79553f (diff)
downloadmonzero-gui-4a7a98034e12450f1f4f5f8e30f62a582dcbfcec.tar.gz
monzero-gui-4a7a98034e12450f1f4f5f8e30f62a582dcbfcec.tar.xz
monzero-gui-4a7a98034e12450f1f4f5f8e30f62a582dcbfcec.zip
Merge pull request #2832
ea25b71 updater: fetch signed hashes from getmonero.org, verify downloads (xiphon)
Diffstat (limited to 'src/libwalletqt/WalletManager.cpp')
-rw-r--r--src/libwalletqt/WalletManager.cpp28
1 files changed, 25 insertions, 3 deletions
diff --git a/src/libwalletqt/WalletManager.cpp b/src/libwalletqt/WalletManager.cpp
index 01faf905..ed4f5776 100644
--- a/src/libwalletqt/WalletManager.cpp
+++ b/src/libwalletqt/WalletManager.cpp
@@ -41,6 +41,8 @@
#include <QMutexLocker>
#include <QString>
+#include "qt/updater.h"
+
class WalletPassphraseListenerImpl : public Monero::WalletListener
{
public:
@@ -464,11 +466,31 @@ bool WalletManager::saveQrCode(const QString &code, const QString &path) const
void WalletManager::checkUpdatesAsync(const QString &software, const QString &subdir)
{
m_scheduler.run([this, software, subdir] {
- emit checkUpdatesComplete(checkUpdates(software, subdir));
- });
-}
+ const auto updateInfo = Monero::WalletManager::checkUpdates(software.toStdString(), subdir.toStdString());
+ if (!std::get<0>(updateInfo))
+ {
+ return;
+ }
+
+ const QString version = QString::fromStdString(std::get<1>(updateInfo));
+ const QByteArray hashFromDns = QByteArray::fromHex(QString::fromStdString(std::get<2>(updateInfo)).toUtf8());
+ const QString downloadUrl = QString::fromStdString(std::get<4>(updateInfo));
+ try
+ {
+ const QString binaryFilename = QUrl(downloadUrl).fileName();
+ QPair<QString, QString> signers;
+ const QString signedHash = Updater().fetchSignedHash(binaryFilename, hashFromDns, signers).toHex();
+ qInfo() << "Update found" << version << downloadUrl << "hash" << signedHash << "signed by" << signers;
+ emit checkUpdatesComplete(version, downloadUrl, signedHash, signers.first, signers.second);
+ }
+ catch (const std::exception &e)
+ {
+ qCritical() << "Failed to fetch and verify signed hash:" << e.what();
+ }
+ });
+}
QString WalletManager::checkUpdates(const QString &software, const QString &subdir) const
{