diff options
| author | Felix (xq) Queißner <git@mq32.de> | 2020-06-16 00:41:57 +0200 |
|---|---|---|
| committer | Felix (xq) Queißner <git@mq32.de> | 2020-06-16 00:41:57 +0200 |
| commit | 33c91102a58e2fbcf9d7a66e33b41a65fa3f0e0c (patch) | |
| tree | a724f0c3dcc48c8ce1f78c2665fe8ef170acb379 /src/certificatemanagementdialog.cpp | |
| parent | 5bb3f3f92e62a0af02fe475943759b8c25cd4592 (diff) | |
| download | kristall-33c91102a58e2fbcf9d7a66e33b41a65fa3f0e0c.tar.gz | |
Adds improved client certificate management, adds server certificate management.
Diffstat (limited to 'src/certificatemanagementdialog.cpp')
| -rw-r--r-- | src/certificatemanagementdialog.cpp | 87 |
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); +} |
