diff options
| author | Felix (xq) Queißner <git@mq32.de> | 2020-06-22 21:10:04 +0200 |
|---|---|---|
| committer | Felix (xq) Queißner <git@mq32.de> | 2020-06-22 21:10:04 +0200 |
| commit | 75ec461eeaa851cb5c53f4cfffc434e3e529ed1d (patch) | |
| tree | 3944737340718ca3675381aa06636045d397e780 /src/dialogs/certificateiodialog.cpp | |
| parent | 8dbfb0890560fd1cd698d06fa05ac868c4db8576 (diff) | |
| download | kristall-75ec461eeaa851cb5c53f4cfffc434e3e529ed1d.tar.gz | |
Restructures the project source and cleans up a bit
Diffstat (limited to 'src/dialogs/certificateiodialog.cpp')
| -rw-r--r-- | src/dialogs/certificateiodialog.cpp | 126 |
1 files changed, 126 insertions, 0 deletions
diff --git a/src/dialogs/certificateiodialog.cpp b/src/dialogs/certificateiodialog.cpp new file mode 100644 index 0000000..8c9fcd5 --- /dev/null +++ b/src/dialogs/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); +} |
