Warn if wallet file was not created with Feather

This commit is contained in:
tobtoht 2022-03-04 13:30:26 +01:00
parent 6903609e8b
commit b873d1174e
No known key found for this signature in database
GPG key ID: 1CADD27F41F45C3C
4 changed files with 24 additions and 5 deletions

View file

@ -158,17 +158,21 @@ void WindowManager::tryOpenWallet(const QString &path, const QString &password)
} }
void WindowManager::onWalletOpened(Wallet *wallet) { void WindowManager::onWalletOpened(Wallet *wallet) {
if (wallet->status() != Wallet::Status_Ok) { auto status = wallet->status();
if (status != Wallet::Status_Ok) {
QString errMsg = wallet->errorString(); 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 // Don't show incorrect password when we try with empty password for the first time
bool showIncorrectPassword = m_openWalletTriedOnce; bool showIncorrectPassword = m_openWalletTriedOnce;
m_openWalletTriedOnce = true; 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")) { else if (errMsg == QString("basic_string::_M_replace_aux") || errMsg == QString("std::bad_alloc")) {
qCritical() << errMsg; 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); errMsg = QString("%1\n\nAttempted to clean wallet cache. Please restart Feather.").arg(errMsg);
this->handleWalletError(errMsg); this->handleWalletError(errMsg);
} else { } else {
@ -179,6 +183,16 @@ void WindowManager::onWalletOpened(Wallet *wallet) {
this->onInitialNetworkConfigured(); 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 // Create new mainwindow with wallet
m_splashDialog->hide(); m_splashDialog->hide();

View file

@ -958,6 +958,10 @@ QString Wallet::integratedAddress(const QString &paymentId) const
return QString::fromStdString(m_walletImpl->integratedAddress(paymentId.toStdString())); 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 { QString Wallet::getCacheAttribute(const QString &key) const {
return QString::fromStdString(m_walletImpl->getCacheAttribute(key.toStdString())); return QString::fromStdString(m_walletImpl->getCacheAttribute(key.toStdString()));
} }

View file

@ -394,6 +394,7 @@ public:
QString make_uri(const QString &address, quint64 &amount, const QString &description, const QString &recipient) const; QString make_uri(const QString &address, quint64 &amount, const QString &description, const QString &recipient) const;
//! Namespace your cacheAttribute keys to avoid collisions //! Namespace your cacheAttribute keys to avoid collisions
bool cacheAttributeExists(const QString &key);
bool setCacheAttribute(const QString &key, const QString &val); bool setCacheAttribute(const QString &key, const QString &val);
QString getCacheAttribute(const QString &key) const; QString getCacheAttribute(const QString &key) const;

View file

@ -290,7 +290,7 @@ bool WalletManager::clearWalletCache(const QString &wallet_path)
// create unique file name // create unique file name
for (int i = 1; QFile::exists(newFileName); i++) { 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); return walletCache.rename(newFileName);