From 1f7b8186f06fe6807e107b0ebe5e24c3551a54fd Mon Sep 17 00:00:00 2001 From: fekt Date: Thu, 3 Nov 2022 14:17:00 -0400 Subject: [PATCH] Properly close app on welcome back cancel --- src/mainwindow.cpp | 99 ++++++++++++++++++++++++---------------------- 1 file changed, 52 insertions(+), 47 deletions(-) diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index 51625e0..546f9fa 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -388,11 +388,14 @@ void MainWindow::closeEvent(QCloseEvent* event) { s.sync(); // Let the RPC know to shut down any running service. - rpc->shutdownhushd(); - int passphraselenght = DataStore::getChatDataStore()->getPassword().length(); + if(rpc){ + rpc->shutdownhushd(); + } + + int passphraselength = DataStore::getChatDataStore()->getPassword().length(); // Check is encryption is ON for SDl - if(passphraselenght > 0) { + if(passphraselength > 0) { // delete old file before //auto dirHome = QDir(QStandardPaths::writableLocation(QStandardPaths::HomeLocation)); @@ -631,25 +634,28 @@ void MainWindow::removeWalletEncryption() { void MainWindow::removeWalletEncryptionStartUp() { qDebug() << __func__ << ": removing wallet encryption"; - QDialog d(this); + QDialog d(this); Ui_startup ed; ed.setupUi(&d); - QObject::connect(ed.new_restore, &QPushButton::clicked, [&] { + // Connect cancel button to close app on queued connection + QObject::connect(ed.buttonBox, &QDialogButtonBox::rejected, qApp, &QCoreApplication::quit, Qt::QueuedConnection); - d.close(); - QFile wallet(dirwallet); - QFile walletenc(dirwalletenc); + // Connect new/restore button click + QObject::connect(ed.new_restore, &QPushButton::clicked, [&] { - wallet.remove(); - walletenc.remove(); + d.close(); + QFile wallet(dirwallet); + QFile walletenc(dirwalletenc); - auto cl = new ConnectionLoader(this, rpc); - cl->loadConnection(); - }); - - if (d.exec() == QDialog::Accepted) - { + wallet.remove(); + walletenc.remove(); + + auto cl = new ConnectionLoader(this, rpc); + cl->loadConnection(); + }); + + if (d.exec() == QDialog::Accepted){ QString passphraseBlank = ed.txtPassword->text(); // data comes from user inputs QString passphrase = QString("HUSH3") + passphraseBlank + QString("SDL"); @@ -666,49 +672,48 @@ void MainWindow::removeWalletEncryptionStartUp() { sequence1 = new char[length+1]; strncpy(sequence1, passphraseHash.toUtf8(), length+1); - #define MESSAGE ((const unsigned char *) sequence) - #define MESSAGE_LEN length - #define hash ((const unsigned char *) sequence1) +#define MESSAGE ((const unsigned char *) sequence) +#define MESSAGE_LEN length +#define hash ((const unsigned char *) sequence1) - #define PASSWORD sequence - #define KEY_LEN crypto_box_SEEDBYTES +#define PASSWORD sequence +#define KEY_LEN crypto_box_SEEDBYTES - unsigned char key[KEY_LEN]; + unsigned char key[KEY_LEN]; - if (crypto_pwhash(key, sizeof key, PASSWORD, strlen(PASSWORD), hash, - crypto_pwhash_OPSLIMIT_SENSITIVE, crypto_pwhash_MEMLIMIT_SENSITIVE, - crypto_pwhash_ALG_DEFAULT) != 0) { - /* out of memory */ - qDebug() << __func__ << ": crypto_pwhash failed! Possibly out of memory"; - return; - } + if (crypto_pwhash(key, sizeof key, PASSWORD, strlen(PASSWORD), hash, + crypto_pwhash_OPSLIMIT_SENSITIVE, crypto_pwhash_MEMLIMIT_SENSITIVE, + crypto_pwhash_ALG_DEFAULT) != 0) { + /* out of memory */ + qDebug() << __func__ << ": crypto_pwhash failed! Possibly out of memory"; + return; + } - QString passphraseHash1 = QByteArray(reinterpret_cast(key), KEY_LEN).toHex(); - DataStore::getChatDataStore()->setPassword(passphraseHash1); + QString passphraseHash1 = QByteArray(reinterpret_cast(key), KEY_LEN).toHex(); + DataStore::getChatDataStore()->setPassword(passphraseHash1); - auto dir = QDir(QStandardPaths::writableLocation(QStandardPaths::AppDataLocation)); + auto dir = QDir(QStandardPaths::writableLocation(QStandardPaths::AppDataLocation)); - QString target_encwallet_file = dirwalletenc; - QString target_decwallet_file = dirwallet; + QString target_encwallet_file = dirwalletenc; + QString target_decwallet_file = dirwallet; - FileEncryption::decrypt(target_decwallet_file, target_encwallet_file, key); + FileEncryption::decrypt(target_decwallet_file, target_encwallet_file, key); - auto dirHome = QDir(QStandardPaths::writableLocation(QStandardPaths::HomeLocation)); - QFile wallet(dirwallet); - qDebug() << __func__ << ": wallet size=" << wallet.size(); - - if (wallet.size() == 0) { - QMessageBox::critical(this, tr("Wallet Encryption Failed"), - QString("false password please try again"), - QMessageBox::Ok - ); - this->removeWalletEncryptionStartUp(); - }else{} + auto dirHome = QDir(QStandardPaths::writableLocation(QStandardPaths::HomeLocation)); + QFile wallet(dirwallet); + qDebug() << __func__ << ": wallet size=" << wallet.size(); + + if (wallet.size() == 0) { + QMessageBox::critical(this, tr("Wallet Encryption Failed"), + QString("false password please try again"), + QMessageBox::Ok + ); + this->removeWalletEncryptionStartUp(); + }else{} }else{ this->doClosePw(); } - } QString MainWindow::getPassword()