aboutsummaryrefslogtreecommitdiffstats
path: root/src/ui/dialog/keypair_details
diff options
context:
space:
mode:
Diffstat (limited to 'src/ui/dialog/keypair_details')
-rw-r--r--src/ui/dialog/keypair_details/KeyDetailsDialog.cpp22
-rw-r--r--src/ui/dialog/keypair_details/KeyPairOperaTab.cpp78
-rw-r--r--src/ui/dialog/keypair_details/KeyPairOperaTab.h11
3 files changed, 97 insertions, 14 deletions
diff --git a/src/ui/dialog/keypair_details/KeyDetailsDialog.cpp b/src/ui/dialog/keypair_details/KeyDetailsDialog.cpp
index 6908592b..9545405b 100644
--- a/src/ui/dialog/keypair_details/KeyDetailsDialog.cpp
+++ b/src/ui/dialog/keypair_details/KeyDetailsDialog.cpp
@@ -29,6 +29,7 @@
#include "KeyDetailsDialog.h"
#include "core/GpgModel.h"
+#include "ui/UISignalStation.h"
#include "ui/dialog/keypair_details/KeyPairDetailTab.h"
#include "ui/dialog/keypair_details/KeyPairOperaTab.h"
#include "ui/dialog/keypair_details/KeyPairSubkeyTab.h"
@@ -40,11 +41,22 @@ KeyDetailsDialog::KeyDetailsDialog(const GpgKey& key, QWidget* parent)
tab_widget_ = new QTabWidget();
tab_widget_->addTab(new KeyPairDetailTab(key.GetId(), tab_widget_),
tr("KeyPair"));
- tab_widget_->addTab(new KeyPairUIDTab(key.GetId(), tab_widget_), tr("UIDs"));
- tab_widget_->addTab(new KeyPairSubkeyTab(key.GetId(), tab_widget_),
- tr("Subkeys"));
- tab_widget_->addTab(new KeyPairOperaTab(key.GetId(), tab_widget_),
- tr("Operations"));
+
+ if (!key.IsRevoked()) {
+ tab_widget_->addTab(new KeyPairUIDTab(key.GetId(), tab_widget_),
+ tr("UIDs"));
+
+ tab_widget_->addTab(new KeyPairSubkeyTab(key.GetId(), tab_widget_),
+ tr("Subkeys"));
+ tab_widget_->addTab(new KeyPairOperaTab(key.GetId(), tab_widget_),
+ tr("Operations"));
+ }
+
+ QString m_key_id = key.GetId();
+ connect(UISignalStation::GetInstance(), &UISignalStation::SignalKeyRevoked,
+ this, [this, m_key_id](const QString& key_id) {
+ if (key_id == m_key_id) this->close();
+ });
auto* main_layout = new QVBoxLayout;
main_layout->addWidget(tab_widget_);
diff --git a/src/ui/dialog/keypair_details/KeyPairOperaTab.cpp b/src/ui/dialog/keypair_details/KeyPairOperaTab.cpp
index be9cd9d2..6e4a1df0 100644
--- a/src/ui/dialog/keypair_details/KeyPairOperaTab.cpp
+++ b/src/ui/dialog/keypair_details/KeyPairOperaTab.cpp
@@ -83,8 +83,7 @@ KeyPairOperaTab::KeyPairOperaTab(const QString& key_id, QWidget* parent)
auto* advance_h_box_layout = new QHBoxLayout();
- auto settings =
- GpgFrontend::GlobalSettingStation::GetInstance().GetSettings();
+ auto settings = GlobalSettingStation::GetInstance().GetSettings();
// read settings
bool forbid_all_gnupg_connection =
@@ -98,11 +97,11 @@ KeyPairOperaTab::KeyPairOperaTab(const QString& key_id, QWidget* parent)
advance_h_box_layout->addWidget(key_server_opera_button);
if (m_key_.IsPrivateKey() && m_key_.IsHasMasterKey()) {
- auto* revoke_cert_gen_button =
- new QPushButton(tr("Generate Revoke Certificate"));
- connect(revoke_cert_gen_button, &QPushButton::clicked, this,
- &KeyPairOperaTab::slot_gen_revoke_cert);
- advance_h_box_layout->addWidget(revoke_cert_gen_button);
+ auto* revoke_cert_opera_button =
+ new QPushButton(tr("Revoke Certificate Operation"));
+ revoke_cert_opera_button->setStyleSheet("text-align:center;");
+ revoke_cert_opera_button->setMenu(rev_cert_opera_menu_);
+ advance_h_box_layout->addWidget(revoke_cert_opera_button);
}
auto* modify_tofu_button = new QPushButton(tr("Modify TOFU Policy"));
@@ -171,6 +170,21 @@ void KeyPairOperaTab::CreateOperaMenu() {
secret_key_export_opera_menu_->addAction(export_full_secret_key);
secret_key_export_opera_menu_->addAction(export_shortest_secret_key);
+
+ rev_cert_opera_menu_ = new QMenu(this);
+
+ auto* rev_cert_gen_action =
+ new QAction(tr("Generate Revoke Certificate"), this);
+ connect(rev_cert_gen_action, &QAction::triggered, this,
+ &KeyPairOperaTab::slot_gen_revoke_cert);
+
+ auto* revoke_cert_import_action =
+ new QAction(tr("Import Revoke Certificate"));
+ connect(revoke_cert_import_action, &QAction::triggered, this,
+ &KeyPairOperaTab::slot_import_revoke_cert);
+
+ rev_cert_opera_menu_->addAction(revoke_cert_import_action);
+ rev_cert_opera_menu_->addAction(rev_cert_gen_action);
}
void KeyPairOperaTab::slot_export_public_key() {
@@ -379,4 +393,54 @@ void KeyPairOperaTab::slot_set_owner_trust_level() {
function->deleteLater();
}
+void KeyPairOperaTab::slot_import_revoke_cert() {
+ // Show a information box with explanation about private key
+ int ret = QMessageBox::information(
+ this, tr("Import Key Revocation Certificate"),
+ "<h3>" + tr("You are about to import the") + "<font color=\"red\">" +
+ " " + tr("REVOCATION CERTIFICATE") + " " + "</font>!</h3>\n" +
+ tr("A successful import will result in the key being irreversibly "
+ "revoked.") +
+ "<br />" + tr("Do you REALLY want to execute this operation?"),
+ QMessageBox::Cancel | QMessageBox::Ok);
+
+ // export key, if ok was clicked
+ if (ret != QMessageBox::Ok) return;
+
+ auto rev_file_name = QFileDialog::getOpenFileName(
+ this, tr("Import Key Revocation Certificate"), {},
+ tr("Revocation Certificates") + " (*.rev)");
+
+ if (rev_file_name.isEmpty()) return;
+
+ QFileInfo rev_file_info(rev_file_name);
+
+ if (!rev_file_info.isFile() || !rev_file_info.isReadable()) {
+ QMessageBox::critical(
+ this, tr("Error"),
+ tr("Cannot open this file. Please make sure that this "
+ "is a regular file and it's readable."));
+ return;
+ }
+
+ // max file size is 1 mb
+ if (rev_file_info.size() > static_cast<qint64>(1024 * 1024)) {
+ QMessageBox::critical(
+ this, tr("Error"),
+ tr("The target file is too large for a key revocation certificate."));
+ return;
+ }
+
+ QFile rev_file(rev_file_info.absoluteFilePath());
+ if (!rev_file.open(QIODeviceBase::ReadOnly)) {
+ QMessageBox::critical(
+ this, tr("Error"),
+ tr("Cannot open this file. Please make sure that this "
+ "is a regular file and it's readable."));
+ return;
+ }
+
+ emit UISignalStation::GetInstance()->SignalKeyRevoked(m_key_.GetId());
+ CommonUtils::GetInstance()->SlotImportKeys(nullptr, rev_file.readAll());
+}
} // namespace GpgFrontend::UI
diff --git a/src/ui/dialog/keypair_details/KeyPairOperaTab.h b/src/ui/dialog/keypair_details/KeyPairOperaTab.h
index bb20d067..22c94957 100644
--- a/src/ui/dialog/keypair_details/KeyPairOperaTab.h
+++ b/src/ui/dialog/keypair_details/KeyPairOperaTab.h
@@ -120,9 +120,16 @@ class KeyPairOperaTab : public QWidget {
*/
void slot_set_owner_trust_level();
+ /**
+ * @brief
+ *
+ */
+ void slot_import_revoke_cert();
+
private:
- GpgKey m_key_; ///<
- QMenu* key_server_opera_menu_{}; ///<
+ GpgKey m_key_; ///<
+ QMenu* key_server_opera_menu_{}; ///<
+ QMenu* rev_cert_opera_menu_{};
QMenu* secret_key_export_opera_menu_{}; ///<
};
} // namespace GpgFrontend::UI