# HG changeset patch # User Andre Heinecke # Date 1398249382 0 # Node ID efd1bd85112f6e810cd6422ab30e0c80f99dac86 # Parent 6dec8101793c3dfc4096061d4ec5ad2c1b3b34b1 Save selected certificate in settings and parse it. diff -r 6dec8101793c -r efd1bd85112f ui/createcertlistdialog.cpp --- a/ui/createcertlistdialog.cpp Wed Apr 23 10:34:56 2014 +0000 +++ b/ui/createcertlistdialog.cpp Wed Apr 23 10:36:22 2014 +0000 @@ -6,7 +6,11 @@ * See LICENSE.txt for details. */ #include "createcertlistdialog.h" +#include "sslhelp.h" +#include "administratorwindow.h" + #include +#include #include #include #include @@ -16,12 +20,17 @@ #include #include -CreateCertListDialog::CreateCertListDialog(QMainWindow *parent) : - QDialog(parent) +#include + +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() @@ -70,10 +79,8 @@ QString footerText = tr("In addition, each certificate list will be saved " "automatically in the archive directory:\n"); - // TODO print out the path, not the displayName. footerText.append(QStandardPaths::writableLocation( QStandardPaths::DataLocation)); - //footerText.append(QStandardPaths::displayName(QStandardPaths::DataLocation)); QLabel *footer = new QLabel(footerText); centerLayout->addLayout(labelLayout); @@ -105,11 +112,35 @@ return; } +void CreateCertListDialog::showErrorMessage(const QString &msg) +{ + QMessageBox::warning(this, tr("Error!"), msg); +} + void CreateCertListDialog::openCertificateSelect() { QString certFile = QFileDialog::getOpenFileName( - this, tr("Select certificate"), QDir::homePath(), "*.pem *.der *.crt"); + 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() @@ -121,6 +152,9 @@ 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(); diff -r 6dec8101793c -r efd1bd85112f ui/createcertlistdialog.h --- a/ui/createcertlistdialog.h Wed Apr 23 10:34:56 2014 +0000 +++ b/ui/createcertlistdialog.h Wed Apr 23 10:36:22 2014 +0000 @@ -11,12 +11,15 @@ #include #include #include + +#include /** * @file createinstallerdialog.h * @brief The dialog to show settings and create an installer. */ class QListWidget; +class AdministratorWindow; class CreateCertListDialog : public QDialog { @@ -25,18 +28,35 @@ /** @brief Create a dialog showing settings for the create certificate list * process * */ - CreateCertListDialog(QMainWindow *parent); + CreateCertListDialog(AdministratorWindow *parent); private: void setupGUI(); QLineEdit *mCertFile; QLineEdit *mSaveFile; + AdministratorWindow *mAdminWindow; + + pk_context *mPk; private slots: + /** @brief Open the certificate selection dialog and parse the certificate + * + * If the certificate can be parsed mPk is replaced by the new key + * otherwise an error message is shown to the user. + */ void openCertificateSelect(); void openSaveLocation(); + /** @brief create a valid certificate list file + * + * The contents of the certificate list is the certificatelist + * of the adminWindow. It is signed with the currently + * loaded certificate in mPk. On errors the user is + * informed with showErrorMessage */ void createList(); + + /** @brief show an error message with QMessageBox */ + void showErrorMessage(const QString&msg); }; #endif // CREATECERTLISTDIALOG_H diff -r 6dec8101793c -r efd1bd85112f ui/l10n/administrator_de_DE.ts --- a/ui/l10n/administrator_de_DE.ts Wed Apr 23 10:34:56 2014 +0000 +++ b/ui/l10n/administrator_de_DE.ts Wed Apr 23 10:36:22 2014 +0000 @@ -176,8 +176,8 @@ CreateCertListDialog - - + + Save certificate list Zertifikatsliste speichern @@ -195,33 +195,43 @@ Liste signieren - + Save all managed root certificates in a new, signed certificate list. - + In addition, each certificate list will be saved automatically in the archive directory: - + Save list Liste speichern - + Cancel Abbrechen - + + Error! + + + + Select certificate Zertifikat auswählen - + + Failed to load certificate: %1 + + + + Select target location