aboutsummaryrefslogtreecommitdiff
path: root/src/certificateiodialog.cpp
diff options
context:
space:
mode:
authorFelix (xq) Queißner <git@mq32.de>2020-06-20 10:35:43 +0200
committerFelix (xq) Queißner <git@mq32.de>2020-06-20 10:35:43 +0200
commit5a610c82fc4fc52d69cdd4773ad421e04c53840e (patch)
treea4aca77a306a2f07f86722bb6b5c80a0b61869b9 /src/certificateiodialog.cpp
parent7fe42f659e53092b314a0542871c417e768bb6da (diff)
downloadkristall-5a610c82fc4fc52d69cdd4773ad421e04c53840e.tar.gz
Starts implementation of certificate import/export.
Diffstat (limited to 'src/certificateiodialog.cpp')
-rw-r--r--src/certificateiodialog.cpp126
1 files changed, 126 insertions, 0 deletions
diff --git a/src/certificateiodialog.cpp b/src/certificateiodialog.cpp
new file mode 100644
index 0000000..8c9fcd5
--- /dev/null
+++ b/src/certificateiodialog.cpp
@@ -0,0 +1,126 @@
+#include "certificateiodialog.hpp"
+#include "ui_certificateiodialog.h"
+
+#include <QFileDialog>
+#include <QPushButton>
+#include <QSsl>
+
+CertificateIoDialog::CertificateIoDialog(QWidget *parent) :
+ QDialog(parent),
+ ui(new Ui::CertificateIoDialog)
+{
+ ui->setupUi(this);
+
+ this->ui->key_type->clear();
+ this->ui->key_type->addItem("RSA", QVariant::fromValue<int>(QSsl::Rsa));
+ this->ui->key_type->addItem("ECDSA", QVariant::fromValue<int>(QSsl::Ec));
+
+ this->updateUI();
+}
+
+CertificateIoDialog::~CertificateIoDialog()
+{
+ delete ui;
+}
+
+void CertificateIoDialog::setIoMode(CertificateIoDialog::IoMode mode)
+{
+ this->current_mode = mode;
+ if(mode == Export) {
+ this->setWindowTitle(tr("Export Certificate"));
+ } else {
+ this->setWindowTitle(tr("Import Certificate"));
+ }
+ this->ui->key_type->setEnabled(mode == Import);
+ this->updateUI();
+}
+
+QSsl::KeyAlgorithm CertificateIoDialog::keyAlgorithm() const
+{
+ return QSsl::KeyAlgorithm(this->ui->key_type->currentData().toInt());
+}
+
+void CertificateIoDialog::setKeyAlgorithm(QSsl::KeyAlgorithm alg)
+{
+ this->ui->key_type->setCurrentIndex(-1);
+ for(int i = 0; i< this->ui->key_type->count(); i++) {
+ if(this->ui->key_type->itemData(i).toInt() == int(alg)) {
+ this->ui->key_type->setCurrentIndex(i);
+ break;
+ }
+ }
+}
+
+QString CertificateIoDialog::keyFileName() const
+{
+ return this->ui->key_file_name->text();
+}
+
+QString CertificateIoDialog::certificateFileName() const
+{
+ return this->ui->certificate_file_name->text();
+}
+
+void CertificateIoDialog::on_select_certificate_file_button_clicked()
+{
+ QFileDialog dialog { this };
+
+ dialog.setNameFilter("Certificate File(*.pem *.der)");
+ dialog.setAcceptMode((this->current_mode == Export) ? QFileDialog::AcceptSave : QFileDialog::AcceptOpen);
+ dialog.selectFile(this->ui->certificate_file_name->text());
+
+ if(dialog.exec() != QDialog::Accepted)
+ return;
+
+ this->ui->certificate_file_name->setText(dialog.selectedFiles().first());
+
+ this->updateUI();
+}
+
+void CertificateIoDialog::on_select_key_file_button_clicked()
+{
+ QFileDialog dialog { this };
+
+ dialog.setNameFilter("Certificate File(*.pem *.der)");
+ dialog.setAcceptMode((this->current_mode == Export) ? QFileDialog::AcceptSave : QFileDialog::AcceptOpen);
+ dialog.selectFile(this->ui->key_file_name->text());
+
+ if(dialog.exec() != QDialog::Accepted)
+ return;
+
+ this->ui->key_file_name->setText(dialog.selectedFiles().first());
+
+ this->updateUI();
+}
+
+void CertificateIoDialog::on_certificate_file_name_textChanged(const QString &arg1)
+{
+ Q_UNUSED(arg1)
+ this->updateUI();
+}
+
+void CertificateIoDialog::on_key_file_name_textChanged(const QString &arg1)
+{
+ Q_UNUSED(arg1)
+ this->updateUI();
+}
+
+void CertificateIoDialog::updateUI()
+{
+ QString cert_file_name = certificateFileName();
+ QString key_file_name = keyFileName();
+
+ bool ok = true;
+
+ ok &= (cert_file_name.endsWith(".pem") or cert_file_name.endsWith(".der"));
+ ok &= (key_file_name.endsWith(".pem") or key_file_name.endsWith(".der"));
+
+ ok &= (this->ui->key_type->currentIndex() >= 0);
+
+ if(current_mode == Import) {
+ ok &= QFile(cert_file_name).exists();
+ ok &= QFile(key_file_name).exists();
+ }
+
+ this->ui->buttonBox->button(QDialogButtonBox::Ok)->setEnabled(ok);
+}