aboutsummaryrefslogtreecommitdiffstats
path: root/src/ui/dialog/import_export/ExportKeyPackageDialog.cpp
diff options
context:
space:
mode:
authorSaturn&Eric <[email protected]>2024-01-23 07:21:28 +0000
committerGitHub <[email protected]>2024-01-23 07:21:28 +0000
commit56acf161d439ce73eceaa145c40fe703bb2c3f02 (patch)
treea5d4790a6b2efc8786a3c0f74a07f5a8032d4e94 /src/ui/dialog/import_export/ExportKeyPackageDialog.cpp
parentfix: use more secure cdn links (diff)
parentfix: solve issues on detected gnupg path function and fix linking errors on w... (diff)
downloadGpgFrontend-56acf161d439ce73eceaa145c40fe703bb2c3f02.tar.gz
GpgFrontend-56acf161d439ce73eceaa145c40fe703bb2c3f02.zip
Merge pull request #126 from saturneric/dev/2.1.1/main
Develop 2.1.2.1
Diffstat (limited to 'src/ui/dialog/import_export/ExportKeyPackageDialog.cpp')
-rw-r--r--src/ui/dialog/import_export/ExportKeyPackageDialog.cpp136
1 files changed, 75 insertions, 61 deletions
diff --git a/src/ui/dialog/import_export/ExportKeyPackageDialog.cpp b/src/ui/dialog/import_export/ExportKeyPackageDialog.cpp
index b58d09c1..7c740063 100644
--- a/src/ui/dialog/import_export/ExportKeyPackageDialog.cpp
+++ b/src/ui/dialog/import_export/ExportKeyPackageDialog.cpp
@@ -1,5 +1,5 @@
/**
- * Copyright (C) 2021 Saturneric
+ * Copyright (C) 2021 Saturneric <[email protected]>
*
* This file is part of GpgFrontend.
*
@@ -20,7 +20,7 @@
* the gpg4usb project, which is under GPL-3.0-or-later.
*
* All the source code of GpgFrontend was modified and released by
- * Saturneric<[email protected]> starting on May 12, 2021.
+ * Saturneric <[email protected]> starting on May 12, 2021.
*
* SPDX-License-Identifier: GPL-3.0-or-later
*
@@ -28,31 +28,30 @@
#include "ExportKeyPackageDialog.h"
-#include <boost/format.hpp>
-
+#include "core/GpgModel.h"
#include "core/function/KeyPackageOperator.h"
#include "core/function/gpg/GpgKeyGetter.h"
+#include "ui/UserInterfaceUtils.h"
#include "ui_ExportKeyPackageDialog.h"
GpgFrontend::UI::ExportKeyPackageDialog::ExportKeyPackageDialog(
KeyIdArgsListPtr key_ids, QWidget* parent)
: GeneralDialog(typeid(ExportKeyPackageDialog).name(), parent),
- ui_(std::make_shared<Ui_exportKeyPackageDialog>()),
+ ui_(GpgFrontend::SecureCreateSharedObject<Ui_exportKeyPackageDialog>()),
key_ids_(std::move(key_ids)) {
ui_->setupUi(this);
- ui_->nameValueLabel->setText(
- KeyPackageOperator::GenerateKeyPackageName().c_str());
+ ui_->nameValueLabel->setText(KeyPackageOperator::GenerateKeyPackageName());
connect(ui_->gnerateNameButton, &QPushButton::clicked, this, [=]() {
- ui_->nameValueLabel->setText(
- KeyPackageOperator::GenerateKeyPackageName().c_str());
+ ui_->nameValueLabel->setText(KeyPackageOperator::GenerateKeyPackageName());
});
connect(ui_->setOutputPathButton, &QPushButton::clicked, this, [=]() {
auto file_name = QFileDialog::getSaveFileName(
- this, _("Export Key Package"), ui_->nameValueLabel->text() + ".gfepack",
- QString(_("Key Package")) + " (*.gfepack);;All Files (*)");
+ this, tr("Export Key Package"),
+ ui_->nameValueLabel->text() + ".gfepack",
+ tr("Key Package") + " (*.gfepack);;All Files (*)");
// check path
if (file_name.isEmpty()) return;
@@ -62,18 +61,17 @@ GpgFrontend::UI::ExportKeyPackageDialog::ExportKeyPackageDialog(
connect(ui_->generatePassphraseButton, &QPushButton::clicked, this, [=]() {
auto file_name = QFileDialog::getSaveFileName(
- this, _("Export Key Package Passphrase"),
+ this, tr("Export Key Package Passphrase"),
ui_->nameValueLabel->text() + ".key",
- QString(_("Key File")) + " (*.key);;All Files (*)");
+ tr("Key File") + " (*.key);;All Files (*)");
// check path
if (file_name.isEmpty()) return;
- if (!KeyPackageOperator::GeneratePassphrase(file_name.toStdString(),
- passphrase_)) {
+ if (!KeyPackageOperator::GeneratePassphrase(file_name, passphrase_)) {
QMessageBox::critical(
- this, _("Error"),
- _("An error occurred while generating the passphrase file."));
+ this, tr("Error"),
+ tr("An error occurred while generating the passphrase file."));
return;
}
ui_->passphraseValueLabel->setText(file_name);
@@ -82,71 +80,87 @@ GpgFrontend::UI::ExportKeyPackageDialog::ExportKeyPackageDialog(
connect(ui_->button_box_, &QDialogButtonBox::accepted, this, [=]() {
if (ui_->outputPathLabel->text().isEmpty()) {
QMessageBox::critical(
- this, _("Forbidden"),
- _("Please select an output path before exporting."));
+ this, tr("Forbidden"),
+ tr("Please select an output path before exporting."));
return;
}
if (ui_->passphraseValueLabel->text().isEmpty()) {
QMessageBox::critical(
- this, _("Forbidden"),
- _("Please generate a password to protect your key before exporting, "
- "it is very important. Don't forget to back up your password in a "
- "safe place."));
+ this, tr("Forbidden"),
+ tr("Please generate a password to protect your key before exporting, "
+ "it is very important. Don't forget to back up your password in a "
+ "safe place."));
return;
}
// get suitable key ids
- auto key_id_exported = std::make_unique<KeyIdArgsList>();
auto keys = GpgKeyGetter::GetInstance().GetKeys(key_ids_);
- for (const auto& key : *keys) {
- if (ui_->noPublicKeyCheckBox->isChecked() && !key.IsPrivateKey())
- continue;
- key_id_exported->push_back(key.GetId());
+ auto keys_new_end =
+ std::remove_if(keys->begin(), keys->end(), [this](const auto& key) {
+ return ui_->noPublicKeyCheckBox->isChecked() && !key.IsPrivateKey();
+ });
+ keys->erase(keys_new_end, keys->end());
+
+ if (keys->empty()) {
+ QMessageBox::critical(this, tr("Error"),
+ tr("No key is suitable to export."));
+ return;
}
- if (KeyPackageOperator::GenerateKeyPackage(
- ui_->outputPathLabel->text().toStdString(),
- ui_->nameValueLabel->text().toStdString(), key_id_exported,
- passphrase_, ui_->includeSecretKeyCheckBox->isChecked())) {
- QMessageBox::information(
- this, _("Success"),
- QString(
- _("The Key Package has been successfully generated and has been "
- "protected by encryption algorithms(AES-256-ECB). You can "
- "safely transfer your Key Package.")) +
- "<br /><br />" + "<b>" +
- _("But the key file cannot be leaked under any "
- "circumstances. Please delete the Key Package and key file as "
- "soon "
- "as possible after completing the transfer operation.") +
- "</b>");
- accept();
- } else {
- QMessageBox::critical(
- this, _("Error"),
- _("An error occurred while exporting the key package."));
- }
+ CommonUtils::WaitForOpera(
+ this, tr("Generating"), [this, keys](const OperaWaitingHd& op_hd) {
+ KeyPackageOperator::GenerateKeyPackage(
+ ui_->outputPathLabel->text(), ui_->nameValueLabel->text(), *keys,
+ passphrase_, ui_->includeSecretKeyCheckBox->isChecked(),
+ [=](GFError err, const DataObjectPtr&) {
+ // stop waiting
+ op_hd();
+
+ if (err >= 0) {
+ QMessageBox::information(
+ this, tr("Success"),
+ QString(
+ tr("The Key Package has been successfully generated "
+ "and has been protected by encryption "
+ "algorithms(AES-256-ECB). You can safely transfer "
+ "your Key Package.")) +
+ "<br /><br />" + "<b>" +
+ tr("But the key file cannot be leaked under any "
+ "circumstances. Please delete the Key Package and "
+ "key file as soon as possible after completing "
+ "the "
+ "transfer "
+ "operation.") +
+ "</b>");
+ accept();
+ } else {
+ QMessageBox::critical(
+ this, tr("Error"),
+ tr("An error occurred while exporting the key package."));
+ }
+ });
+ });
});
connect(ui_->button_box_, &QDialogButtonBox::rejected, this,
[=]() { this->close(); });
- ui_->nameLabel->setText(_("Key Package Name"));
- ui_->selectOutputPathLabel->setText(_("Output Path"));
- ui_->passphraseLabel->setText(_("Passphrase"));
+ ui_->nameLabel->setText(tr("Key Package Name"));
+ ui_->selectOutputPathLabel->setText(tr("Output Path"));
+ ui_->passphraseLabel->setText(tr("Passphrase"));
ui_->tipsLabel->setText(
- _("Tips: You can use Key Package to safely and conveniently transfer "
- "your public and private keys between devices."));
- ui_->generatePassphraseButton->setText(_("Generate and Save Passphrase"));
- ui_->gnerateNameButton->setText(_("Generate Key Package Name"));
- ui_->setOutputPathButton->setText(_("Select Output Path"));
+ tr("Tips: You can use Key Package to safely and conveniently transfer "
+ "your public and private keys between devices."));
+ ui_->generatePassphraseButton->setText(tr("Generate and Save Passphrase"));
+ ui_->gnerateNameButton->setText(tr("Generate Key Package Name"));
+ ui_->setOutputPathButton->setText(tr("Select Output Path"));
ui_->includeSecretKeyCheckBox->setText(
- _("Include secret key (Think twice before acting)"));
+ tr("Include secret key (Think twice before acting)"));
ui_->noPublicKeyCheckBox->setText(
- _("Exclude keys that do not have a private key"));
+ tr("Exclude keys that do not have a private key"));
setAttribute(Qt::WA_DeleteOnClose);
- setWindowTitle(_("Export As Key Package"));
+ setWindowTitle(tr("Export As Key Package"));
}