Mercurial > trustbridge
changeset 466:0d71ce440bcc
Factor out list creation to make it more testable
author | Andre Heinecke <aheinecke@intevation.de> |
---|---|
date | Wed, 23 Apr 2014 15:48:08 +0000 |
parents | 88dfe16a0bb9 |
children | 5ebee91c0bb8 |
files | ui/createcertlistdialog.cpp ui/createcertlistdialog.h ui/l10n/administrator_de_DE.ts |
diffstat | 3 files changed, 68 insertions(+), 38 deletions(-) [+] |
line wrap: on
line diff
--- a/ui/createcertlistdialog.cpp Wed Apr 23 15:34:53 2014 +0000 +++ b/ui/createcertlistdialog.cpp Wed Apr 23 15:48:08 2014 +0000 @@ -184,6 +184,44 @@ } } +bool CreateCertListDialog::writeList(const QList<Certificate>& certs, + const QString& filePath, + const QDateTime& listDate, + pk_context *pk) +{ + /* Build up the list data */ + QByteArray listData("F:1\r\n"); + listData.append(listDate.toString(Qt::ISODate) + "\r\n"); + + foreach (const Certificate& cert, certs) { + listData.append(QString::fromLatin1("D:") + cert.base64Line() + "\r\n"); + } + + QByteArray signature = rsaSignSHA256Hash(sha256sum(listData), pk); + if (signature.size() != 3072 / 8) { + qDebug() << "Signature creation returned signature of invalid size."; + return false; + } + listData.prepend("\r\n"); + listData.prepend(signature.toBase64()); + listData.prepend("S:"); + + QFile outputFile(filePath); + + if (!outputFile.open(QIODevice::WriteOnly)) { + qDebug() << "Failed to open output file: " << filePath; + return false; + } + + if (outputFile.write(listData) != listData.size()) { + qDebug() << "Failed to write list: " << filePath; + outputFile.close(); + return false; + } + outputFile.close(); + return true; +} + void CreateCertListDialog::createList() { if (!mPk) { @@ -195,36 +233,18 @@ QDateTime currentDateTimeUtc = QDateTime::currentDateTimeUtc(); - /* Build up the list data */ - QByteArray listData("F:1\r\n"); - listData.append(currentDateTimeUtc.toString(Qt::ISODate) + "\r\n"); - - foreach (const Certificate& cert, mAdminWindow->certificates()) { - listData.append(QString::fromLatin1("D:") + cert.base64Line() + "\r\n"); - } - - QByteArray signature = rsaSignSHA256Hash(sha256sum(listData), mPk); - listData.prepend("\r\n"); - listData.prepend(signature.toBase64()); - listData.prepend("S:"); - QString fileName = QString::fromLatin1("certificates-") .append(currentDateTimeUtc.toString(("yyyyMMddHHmmss"))) .append(".txt"); QString filePath = mSaveDir->text().append("/").append(fileName); - QFile outputFile(filePath); - - if (!outputFile.open(QIODevice::WriteOnly)) { - showErrorMessage(tr("Failed to open output file %1").arg(filePath)); - return; + if (!writeList(mAdminWindow->certificates(), filePath, + currentDateTimeUtc, mPk)) { + showErrorMessage(tr("Failed to write list to: %1").arg(filePath)); } - if (outputFile.write(listData) != listData.size()) { - showErrorMessage(tr("Failed to write certificate list.")); - return; - } + QFile outputFile(filePath); /* Archive the list */ QDir archiveDir(QStandardPaths::writableLocation(QStandardPaths::DataLocation));
--- a/ui/createcertlistdialog.h Wed Apr 23 15:34:53 2014 +0000 +++ b/ui/createcertlistdialog.h Wed Apr 23 15:48:08 2014 +0000 @@ -12,6 +12,8 @@ #include <QMainWindow> #include <QLineEdit> +#include "certificate.h" + #include <polarssl/pk.h> /** * @file createinstallerdialog.h @@ -31,6 +33,19 @@ CreateCertListDialog(AdministratorWindow *parent); ~CreateCertListDialog(); + /** @brief write a signed certificate list. + * + * @param [in] certs The certificates to include in the list + * @param [in] filePath The path where the list should be written to + * @param [in] listDate The date to write in the list + * @param [in] pk The private key to sign with. + * + * @returns true on success false on error. + */ + static bool writeList(const QList<Certificate>& certs, + const QString& filePath, const QDateTime& listDate, pk_context *pk); + + private: void setupGUI();
--- a/ui/l10n/administrator_de_DE.ts Wed Apr 23 15:34:53 2014 +0000 +++ b/ui/l10n/administrator_de_DE.ts Wed Apr 23 15:48:08 2014 +0000 @@ -226,6 +226,11 @@ <translation type="unfinished">Zertifikat auswählen</translation> </message> <message> + <location filename="../createcertlistdialog.cpp" line="244"/> + <source>Failed to write list to: %1</source> + <translation type="unfinished"></translation> + </message> + <message> <location filename="../createcertlistdialog.cpp" line="137"/> <source>Failed to load certificate: %1</source> <translation type="unfinished"></translation> @@ -241,42 +246,32 @@ <translation type="unfinished"></translation> </message> <message> - <location filename="../createcertlistdialog.cpp" line="190"/> + <location filename="../createcertlistdialog.cpp" line="228"/> <source>Please select a valid rsa key.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../createcertlistdialog.cpp" line="193"/> + <location filename="../createcertlistdialog.cpp" line="231"/> <source>Please select an output location first.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../createcertlistdialog.cpp" line="220"/> - <source>Failed to open output file %1</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../createcertlistdialog.cpp" line="225"/> - <source>Failed to write certificate list.</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../createcertlistdialog.cpp" line="232"/> + <location filename="../createcertlistdialog.cpp" line="252"/> <source>Failed to create archive location.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../createcertlistdialog.cpp" line="237"/> + <location filename="../createcertlistdialog.cpp" line="257"/> <source>Failed Archive a copy.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../createcertlistdialog.cpp" line="242"/> + <location filename="../createcertlistdialog.cpp" line="262"/> <source>Failed to write current_certificates file.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../createcertlistdialog.cpp" line="246"/> + <location filename="../createcertlistdialog.cpp" line="266"/> <source>Saved certificate list: %1</source> <translation type="unfinished"></translation>