[PATCH 3 of 3] Save selected certificate in settings and parse it
Wald Commits
scm-commit at wald.intevation.org
Wed Apr 23 12:36:35 CEST 2014
# HG changeset patch
# User Andre Heinecke <aheinecke at intevation.de>
# 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 <QDebug>
+#include <QMessageBox>
#include <QDir>
#include <QPushButton>
#include <QGroupBox>
@@ -16,12 +20,17 @@
#include <QFileDialog>
#include <QStandardPaths>
-CreateCertListDialog::CreateCertListDialog(QMainWindow *parent) :
- QDialog(parent)
+#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()
@@ -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 <QDialog>
#include <QMainWindow>
#include <QLineEdit>
+
+#include <polarssl/pk.h>
/**
* @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 @@
<context>
<name>CreateCertListDialog</name>
<message>
- <location filename="../createcertlistdialog.cpp" line="22"/>
- <location filename="../createcertlistdialog.cpp" line="39"/>
+ <location filename="../createcertlistdialog.cpp" line="30"/>
+ <location filename="../createcertlistdialog.cpp" line="48"/>
<source>Save certificate list</source>
<translation>Zertifikatsliste speichern</translation>
</message>
@@ -195,33 +195,43 @@
<translation type="obsolete">Liste signieren</translation>
</message>
<message>
- <location filename="../createcertlistdialog.cpp" line="41"/>
+ <location filename="../createcertlistdialog.cpp" line="50"/>
<source>Save all managed root certificates in a new, signed certificate list.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../createcertlistdialog.cpp" line="71"/>
+ <location filename="../createcertlistdialog.cpp" line="80"/>
<source>In addition, each certificate list will be saved automatically in the archive directory:
</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../createcertlistdialog.cpp" line="83"/>
+ <location filename="../createcertlistdialog.cpp" line="90"/>
<source>Save list</source>
<translation type="unfinished">Liste speichern</translation>
</message>
<message>
- <location filename="../createcertlistdialog.cpp" line="85"/>
+ <location filename="../createcertlistdialog.cpp" line="92"/>
<source>Cancel</source>
<translation>Abbrechen</translation>
</message>
<message>
- <location filename="../createcertlistdialog.cpp" line="111"/>
+ <location filename="../createcertlistdialog.cpp" line="117"/>
+ <source>Error!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../createcertlistdialog.cpp" line="123"/>
<source>Select certificate</source>
<translation type="unfinished">Zertifikat auswählen</translation>
</message>
<message>
- <location filename="../createcertlistdialog.cpp" line="118"/>
+ <location filename="../createcertlistdialog.cpp" line="140"/>
+ <source>Failed to load certificate: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../createcertlistdialog.cpp" line="149"/>
<source>Select target location</source>
<translation type="unfinished"></translation>
</message>
More information about the Trustbridge-commits
mailing list