diff options
author | saturneric <[email protected]> | 2024-10-18 18:15:36 +0000 |
---|---|---|
committer | saturneric <[email protected]> | 2024-10-18 18:15:36 +0000 |
commit | c3a23900281c2024f7d4507ac84b0fe700fbf6dd (patch) | |
tree | b8f611ef7b4121ffe9f0df60eb3b3c3896c444b5 /src/ui | |
parent | feat: add filter option of 'comment' at key list of main window (diff) | |
download | GpgFrontend-c3a23900281c2024f7d4507ac84b0fe700fbf6dd.tar.gz GpgFrontend-c3a23900281c2024f7d4507ac84b0fe700fbf6dd.zip |
feat: set reason code and text at revoke-certification
Diffstat (limited to 'src/ui')
-rw-r--r-- | src/ui/dialog/RevocationOptionsDialog.cpp | 73 | ||||
-rw-r--r-- | src/ui/dialog/RevocationOptionsDialog.h | 57 | ||||
-rw-r--r-- | src/ui/dialog/keypair_details/KeyPairOperaTab.cpp | 41 |
3 files changed, 157 insertions, 14 deletions
diff --git a/src/ui/dialog/RevocationOptionsDialog.cpp b/src/ui/dialog/RevocationOptionsDialog.cpp new file mode 100644 index 00000000..e2bbba00 --- /dev/null +++ b/src/ui/dialog/RevocationOptionsDialog.cpp @@ -0,0 +1,73 @@ +/** + * Copyright (C) 2021-2024 Saturneric <[email protected]> + * + * 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. + * + * GpgFrontend 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 GpgFrontend. If not, see <https://www.gnu.org/licenses/>. + * + * The initial version of the source code is inherited from + * 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. + * + * SPDX-License-Identifier: GPL-3.0-or-later + * + */ + +#include "RevocationOptionsDialog.h" + +#include "core/utils/MemoryUtils.h" +#include "ui_RevocationOptionsDialog.h" + +GpgFrontend::UI::RevocationOptionsDialog::RevocationOptionsDialog( + QWidget *parent) + : GeneralDialog("RevocationOptionsDialog", parent), + ui_(GpgFrontend::SecureCreateSharedObject<Ui_RevocationOptionsDialog>()) { + ui_->setupUi(this); + + QStringList codes; + + codes << tr("0 -> No Reason.") << tr("1 -> This key is no more safe.") + << tr("2 -> Key is outdated.") << tr("3 -> Key is no longer used"); + + ui_->rRcodeComboBox->addItems(codes); + + ui_->revocationReasonCodeLabel->setText(tr("Revocation Reason (Code)")); + ui_->revocationReasonTextLabel->setText(tr("Revocation Reason (Text)")); + this->setWindowTitle(tr("Revocation Options")); + + connect(ui_->buttonBox, &QDialogButtonBox::accepted, this, + &RevocationOptionsDialog::slot_button_box_accepted); + connect(ui_->buttonBox, &QDialogButtonBox::accepted, this, &QDialog::accept); + connect(ui_->buttonBox, &QDialogButtonBox::rejected, this, &QDialog::reject); + setAttribute(Qt::WA_DeleteOnClose); +} + +auto GpgFrontend::UI::RevocationOptionsDialog::Code() const -> int { + return code_; +} + +auto GpgFrontend::UI::RevocationOptionsDialog::Text() const -> QString { + return text_; +} + +void GpgFrontend::UI::RevocationOptionsDialog::slot_button_box_accepted() { + code_ = ui_->rRcodeComboBox->currentIndex(); + text_ = ui_->rRPlainTextEdit->toPlainText() + .trimmed() + .split('\n', Qt::SkipEmptyParts) + .join("\n"); + emit SignalRevokeOptionAccepted(code_, text_); +} diff --git a/src/ui/dialog/RevocationOptionsDialog.h b/src/ui/dialog/RevocationOptionsDialog.h new file mode 100644 index 00000000..0f404ca2 --- /dev/null +++ b/src/ui/dialog/RevocationOptionsDialog.h @@ -0,0 +1,57 @@ + +/** + * Copyright (C) 2021-2024 Saturneric <[email protected]> + * + * 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. + * + * GpgFrontend 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 GpgFrontend. If not, see <https://www.gnu.org/licenses/>. + * + * The initial version of the source code is inherited from + * 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. + * + * SPDX-License-Identifier: GPL-3.0-or-later + * + */ + +#pragma once + +#include "ui/dialog/GeneralDialog.h" + +class Ui_RevocationOptionsDialog; + +namespace GpgFrontend::UI { +class RevocationOptionsDialog : public GeneralDialog { + Q_OBJECT + public: + explicit RevocationOptionsDialog(QWidget *parent); + + [[nodiscard]] auto Code() const -> int; + + [[nodiscard]] auto Text() const -> QString; + + signals: + void SignalRevokeOptionAccepted(int code, QString text); + + private: + std::shared_ptr<Ui_RevocationOptionsDialog> ui_; ///< + int code_; + QString text_; + + void slot_button_box_accepted(); +}; + +} // namespace GpgFrontend::UI
\ No newline at end of file diff --git a/src/ui/dialog/keypair_details/KeyPairOperaTab.cpp b/src/ui/dialog/keypair_details/KeyPairOperaTab.cpp index f2efb037..1f637b0e 100644 --- a/src/ui/dialog/keypair_details/KeyPairOperaTab.cpp +++ b/src/ui/dialog/keypair_details/KeyPairOperaTab.cpp @@ -40,6 +40,7 @@ #include "core/utils/IOUtils.h" #include "ui/UISignalStation.h" #include "ui/UserInterfaceUtils.h" +#include "ui/dialog/RevocationOptionsDialog.h" #include "ui/dialog/import_export/KeyUploadDialog.h" #include "ui/function/SetOwnerTrustLevel.h" @@ -350,27 +351,39 @@ void KeyPairOperaTab::slot_update_key_from_server() { } void KeyPairOperaTab::slot_gen_revoke_cert() { - auto literal = QString("%1 (*.rev)").arg(tr("Revocation Certificates")); - QString m_output_file_name; + auto* revocation_options_dialog = new RevocationOptionsDialog(this); + + connect(revocation_options_dialog, + &RevocationOptionsDialog::SignalRevokeOptionAccepted, this, + [this](int code, const QString& text) { + auto literal = + QString("%1 (*.rev)").arg(tr("Revocation Certificates")); + QString m_output_file_name; #if defined(_WIN32) || defined(WIN32) - auto file_string = m_key_.GetName() + "[" + m_key_.GetEmail() + "](" + - m_key_.GetId() + ").rev"; + auto file_string = m_key_.GetName() + "[" + m_key_.GetEmail() + + "](" + m_key_.GetId() + ").rev"; #else - auto file_string = m_key_.GetName() + "<" + m_key_.GetEmail() + ">(" + - m_key_.GetId() + ").rev"; + auto file_string = m_key_.GetName() + "<" + m_key_.GetEmail() + + ">(" + m_key_.GetId() + ").rev"; #endif - QFileDialog dialog(this, tr("Generate revocation certificate"), file_string, - literal); - dialog.setDefaultSuffix(".rev"); - dialog.setAcceptMode(QFileDialog::AcceptSave); + QFileDialog dialog(this, tr("Generate revocation certificate"), + file_string, literal); + dialog.setDefaultSuffix(".rev"); + dialog.setAcceptMode(QFileDialog::AcceptSave); - if (dialog.exec() != 0) m_output_file_name = dialog.selectedFiles().front(); + if (dialog.exec() != QFileDialog::Reject) { + m_output_file_name = dialog.selectedFiles().front(); + } - if (!m_output_file_name.isEmpty()) { - GpgKeyOpera::GetInstance().GenerateRevokeCert(m_key_, m_output_file_name); - } + if (!m_output_file_name.isEmpty()) { + GpgKeyOpera::GetInstance().GenerateRevokeCert( + m_key_, m_output_file_name, code, text); + } + }); + + revocation_options_dialog->show(); } void KeyPairOperaTab::slot_modify_password() { |