aheinecke@404: /* Copyright (C) 2014 by Bundesamt für Sicherheit in der Informationstechnik aheinecke@404: * Software engineering by Intevation GmbH aheinecke@404: * aheinecke@404: * This file is Free Software under the GNU GPL (v>=2) aheinecke@404: * and comes with ABSOLUTELY NO WARRANTY! aheinecke@404: * See LICENSE.txt for details. aheinecke@404: */ rrenkert@367: #include "createcertlistdialog.h" aheinecke@454: #include "sslhelp.h" aheinecke@454: #include "administratorwindow.h" aheinecke@454: rrenkert@367: #include aheinecke@454: #include rrenkert@367: #include rrenkert@367: #include rrenkert@367: #include rrenkert@367: #include rrenkert@367: #include rrenkert@367: #include rrenkert@367: #include rrenkert@413: #include rrenkert@367: aheinecke@454: #include aheinecke@454: aheinecke@454: CreateCertListDialog::CreateCertListDialog(AdministratorWindow *parent) : aheinecke@454: QDialog(parent), aheinecke@454: mAdminWindow(parent), aheinecke@454: mPk(NULL) rrenkert@367: { rrenkert@413: setWindowTitle(tr("Save certificate list")); rrenkert@367: setupGUI(); rrenkert@413: resize(500, 200); aheinecke@454: mCertFile->setText(mAdminWindow->settings()->value("LastCert", QString()).toString()); rrenkert@367: } rrenkert@367: rrenkert@367: void CreateCertListDialog::setupGUI() rrenkert@367: { rrenkert@367: /* Top level layout / widgets */ rrenkert@367: QVBoxLayout *topLayout = new QVBoxLayout; rrenkert@413: QVBoxLayout *headerLayout = new QVBoxLayout; rrenkert@413: QHBoxLayout *headerSubLayout = new QHBoxLayout; rrenkert@428: QHBoxLayout *centerLayout = new QHBoxLayout; rrenkert@367: QHBoxLayout *bottomLayout = new QHBoxLayout; rrenkert@428: QVBoxLayout *labelLayout = new QVBoxLayout; rrenkert@428: QVBoxLayout *fieldLayout = new QVBoxLayout; rrenkert@428: QVBoxLayout *buttonLayout = new QVBoxLayout; rrenkert@367: rrenkert@413: QLabel *header = new QLabel("

" + tr("Save certificate list") + "

"); rrenkert@413: QLabel *description = new QLabel( rrenkert@426: tr("Save all managed root certificates in a new, signed certificate list.")); rrenkert@413: headerSubLayout->insertSpacing(0, 40); rrenkert@413: headerSubLayout->addWidget(description); rrenkert@413: QFrame *headerSeparator = new QFrame(); rrenkert@413: headerSeparator->setFrameShape(QFrame::HLine); rrenkert@413: headerSeparator->setFrameShadow(QFrame::Sunken); rrenkert@413: headerLayout->addWidget(header); rrenkert@413: headerLayout->addLayout(headerSubLayout); rrenkert@413: headerLayout->addWidget(headerSeparator); rrenkert@428: headerLayout->insertSpacing(3, 10); rrenkert@367: rrenkert@413: QLabel *certLabel = new QLabel("Select signature certificate (secret key):"); rrenkert@428: QLabel *saveLabel = new QLabel("Select output folder:"); rrenkert@428: labelLayout->addWidget(certLabel); rrenkert@428: labelLayout->addWidget(saveLabel); rrenkert@428: rrenkert@367: mCertFile = new QLineEdit(); rrenkert@428: mSaveFile = new QLineEdit(); rrenkert@428: fieldLayout->addWidget(mCertFile); rrenkert@428: fieldLayout->addWidget(mSaveFile); rrenkert@428: rrenkert@367: QPushButton *certSelect = new QPushButton("..."); rrenkert@367: certSelect->setFixedWidth(30); rrenkert@428: connect(certSelect, SIGNAL(clicked()), this, SLOT(openCertificateSelect())); rrenkert@367: QPushButton *saveSelect = new QPushButton("..."); rrenkert@367: connect(saveSelect, SIGNAL(clicked()), this, SLOT(openSaveLocation())); rrenkert@367: saveSelect->setFixedWidth(30); rrenkert@428: buttonLayout->addWidget(certSelect); rrenkert@428: buttonLayout->addWidget(saveSelect); rrenkert@413: rrenkert@426: QString footerText = tr("In addition, each certificate list will be saved " rrenkert@413: "automatically in the archive directory:\n"); rrenkert@426: footerText.append(QStandardPaths::writableLocation( rrenkert@426: QStandardPaths::DataLocation)); rrenkert@413: QLabel *footer = new QLabel(footerText); rrenkert@367: rrenkert@428: centerLayout->addLayout(labelLayout); rrenkert@428: centerLayout->addLayout(fieldLayout); rrenkert@428: centerLayout->addLayout(buttonLayout); rrenkert@367: rrenkert@428: QPushButton *create = new QPushButton(tr("Save list")); rrenkert@367: connect(create, SIGNAL(clicked()), this, SLOT(createList())); rrenkert@413: QPushButton *cancel = new QPushButton(tr("Cancel")); rrenkert@413: connect(cancel, SIGNAL(clicked()), this, SLOT(close())); rrenkert@367: bottomLayout->insertStretch(0, 10); rrenkert@367: bottomLayout->addWidget(create); rrenkert@413: bottomLayout->addWidget(cancel); rrenkert@413: rrenkert@413: QFrame *bottomSeparator = new QFrame(); rrenkert@413: bottomSeparator->setFrameShape(QFrame::HLine); rrenkert@413: bottomSeparator->setFrameShadow(QFrame::Sunken); rrenkert@367: rrenkert@367: topLayout->addLayout(headerLayout); rrenkert@367: topLayout->addLayout(centerLayout); rrenkert@367: topLayout->insertStretch(2, 10); rrenkert@413: topLayout->addWidget(footer); rrenkert@428: topLayout->insertSpacing(4, 10); rrenkert@413: topLayout->addWidget(bottomSeparator); rrenkert@367: topLayout->addLayout(bottomLayout); rrenkert@367: rrenkert@367: setLayout(topLayout); rrenkert@367: rrenkert@367: return; rrenkert@367: } rrenkert@367: aheinecke@454: void CreateCertListDialog::showErrorMessage(const QString &msg) aheinecke@454: { aheinecke@454: QMessageBox::warning(this, tr("Error!"), msg); aheinecke@454: } aheinecke@454: rrenkert@367: void CreateCertListDialog::openCertificateSelect() rrenkert@367: { rrenkert@367: QString certFile = QFileDialog::getOpenFileName( aheinecke@454: this, tr("Select certificate"), mCertFile->text().isEmpty() ? aheinecke@454: QDir::homePath() : mCertFile->text(), "*.pem"); rrenkert@367: mCertFile->setText(certFile); aheinecke@454: aheinecke@454: mAdminWindow->settings()->setValue("LastCert", certFile); aheinecke@454: aheinecke@454: if (mPk != NULL) { aheinecke@454: pk_free(mPk); aheinecke@454: delete mPk; aheinecke@454: mPk = NULL; aheinecke@454: } aheinecke@454: aheinecke@454: mPk = new pk_context; aheinecke@454: pk_init(mPk); aheinecke@454: int ret = pk_parse_keyfile(mPk, mCertFile->text().toLocal8Bit().constData(), ""); aheinecke@454: aheinecke@454: if (ret != 0) { aheinecke@454: showErrorMessage(tr("Failed to load certificate: %1") aheinecke@454: .arg(getPolarSSLErrorMsg(ret))); aheinecke@454: return; aheinecke@454: } rrenkert@367: } rrenkert@367: rrenkert@367: void CreateCertListDialog::openSaveLocation() rrenkert@367: { rrenkert@367: QString saveFile = QFileDialog::getExistingDirectory( rrenkert@367: this, tr("Select target location"), QDir::homePath()); rrenkert@367: mSaveFile->setText(saveFile); rrenkert@367: } rrenkert@367: rrenkert@367: void CreateCertListDialog::createList() rrenkert@367: { aheinecke@454: //entropy_context mEntropy; aheinecke@454: //ctr_drbg_context mCtr_drbg; aheinecke@454: rrenkert@367: qDebug() << "and now create the certificate list using:"; rrenkert@367: qDebug() << "certificate: " << mCertFile->text(); rrenkert@367: qDebug() << "target" << mSaveFile->text(); rrenkert@367: // TODO rrenkert@367: }