Mercurial > trustbridge
comparison ui/createcertlistdialog.cpp @ 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 | 9cd28df2c4ce |
comparison
equal
deleted
inserted
replaced
465:88dfe16a0bb9 | 466:0d71ce440bcc |
---|---|
182 delete mPk; | 182 delete mPk; |
183 mPk = NULL; | 183 mPk = NULL; |
184 } | 184 } |
185 } | 185 } |
186 | 186 |
187 void CreateCertListDialog::createList() | 187 bool CreateCertListDialog::writeList(const QList<Certificate>& certs, |
188 { | 188 const QString& filePath, |
189 if (!mPk) { | 189 const QDateTime& listDate, |
190 showErrorMessage(tr("Please select a valid rsa key.")); | 190 pk_context *pk) |
191 } | 191 { |
192 if (mSaveDir->text().isEmpty()) { | |
193 showErrorMessage(tr("Please select an output location first.")); | |
194 } | |
195 | |
196 QDateTime currentDateTimeUtc = QDateTime::currentDateTimeUtc(); | |
197 | |
198 /* Build up the list data */ | 192 /* Build up the list data */ |
199 QByteArray listData("F:1\r\n"); | 193 QByteArray listData("F:1\r\n"); |
200 listData.append(currentDateTimeUtc.toString(Qt::ISODate) + "\r\n"); | 194 listData.append(listDate.toString(Qt::ISODate) + "\r\n"); |
201 | 195 |
202 foreach (const Certificate& cert, mAdminWindow->certificates()) { | 196 foreach (const Certificate& cert, certs) { |
203 listData.append(QString::fromLatin1("D:") + cert.base64Line() + "\r\n"); | 197 listData.append(QString::fromLatin1("D:") + cert.base64Line() + "\r\n"); |
204 } | 198 } |
205 | 199 |
206 QByteArray signature = rsaSignSHA256Hash(sha256sum(listData), mPk); | 200 QByteArray signature = rsaSignSHA256Hash(sha256sum(listData), pk); |
201 if (signature.size() != 3072 / 8) { | |
202 qDebug() << "Signature creation returned signature of invalid size."; | |
203 return false; | |
204 } | |
207 listData.prepend("\r\n"); | 205 listData.prepend("\r\n"); |
208 listData.prepend(signature.toBase64()); | 206 listData.prepend(signature.toBase64()); |
209 listData.prepend("S:"); | 207 listData.prepend("S:"); |
210 | 208 |
209 QFile outputFile(filePath); | |
210 | |
211 if (!outputFile.open(QIODevice::WriteOnly)) { | |
212 qDebug() << "Failed to open output file: " << filePath; | |
213 return false; | |
214 } | |
215 | |
216 if (outputFile.write(listData) != listData.size()) { | |
217 qDebug() << "Failed to write list: " << filePath; | |
218 outputFile.close(); | |
219 return false; | |
220 } | |
221 outputFile.close(); | |
222 return true; | |
223 } | |
224 | |
225 void CreateCertListDialog::createList() | |
226 { | |
227 if (!mPk) { | |
228 showErrorMessage(tr("Please select a valid rsa key.")); | |
229 } | |
230 if (mSaveDir->text().isEmpty()) { | |
231 showErrorMessage(tr("Please select an output location first.")); | |
232 } | |
233 | |
234 QDateTime currentDateTimeUtc = QDateTime::currentDateTimeUtc(); | |
235 | |
211 QString fileName = QString::fromLatin1("certificates-") | 236 QString fileName = QString::fromLatin1("certificates-") |
212 .append(currentDateTimeUtc.toString(("yyyyMMddHHmmss"))) | 237 .append(currentDateTimeUtc.toString(("yyyyMMddHHmmss"))) |
213 .append(".txt"); | 238 .append(".txt"); |
214 | 239 |
215 QString filePath = mSaveDir->text().append("/").append(fileName); | 240 QString filePath = mSaveDir->text().append("/").append(fileName); |
216 | 241 |
242 if (!writeList(mAdminWindow->certificates(), filePath, | |
243 currentDateTimeUtc, mPk)) { | |
244 showErrorMessage(tr("Failed to write list to: %1").arg(filePath)); | |
245 } | |
246 | |
217 QFile outputFile(filePath); | 247 QFile outputFile(filePath); |
218 | |
219 if (!outputFile.open(QIODevice::WriteOnly)) { | |
220 showErrorMessage(tr("Failed to open output file %1").arg(filePath)); | |
221 return; | |
222 } | |
223 | |
224 if (outputFile.write(listData) != listData.size()) { | |
225 showErrorMessage(tr("Failed to write certificate list.")); | |
226 return; | |
227 } | |
228 | 248 |
229 /* Archive the list */ | 249 /* Archive the list */ |
230 QDir archiveDir(QStandardPaths::writableLocation(QStandardPaths::DataLocation)); | 250 QDir archiveDir(QStandardPaths::writableLocation(QStandardPaths::DataLocation)); |
231 if (!archiveDir.mkpath(archiveDir.path())) { | 251 if (!archiveDir.mkpath(archiveDir.path())) { |
232 showErrorMessage(tr("Failed to create archive location.")); | 252 showErrorMessage(tr("Failed to create archive location.")); |