aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/gpg/GpgContext.h4
-rwxr-xr-xinclude/ui/KeyMgmt.h1
-rw-r--r--include/ui/keygen/KeygenDialog.h5
-rw-r--r--include/ui/keygen/KeygenThread.h50
-rw-r--r--include/ui/keygen/SubkeyGenerateDialog.h10
-rw-r--r--include/ui/keygen/SubkeyGenerateThread.h51
-rw-r--r--src/gpg/GpgContext.cpp18
-rw-r--r--src/ui/keygen/KeygenDialog.cpp42
-rw-r--r--src/ui/keygen/KeygenThread.cpp36
-rw-r--r--src/ui/keygen/SubkeyGenerateDialog.cpp41
-rw-r--r--src/ui/keygen/SubkeyGenerateThread.cpp36
11 files changed, 41 insertions, 253 deletions
diff --git a/include/gpg/GpgContext.h b/include/gpg/GpgContext.h
index fc4d8692..b25a5f81 100644
--- a/include/gpg/GpgContext.h
+++ b/include/gpg/GpgContext.h
@@ -81,9 +81,9 @@ namespace GpgME {
bool exportKeys(const QVector<GpgKey> &keys, QByteArray &outBuffer);
- bool generateKey(GenKeyInfo *params);
+ gpgme_error_t generateKey(GenKeyInfo *params);
- bool generateSubkey(const GpgKey &key, GenKeyInfo *params);
+ gpgme_error_t generateSubkey(const GpgKey &key, GenKeyInfo *params);
void deleteKeys(QStringList *uidList);
diff --git a/include/ui/KeyMgmt.h b/include/ui/KeyMgmt.h
index 59592bdf..fa352149 100755
--- a/include/ui/KeyMgmt.h
+++ b/include/ui/KeyMgmt.h
@@ -26,7 +26,6 @@
#define __KEYMGMT_H__
#include "ui/widgets/KeyList.h"
-#include "ui/keygen/KeygenThread.h"
#include "ui/keypair_details/KeyDetailsDialog.h"
#include "KeyImportDetailDialog.h"
#include "KeyServerImportDialog.h"
diff --git a/include/ui/keygen/KeygenDialog.h b/include/ui/keygen/KeygenDialog.h
index a2718a1d..4a37590a 100644
--- a/include/ui/keygen/KeygenDialog.h
+++ b/include/ui/keygen/KeygenDialog.h
@@ -25,10 +25,8 @@
#ifndef __KEYGENDIALOG_H__
#define __KEYGENDIALOG_H__
-#include "KeygenThread.h"
#include "gpg/GpgContext.h"
-
class KeyGenDialog : public QDialog {
Q_OBJECT
@@ -54,7 +52,6 @@ private:
R"((?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:(2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-9]?[0-9]))\.){3}(?:(2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-9]?[0-9])|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\]))"};
GpgME::GpgContext *mCtx; /** The current gpg context */
- KeyGenThread *kg{}; /** Thread for key generation */
QStringList errorMessages; /** List of errors occuring when checking entries of lineedits */
GenKeyInfo genKeyInfo{};
@@ -107,8 +104,6 @@ private slots:
void slotActivatedKeyType(int index);
- void slotKeyGenResult(bool success);
-
};
#endif // __KEYGENDIALOG_H__
diff --git a/include/ui/keygen/KeygenThread.h b/include/ui/keygen/KeygenThread.h
deleted file mode 100644
index 30478050..00000000
--- a/include/ui/keygen/KeygenThread.h
+++ /dev/null
@@ -1,50 +0,0 @@
-/**
- * This file is part of GPGFrontend.
- *
- * GPGFrontend is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * Foobar is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Foobar. If not, see <https://www.gnu.org/licenses/>.
- *
- * The initial version of the source code is inherited from gpg4usb-team.
- * Their source code version also complies with GNU General Public License.
- *
- * The source code version of this software was modified and released
- * by Saturneric<[email protected]> starting on May 12, 2021.
- *
- */
-
-#ifndef __KEYGENTHREAD_H__
-#define __KEYGENTHREAD_H__
-
-#include "gpg/GpgContext.h"
-
-class KeyGenThread : public QThread {
-Q_OBJECT
-
-public:
- KeyGenThread(GenKeyInfo *keyGenParams, GpgME::GpgContext *ctx);
-
-signals:
- void signalKeyGenerated(bool success);
-
-private:
- GenKeyInfo *keyGenParams;
- GpgME::GpgContext *mCtx;
- QMutex mutex;
-
-protected:
-
- void run() override;
-
-};
-
-#endif // __KEYGENTHREAD_H__
diff --git a/include/ui/keygen/SubkeyGenerateDialog.h b/include/ui/keygen/SubkeyGenerateDialog.h
index b067122a..a1cfcf55 100644
--- a/include/ui/keygen/SubkeyGenerateDialog.h
+++ b/include/ui/keygen/SubkeyGenerateDialog.h
@@ -25,12 +25,7 @@
#ifndef GPGFRONTEND_SUBKEYGENERATEDIALOG_H
#define GPGFRONTEND_SUBKEYGENERATEDIALOG_H
-#include "GpgFrontend.h"
-#include "gpg/GpgKey.h"
-#include "gpg/GpgSubKey.h"
-#include "gpg/GpgGenKeyInfo.h"
-
-#include "SubkeyGenerateThread.h"
+#include "gpg/GpgContext.h"
class SubkeyGenerateDialog : public QDialog {
Q_OBJECT
@@ -45,7 +40,6 @@ private:
const GpgKey &mKey;
GenKeyInfo genKeyInfo{};
- SubkeyGenerateThread *kg{}; /** Thread for key generation */
QGroupBox *keyUsageGroupBox{};
QDialogButtonBox *buttonBox; /** Box for standardbuttons */
@@ -91,8 +85,6 @@ private slots:
void slotActivatedKeyType(int index);
- void slotKeyGenResult(bool success);
-
};
diff --git a/include/ui/keygen/SubkeyGenerateThread.h b/include/ui/keygen/SubkeyGenerateThread.h
deleted file mode 100644
index b442acea..00000000
--- a/include/ui/keygen/SubkeyGenerateThread.h
+++ /dev/null
@@ -1,51 +0,0 @@
-/**
- * This file is part of GPGFrontend.
- *
- * GPGFrontend is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * Foobar is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Foobar. If not, see <https://www.gnu.org/licenses/>.
- *
- * The initial version of the source code is inherited from gpg4usb-team.
- * Their source code version also complies with GNU General Public License.
- *
- * The source code version of this software was modified and released
- * by Saturneric<[email protected]><[email protected]> starting on May 12, 2021.
- *
- */
-
-#ifndef GPGFRONTEND_SUBKEYGENERATETHREAD_H
-#define GPGFRONTEND_SUBKEYGENERATETHREAD_H
-
-#include "gpg/GpgContext.h"
-
-class SubkeyGenerateThread : public QThread {
- Q_OBJECT
-
-public:
- SubkeyGenerateThread(GpgKey key, GenKeyInfo *keyGenParams, GpgME::GpgContext *ctx);
-
-signals:
-
- void signalKeyGenerated(bool success);
-
-private:
- const GpgKey mKey;
- GenKeyInfo *keyGenParams;
- GpgME::GpgContext *mCtx;
-
-protected:
-
- void run() override;
-};
-
-
-#endif //GPGFRONTEND_SUBKEYGENERATETHREAD_H
diff --git a/src/gpg/GpgContext.cpp b/src/gpg/GpgContext.cpp
index 0462433d..72c04ac9 100644
--- a/src/gpg/GpgContext.cpp
+++ b/src/gpg/GpgContext.cpp
@@ -197,7 +197,7 @@ namespace GpgME {
/** Generate New Key with values params
*
*/
- bool GpgContext::generateKey(GenKeyInfo *params) {
+ gpgme_error_t GpgContext::generateKey(GenKeyInfo *params) {
auto userid_utf8 = params->getUserid().toUtf8();
const char *userid = userid_utf8.constData();
@@ -232,12 +232,12 @@ namespace GpgME {
err = gpgme_op_createkey(mCtx, userid, algo, 0, expires, nullptr, flags);
- if (err != GPG_ERR_NO_ERROR) {
+ if (gpgme_err_code(err) != GPG_ERR_NO_ERROR) {
checkErr(err);
- return false;
+ return err;
} else {
emit signalKeyDBChanged();
- return true;
+ return err;
}
}
@@ -986,10 +986,10 @@ namespace GpgME {
}
}
- bool GpgContext::generateSubkey(const GpgKey &key, GenKeyInfo *params) {
+ gpgme_error_t GpgContext::generateSubkey(const GpgKey &key, GenKeyInfo *params) {
if (!params->isSubKey()) {
- return false;
+ return GPG_ERR_CANCELED;
}
auto algo_utf8 = (params->getAlgo() + params->getKeySizeStr()).toUtf8();
@@ -1022,12 +1022,12 @@ namespace GpgME {
auto gpgmeError = gpgme_op_createsubkey(mCtx, key.key_refer,
algo, 0, expires, flags);
- if (gpgmeError == GPG_ERR_NO_ERROR) {
+ if (gpgme_err_code(gpgmeError) == GPG_ERR_NO_ERROR) {
emit signalKeyUpdated(key.id);
- return true;
+ return gpgmeError;
} else {
checkErr(gpgmeError);
- return false;
+ return gpgmeError;
}
}
diff --git a/src/ui/keygen/KeygenDialog.cpp b/src/ui/keygen/KeygenDialog.cpp
index 7991ddd1..98216dc6 100644
--- a/src/ui/keygen/KeygenDialog.cpp
+++ b/src/ui/keygen/KeygenDialog.cpp
@@ -23,6 +23,7 @@
*/
#include "ui/keygen/KeygenDialog.h"
+#include "ui/WaitingDialog.h"
KeyGenDialog::KeyGenDialog(GpgME::GpgContext *ctx, QWidget *parent)
: QDialog(parent), mCtx(ctx) {
@@ -92,34 +93,28 @@ void KeyGenDialog::slotKeyGenAccept() {
genKeyInfo.setExpired(dateEdit->dateTime());
}
- kg = new KeyGenThread(&genKeyInfo, mCtx);
- connect(kg, SIGNAL(signalKeyGenerated(bool)), this, SLOT(slotKeyGenResult(bool)));
- kg->start();
-
- this->accept();
-
- auto *dialog = new QDialog(this, Qt::CustomizeWindowHint | Qt::WindowTitleHint);
- dialog->setModal(true);
- dialog->setWindowTitle(tr("Generating Key..."));
-
- auto *waitMessage = new QLabel(
- tr("Collecting random data for key generation.\n This may take a while.\n To speed up the process use your computer\n (e.g. browse the net, listen to music,...)"));
- auto *pb = new QProgressBar();
- pb->setRange(0, 0);
-
- auto *layout = new QVBoxLayout(dialog);
- layout->addWidget(waitMessage);
- layout->addWidget(pb);
- dialog->setLayout(layout);
+ gpgme_error_t error = false;
+ auto thread = QThread::create([&]() {
+ error = mCtx->generateKey(&genKeyInfo);
+ });
+ thread->start();
+ auto *dialog = new WaitingDialog("Generating", this);
dialog->show();
- while (kg->isRunning()) {
+ while (thread->isRunning()) {
QCoreApplication::processEvents();
}
dialog->close();
+ if(gpgme_err_code(error) == GPG_ERR_NO_ERROR) {
+ QMessageBox::information(this, tr("Success"), tr("The new key pair has been generated."));
+ this->close();
+ }
+ else
+ QMessageBox::critical(this, tr("Failure"), tr(gpgme_strerror(error)));
+
} else {
/**
* create error message
@@ -307,13 +302,6 @@ bool KeyGenDialog::check_email_address(const QString &str) {
return re_email.match(str).hasMatch();
}
-void KeyGenDialog::slotKeyGenResult(bool success) {
- if(success)
- QMessageBox::information(nullptr, tr("Success"), tr("The new key pair has been generated."));
- else
- QMessageBox::critical(nullptr, tr("Failure"), tr("An error occurred during key generation."));
-}
-
QGroupBox *KeyGenDialog::create_basic_info_group_box() {
errorLabel = new QLabel(tr(""));
diff --git a/src/ui/keygen/KeygenThread.cpp b/src/ui/keygen/KeygenThread.cpp
deleted file mode 100644
index d7b9d840..00000000
--- a/src/ui/keygen/KeygenThread.cpp
+++ /dev/null
@@ -1,36 +0,0 @@
-/**
- * This file is part of GPGFrontend.
- *
- * GPGFrontend is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * Foobar is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Foobar. If not, see <https://www.gnu.org/licenses/>.
- *
- * The initial version of the source code is inherited from gpg4usb-team.
- * Their source code version also complies with GNU General Public License.
- *
- * The source code version of this software was modified and released
- * by Saturneric<[email protected]> starting on May 12, 2021.
- *
- */
-
-#include "ui/keygen/KeygenThread.h"
-
-KeyGenThread::KeyGenThread(GenKeyInfo* keyGenParams, GpgME::GpgContext *ctx)
-: mCtx(ctx), keyGenParams(keyGenParams), QThread(nullptr) {
- connect(this, &KeyGenThread::finished, this, &KeyGenThread::deleteLater);
-}
-
-void KeyGenThread::run() {
- bool success = mCtx->generateKey(keyGenParams);
- emit signalKeyGenerated(success);
- emit finished({});
-}
diff --git a/src/ui/keygen/SubkeyGenerateDialog.cpp b/src/ui/keygen/SubkeyGenerateDialog.cpp
index c545381f..3d709d81 100644
--- a/src/ui/keygen/SubkeyGenerateDialog.cpp
+++ b/src/ui/keygen/SubkeyGenerateDialog.cpp
@@ -23,6 +23,7 @@
*/
#include "ui/keygen/SubkeyGenerateDialog.h"
+#include "ui/WaitingDialog.h"
SubkeyGenerateDialog::SubkeyGenerateDialog(GpgME::GpgContext *ctx, const GpgKey &key, QWidget *parent)
: genKeyInfo(true), mCtx(ctx), mKey(key), QDialog(parent) {
@@ -224,34 +225,27 @@ void SubkeyGenerateDialog::slotKeyGenAccept() {
genKeyInfo.setExpired(dateEdit->dateTime());
}
- kg = new SubkeyGenerateThread(mKey ,&genKeyInfo, mCtx);
- connect(kg, SIGNAL(signalKeyGenerated(bool)), this, SLOT(slotKeyGenResult(bool)));
- kg->start();
-
- this->accept();
-
- auto *dialog = new QDialog(this, Qt::CustomizeWindowHint | Qt::WindowTitleHint);
- dialog->setModal(true);
- dialog->setWindowTitle(tr("Generating Subkey..."));
-
- auto *waitMessage = new QLabel(
- tr("Collecting random data for subkey generation.\n This may take a while.\n To speed up the process use your computer\n (e.g. browse the net, listen to music,...)"));
- auto *pb = new QProgressBar();
- pb->setRange(0, 0);
-
- auto *layout = new QVBoxLayout(dialog);
- layout->addWidget(waitMessage);
- layout->addWidget(pb);
- dialog->setLayout(layout);
+ gpgme_error_t error = false;
+ auto thread = QThread::create([&]() {
+ error = mCtx->generateSubkey(mKey, &genKeyInfo);
+ });
+ thread->start();
+ auto *dialog = new WaitingDialog("Generating", this);
dialog->show();
- while (!kg->isFinished() && kg->isRunning()) {
+ while (thread->isRunning()) {
QCoreApplication::processEvents();
}
dialog->close();
+ if (gpgme_err_code(error) == GPG_ERR_NO_ERROR) {
+ QMessageBox::information(nullptr, tr("Success"), tr("The new subkey has been generated."));
+ this->close();
+ } else
+ QMessageBox::critical(this, tr("Failure"), tr(gpgme_strerror(error)));
+
} else {
/**
* create error message
@@ -303,10 +297,3 @@ void SubkeyGenerateDialog::slotActivatedKeyType(int index) {
genKeyInfo.setAlgo(this->keyTypeComboBox->itemText(index));
refresh_widgets_state();
}
-
-void SubkeyGenerateDialog::slotKeyGenResult(bool success) {
- if(success)
- QMessageBox::information(nullptr, tr("Success"), tr("The new subkey has been generated."));
- else
- QMessageBox::critical(nullptr, tr("Failure"), tr("An error occurred during subkey generation."));
-}
diff --git a/src/ui/keygen/SubkeyGenerateThread.cpp b/src/ui/keygen/SubkeyGenerateThread.cpp
deleted file mode 100644
index 125f35f8..00000000
--- a/src/ui/keygen/SubkeyGenerateThread.cpp
+++ /dev/null
@@ -1,36 +0,0 @@
-/**
- * This file is part of GPGFrontend.
- *
- * GPGFrontend is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * Foobar is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Foobar. If not, see <https://www.gnu.org/licenses/>.
- *
- * The initial version of the source code is inherited from gpg4usb-team.
- * Their source code version also complies with GNU General Public License.
- *
- * The source code version of this software was modified and released
- * by Saturneric<[email protected]><[email protected]> starting on May 12, 2021.
- *
- */
-
-#include "ui/keygen/SubkeyGenerateThread.h"
-
-SubkeyGenerateThread::SubkeyGenerateThread(GpgKey key, GenKeyInfo *keyGenParams, GpgME::GpgContext *ctx)
- : mKey(std::move(key)), keyGenParams(keyGenParams) , mCtx(ctx) {
- connect(this, &SubkeyGenerateThread::finished, this, &SubkeyGenerateThread::deleteLater);
-}
-
-void SubkeyGenerateThread::run() {
- bool success = mCtx->generateSubkey(mKey, keyGenParams);
- emit signalKeyGenerated(success);
- emit finished({});
-}