aboutsummaryrefslogtreecommitdiff
path: root/src/certificatemanagementdialog.cpp
diff options
context:
space:
mode:
authorFelix (xq) Queißner <git@mq32.de>2020-06-16 00:41:57 +0200
committerFelix (xq) Queißner <git@mq32.de>2020-06-16 00:41:57 +0200
commit33c91102a58e2fbcf9d7a66e33b41a65fa3f0e0c (patch)
treea724f0c3dcc48c8ce1f78c2665fe8ef170acb379 /src/certificatemanagementdialog.cpp
parent5bb3f3f92e62a0af02fe475943759b8c25cd4592 (diff)
downloadkristall-33c91102a58e2fbcf9d7a66e33b41a65fa3f0e0c.tar.gz
Adds improved client certificate management, adds server certificate management.
Diffstat (limited to 'src/certificatemanagementdialog.cpp')
-rw-r--r--src/certificatemanagementdialog.cpp87
1 files changed, 84 insertions, 3 deletions
diff --git a/src/certificatemanagementdialog.cpp b/src/certificatemanagementdialog.cpp
index defa3cc..f1f1453 100644
--- a/src/certificatemanagementdialog.cpp
+++ b/src/certificatemanagementdialog.cpp
@@ -3,7 +3,10 @@
#include "kristall.hpp"
+#include "newidentitiydialog.hpp"
+
#include <QCryptographicHash>
+#include <QMessageBox>
CertificateManagementDialog::CertificateManagementDialog(QWidget *parent) :
QDialog(parent),
@@ -15,7 +18,13 @@ CertificateManagementDialog::CertificateManagementDialog(QWidget *parent) :
this->ui->certificates->setModel(&global_identities);
this->ui->certificates->expandAll();
- on_certificates_clicked(QModelIndex { });
+ connect(
+ this->ui->certificates->selectionModel(),
+ &QItemSelectionModel::currentChanged,
+ this,
+ &CertificateManagementDialog::on_certificates_selected
+ );
+ on_certificates_selected(QModelIndex { }, QModelIndex { });
}
CertificateManagementDialog::~CertificateManagementDialog()
@@ -23,11 +32,12 @@ CertificateManagementDialog::~CertificateManagementDialog()
delete ui;
}
-void CertificateManagementDialog::on_certificates_clicked(const QModelIndex &index)
+void CertificateManagementDialog::on_certificates_selected(QModelIndex const& index, QModelIndex const & previous)
{
+ Q_UNUSED(previous);
+
selected_identity = global_identities.getMutableIdentity(index);
- this->ui->delete_cert_button->setEnabled(selected_identity != nullptr);
this->ui->export_cert_button->setEnabled(selected_identity != nullptr);
if(selected_identity != nullptr)
@@ -43,6 +53,7 @@ void CertificateManagementDialog::on_certificates_clicked(const QModelIndex &ind
);
this->ui->cert_notes->setPlainText(cert.user_notes);
+ this->ui->delete_cert_button->setEnabled(true);
}
else
{
@@ -52,6 +63,12 @@ void CertificateManagementDialog::on_certificates_clicked(const QModelIndex &ind
this->ui->cert_expiration_date->setDateTime(QDateTime { });
this->ui->cert_livetime->setText("");
this->ui->cert_fingerprint->setPlainText("");
+
+ if(auto group_name = global_identities.group(index); not group_name.isEmpty()) {
+ this->ui->delete_cert_button->setEnabled(global_identities.canDeleteGroup(group_name));
+ } else {
+ this->ui->delete_cert_button->setEnabled(false);
+ }
}
}
@@ -68,3 +85,67 @@ void CertificateManagementDialog::on_cert_display_name_textChanged(const QString
this->selected_identity->display_name = this->ui->cert_display_name->text();
}
}
+
+void CertificateManagementDialog::on_delete_cert_button_clicked()
+{
+ auto index = this->ui->certificates->currentIndex();
+
+ if(global_identities.getMutableIdentity(index) != nullptr)
+ {
+ auto answer = QMessageBox::question(
+ this,
+ "Kristall",
+ "Do you really want to delete this certificate?\r\n\r\nYou will not be able to restore the identity after this!",
+ QMessageBox::Yes | QMessageBox::No,
+ QMessageBox::No
+ );
+ if(answer != QMessageBox::Yes)
+ return;
+ if(not global_identities.destroyIdentity(index)) {
+ QMessageBox::warning(this, "Kristall", "Could not destroy identity!");
+ }
+ }
+ else if(auto group_name = global_identities.group(index); not group_name.isEmpty()) {
+
+ auto answer = QMessageBox::question(
+ this,
+ "Kristall",
+ QString("Do you want to delete the group '%1'").arg(group_name)
+ );
+ if(answer != QMessageBox::Yes)
+ return;
+
+ if(not global_identities.deleteGroup(group_name)) {
+ QMessageBox::warning(this, "Kristall", "Could not delete group!");
+ }
+ }
+}
+
+void CertificateManagementDialog::on_export_cert_button_clicked()
+{
+
+}
+
+void CertificateManagementDialog::on_import_cert_button_clicked()
+{
+
+}
+
+void CertificateManagementDialog::on_create_cert_button_clicked()
+{
+ NewIdentitiyDialog dialog { this };
+
+ dialog.setGroupName(global_identities.group(this->ui->certificates->currentIndex()));
+
+ if(dialog.exec() != QDialog::Accepted)
+ return;
+
+ auto id = dialog.createIdentity();
+ if(not id.isValid())
+ return;
+ id.is_persistent = true;
+
+ global_identities.addCertificate(
+ dialog.groupName(),
+ id);
+}