Mercurial > trustbridge
view ui/createcertlistdialog.cpp @ 464:2e100d3e414a
Add helper functions for sha256 sum and rsa signing
author | Andre Heinecke <aheinecke@intevation.de> |
---|---|
date | Wed, 23 Apr 2014 15:33:42 +0000 |
parents | efd1bd85112f |
children | 88dfe16a0bb9 |
line wrap: on
line source
/* Copyright (C) 2014 by Bundesamt für Sicherheit in der Informationstechnik * Software engineering by Intevation GmbH * * This file is Free Software under the GNU GPL (v>=2) * and comes with ABSOLUTELY NO WARRANTY! * See LICENSE.txt for details. */ #include "createcertlistdialog.h" #include "sslhelp.h" #include "administratorwindow.h" #include <QDebug> #include <QMessageBox> #include <QDir> #include <QPushButton> #include <QGroupBox> #include <QHBoxLayout> #include <QVBoxLayout> #include <QLabel> #include <QFileDialog> #include <QStandardPaths> #include <polarssl/pk.h> CreateCertListDialog::CreateCertListDialog(AdministratorWindow *parent) : QDialog(parent), mAdminWindow(parent), mPk(NULL) { setWindowTitle(tr("Save certificate list")); setupGUI(); resize(500, 200); mCertFile->setText(mAdminWindow->settings()->value("LastCert", QString()).toString()); } void CreateCertListDialog::setupGUI() { /* Top level layout / widgets */ QVBoxLayout *topLayout = new QVBoxLayout; QVBoxLayout *headerLayout = new QVBoxLayout; QHBoxLayout *headerSubLayout = new QHBoxLayout; QHBoxLayout *centerLayout = new QHBoxLayout; QHBoxLayout *bottomLayout = new QHBoxLayout; QVBoxLayout *labelLayout = new QVBoxLayout; QVBoxLayout *fieldLayout = new QVBoxLayout; QVBoxLayout *buttonLayout = new QVBoxLayout; QLabel *header = new QLabel("<h3>" + tr("Save certificate list") + "</h3>"); QLabel *description = new QLabel( tr("Save all managed root certificates in a new, signed certificate list.")); headerSubLayout->insertSpacing(0, 40); headerSubLayout->addWidget(description); QFrame *headerSeparator = new QFrame(); headerSeparator->setFrameShape(QFrame::HLine); headerSeparator->setFrameShadow(QFrame::Sunken); headerLayout->addWidget(header); headerLayout->addLayout(headerSubLayout); headerLayout->addWidget(headerSeparator); headerLayout->insertSpacing(3, 10); QLabel *certLabel = new QLabel("Select signature certificate (secret key):"); QLabel *saveLabel = new QLabel("Select output folder:"); labelLayout->addWidget(certLabel); labelLayout->addWidget(saveLabel); mCertFile = new QLineEdit(); mSaveFile = new QLineEdit(); fieldLayout->addWidget(mCertFile); fieldLayout->addWidget(mSaveFile); QPushButton *certSelect = new QPushButton("..."); certSelect->setFixedWidth(30); connect(certSelect, SIGNAL(clicked()), this, SLOT(openCertificateSelect())); QPushButton *saveSelect = new QPushButton("..."); connect(saveSelect, SIGNAL(clicked()), this, SLOT(openSaveLocation())); saveSelect->setFixedWidth(30); buttonLayout->addWidget(certSelect); buttonLayout->addWidget(saveSelect); QString footerText = tr("In addition, each certificate list will be saved " "automatically in the archive directory:\n"); footerText.append(QStandardPaths::writableLocation( QStandardPaths::DataLocation)); QLabel *footer = new QLabel(footerText); centerLayout->addLayout(labelLayout); centerLayout->addLayout(fieldLayout); centerLayout->addLayout(buttonLayout); QPushButton *create = new QPushButton(tr("Save list")); connect(create, SIGNAL(clicked()), this, SLOT(createList())); QPushButton *cancel = new QPushButton(tr("Cancel")); connect(cancel, SIGNAL(clicked()), this, SLOT(close())); bottomLayout->insertStretch(0, 10); bottomLayout->addWidget(create); bottomLayout->addWidget(cancel); QFrame *bottomSeparator = new QFrame(); bottomSeparator->setFrameShape(QFrame::HLine); bottomSeparator->setFrameShadow(QFrame::Sunken); topLayout->addLayout(headerLayout); topLayout->addLayout(centerLayout); topLayout->insertStretch(2, 10); topLayout->addWidget(footer); topLayout->insertSpacing(4, 10); topLayout->addWidget(bottomSeparator); topLayout->addLayout(bottomLayout); setLayout(topLayout); return; } void CreateCertListDialog::showErrorMessage(const QString &msg) { QMessageBox::warning(this, tr("Error!"), msg); } void CreateCertListDialog::openCertificateSelect() { QString certFile = QFileDialog::getOpenFileName( this, tr("Select certificate"), mCertFile->text().isEmpty() ? QDir::homePath() : mCertFile->text(), "*.pem"); mCertFile->setText(certFile); mAdminWindow->settings()->setValue("LastCert", certFile); if (mPk != NULL) { pk_free(mPk); delete mPk; mPk = NULL; } mPk = new pk_context; pk_init(mPk); int ret = pk_parse_keyfile(mPk, mCertFile->text().toLocal8Bit().constData(), ""); if (ret != 0) { showErrorMessage(tr("Failed to load certificate: %1") .arg(getPolarSSLErrorMsg(ret))); return; } } void CreateCertListDialog::openSaveLocation() { QString saveFile = QFileDialog::getExistingDirectory( this, tr("Select target location"), QDir::homePath()); mSaveFile->setText(saveFile); } void CreateCertListDialog::createList() { //entropy_context mEntropy; //ctr_drbg_context mCtr_drbg; qDebug() << "and now create the certificate list using:"; qDebug() << "certificate: " << mCertFile->text(); qDebug() << "target" << mSaveFile->text(); // TODO }