From b873d1174ee1fe813927a3c3f5b44d7a89d572e3 Mon Sep 17 00:00:00 2001 From: tobtoht Date: Fri, 4 Mar 2022 13:30:26 +0100 Subject: [PATCH] Warn if wallet file was not created with Feather --- src/WindowManager.cpp | 22 ++++++++++++++++++---- src/libwalletqt/Wallet.cpp | 4 ++++ src/libwalletqt/Wallet.h | 1 + src/libwalletqt/WalletManager.cpp | 2 +- 4 files changed, 24 insertions(+), 5 deletions(-) diff --git a/src/WindowManager.cpp b/src/WindowManager.cpp index d0eb903..a1e87a7 100644 --- a/src/WindowManager.cpp +++ b/src/WindowManager.cpp @@ -158,17 +158,21 @@ void WindowManager::tryOpenWallet(const QString &path, const QString &password) } void WindowManager::onWalletOpened(Wallet *wallet) { - if (wallet->status() != Wallet::Status_Ok) { + auto status = wallet->status(); + if (status != Wallet::Status_Ok) { QString errMsg = wallet->errorString(); - if (wallet->status() == Wallet::Status_BadPassword) { + QString keysPath = wallet->keysPath(); + QString cachePath = wallet->cachePath(); + wallet->deleteLater(); + if (status == Wallet::Status_BadPassword) { // Don't show incorrect password when we try with empty password for the first time bool showIncorrectPassword = m_openWalletTriedOnce; m_openWalletTriedOnce = true; - this->onWalletOpenPasswordRequired(showIncorrectPassword, wallet->keysPath()); + this->onWalletOpenPasswordRequired(showIncorrectPassword, keysPath); } else if (errMsg == QString("basic_string::_M_replace_aux") || errMsg == QString("std::bad_alloc")) { qCritical() << errMsg; - WalletManager::clearWalletCache(wallet->cachePath()); // TODO: check this + WalletManager::clearWalletCache(cachePath); errMsg = QString("%1\n\nAttempted to clean wallet cache. Please restart Feather.").arg(errMsg); this->handleWalletError(errMsg); } else { @@ -179,6 +183,16 @@ void WindowManager::onWalletOpened(Wallet *wallet) { this->onInitialNetworkConfigured(); + if (!wallet->cacheAttributeExists("feather.xmrig_password") && !wallet->cacheAttributeExists("feather.created")) { + auto result = QMessageBox::question(nullptr, "Foreign wallet", + "This wallet file was not created with Feather. This may cause unexpected behavior. Please restore your wallet from seed.\n\nOpen this wallet anyway?"); + if (result == QMessageBox::No) { + wallet->deleteLater(); + this->initWizard(); + return; + } + } + // Create new mainwindow with wallet m_splashDialog->hide(); diff --git a/src/libwalletqt/Wallet.cpp b/src/libwalletqt/Wallet.cpp index 0b0708d..0a125b0 100644 --- a/src/libwalletqt/Wallet.cpp +++ b/src/libwalletqt/Wallet.cpp @@ -958,6 +958,10 @@ QString Wallet::integratedAddress(const QString &paymentId) const return QString::fromStdString(m_walletImpl->integratedAddress(paymentId.toStdString())); } +bool Wallet::cacheAttributeExists(const QString &key) { + return m_walletImpl->cacheAttributeExists(key.toStdString()); +} + QString Wallet::getCacheAttribute(const QString &key) const { return QString::fromStdString(m_walletImpl->getCacheAttribute(key.toStdString())); } diff --git a/src/libwalletqt/Wallet.h b/src/libwalletqt/Wallet.h index ff14309..19ec685 100644 --- a/src/libwalletqt/Wallet.h +++ b/src/libwalletqt/Wallet.h @@ -394,6 +394,7 @@ public: QString make_uri(const QString &address, quint64 &amount, const QString &description, const QString &recipient) const; //! Namespace your cacheAttribute keys to avoid collisions + bool cacheAttributeExists(const QString &key); bool setCacheAttribute(const QString &key, const QString &val); QString getCacheAttribute(const QString &key) const; diff --git a/src/libwalletqt/WalletManager.cpp b/src/libwalletqt/WalletManager.cpp index 6b3adb7..8141c73 100644 --- a/src/libwalletqt/WalletManager.cpp +++ b/src/libwalletqt/WalletManager.cpp @@ -290,7 +290,7 @@ bool WalletManager::clearWalletCache(const QString &wallet_path) // create unique file name for (int i = 1; QFile::exists(newFileName); i++) { - newFileName = QString("%1%2.%3").arg(fileName).arg(suffix).arg(i); + newFileName = QString("%1%2.%3").arg(fileName, suffix, QString::number(i)); } return walletCache.rename(newFileName);