Mercurial > trustbridge
annotate ui/createinstallerdialog.cpp @ 1368:41cf49df007d
(issue179) Add signature timestamp in linux installer packages
author | Andre Heinecke <andre.heinecke@intevation.de> |
---|---|
date | Mon, 24 Nov 2014 14:04:34 +0100 |
parents | 137a0686de7b |
children | c8a6a3e6bdeb |
rev | line source |
---|---|
404 | 1 /* Copyright (C) 2014 by Bundesamt für Sicherheit in der Informationstechnik |
2 * Software engineering by Intevation GmbH | |
3 * | |
4 * This file is Free Software under the GNU GPL (v>=2) | |
5 * and comes with ABSOLUTELY NO WARRANTY! | |
6 * See LICENSE.txt for details. | |
7 */ | |
361
b67dd46cd4a9
Added dialog to create a new, signed installer binary.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
8 #include "createinstallerdialog.h" |
761
49168bcb02e2
(Issue55) Sign a linux installer
Andre Heinecke <andre.heinecke@intevation.de>
parents:
571
diff
changeset
|
9 #include "sslhelp.h" |
49168bcb02e2
(Issue55) Sign a linux installer
Andre Heinecke <andre.heinecke@intevation.de>
parents:
571
diff
changeset
|
10 |
361
b67dd46cd4a9
Added dialog to create a new, signed installer binary.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
11 #include <QDebug> |
526
f6371e9c959a
Add a dialog when installer creation is done
Andre Heinecke <aheinecke@intevation.de>
parents:
518
diff
changeset
|
12 #include <QTextEdit> |
361
b67dd46cd4a9
Added dialog to create a new, signed installer binary.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
13 #include <QDir> |
b67dd46cd4a9
Added dialog to create a new, signed installer binary.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
14 #include <QPushButton> |
b67dd46cd4a9
Added dialog to create a new, signed installer binary.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
15 #include <QGroupBox> |
b67dd46cd4a9
Added dialog to create a new, signed installer binary.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
16 #include <QHBoxLayout> |
b67dd46cd4a9
Added dialog to create a new, signed installer binary.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
17 #include <QVBoxLayout> |
b67dd46cd4a9
Added dialog to create a new, signed installer binary.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
18 #include <QLabel> |
b67dd46cd4a9
Added dialog to create a new, signed installer binary.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
19 #include <QFileDialog> |
761
49168bcb02e2
(Issue55) Sign a linux installer
Andre Heinecke <andre.heinecke@intevation.de>
parents:
571
diff
changeset
|
20 #include <QSaveFile> |
515
9d3880db6ba7
Improve error handlig and persist user decisions
Andre Heinecke <aheinecke@intevation.de>
parents:
428
diff
changeset
|
21 #include <QSettings> |
526
f6371e9c959a
Add a dialog when installer creation is done
Andre Heinecke <aheinecke@intevation.de>
parents:
518
diff
changeset
|
22 #include <QStyle> |
f6371e9c959a
Add a dialog when installer creation is done
Andre Heinecke <aheinecke@intevation.de>
parents:
518
diff
changeset
|
23 #include <QApplication> |
515
9d3880db6ba7
Improve error handlig and persist user decisions
Andre Heinecke <aheinecke@intevation.de>
parents:
428
diff
changeset
|
24 #include <QMessageBox> |
571
6c4fff146999
Implement codesigning in the administrator tool
Andre Heinecke <aheinecke@intevation.de>
parents:
542
diff
changeset
|
25 #include <QTemporaryDir> |
1368
41cf49df007d
(issue179) Add signature timestamp in linux installer packages
Andre Heinecke <andre.heinecke@intevation.de>
parents:
1319
diff
changeset
|
26 #include <QDateTime> |
571
6c4fff146999
Implement codesigning in the administrator tool
Andre Heinecke <aheinecke@intevation.de>
parents:
542
diff
changeset
|
27 |
761
49168bcb02e2
(Issue55) Sign a linux installer
Andre Heinecke <andre.heinecke@intevation.de>
parents:
571
diff
changeset
|
28 #include <polarssl/pk.h> |
49168bcb02e2
(Issue55) Sign a linux installer
Andre Heinecke <andre.heinecke@intevation.de>
parents:
571
diff
changeset
|
29 |
571
6c4fff146999
Implement codesigning in the administrator tool
Andre Heinecke <aheinecke@intevation.de>
parents:
542
diff
changeset
|
30 /* Static information used in codesigning */ |
6c4fff146999
Implement codesigning in the administrator tool
Andre Heinecke <aheinecke@intevation.de>
parents:
542
diff
changeset
|
31 #ifndef SIGN_HASH |
6c4fff146999
Implement codesigning in the administrator tool
Andre Heinecke <aheinecke@intevation.de>
parents:
542
diff
changeset
|
32 #define SIGN_HASH "sha256" |
6c4fff146999
Implement codesigning in the administrator tool
Andre Heinecke <aheinecke@intevation.de>
parents:
542
diff
changeset
|
33 #endif |
6c4fff146999
Implement codesigning in the administrator tool
Andre Heinecke <aheinecke@intevation.de>
parents:
542
diff
changeset
|
34 #ifndef SIGN_URL |
852
637948e9e32d
(issue61) Change temporary link into wald from https to http
Andre Heinecke <andre.heinecke@intevation.de>
parents:
781
diff
changeset
|
35 #define SIGN_URL "http://wald.intevation.org/projects/trustbridge/" |
571
6c4fff146999
Implement codesigning in the administrator tool
Andre Heinecke <aheinecke@intevation.de>
parents:
542
diff
changeset
|
36 #endif |
6c4fff146999
Implement codesigning in the administrator tool
Andre Heinecke <aheinecke@intevation.de>
parents:
542
diff
changeset
|
37 #ifndef SIGN_PUBLISHER |
6c4fff146999
Implement codesigning in the administrator tool
Andre Heinecke <aheinecke@intevation.de>
parents:
542
diff
changeset
|
38 #define SIGN_PUBLISHER "TrustBridge Test with ümlaut" |
6c4fff146999
Implement codesigning in the administrator tool
Andre Heinecke <aheinecke@intevation.de>
parents:
542
diff
changeset
|
39 #endif |
6c4fff146999
Implement codesigning in the administrator tool
Andre Heinecke <aheinecke@intevation.de>
parents:
542
diff
changeset
|
40 |
361
b67dd46cd4a9
Added dialog to create a new, signed installer binary.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
41 CreateInstallerDialog::CreateInstallerDialog(QMainWindow *parent) : |
516
3332db04c77d
Call makensis in create installer dialog
Andre Heinecke <aheinecke@intevation.de>
parents:
515
diff
changeset
|
42 QDialog(parent), |
571
6c4fff146999
Implement codesigning in the administrator tool
Andre Heinecke <aheinecke@intevation.de>
parents:
542
diff
changeset
|
43 mProgress(this), |
6c4fff146999
Implement codesigning in the administrator tool
Andre Heinecke <aheinecke@intevation.de>
parents:
542
diff
changeset
|
44 mInstallerPath(), |
6c4fff146999
Implement codesigning in the administrator tool
Andre Heinecke <aheinecke@intevation.de>
parents:
542
diff
changeset
|
45 mCurrentWorkingDir(NULL) |
361
b67dd46cd4a9
Added dialog to create a new, signed installer binary.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
46 { |
515
9d3880db6ba7
Improve error handlig and persist user decisions
Andre Heinecke <aheinecke@intevation.de>
parents:
428
diff
changeset
|
47 QSettings settings; |
414
3d803d383b41
Wording and layout in TrustBridge administration create binary dialog.
Raimund Renkert <rrenkert@intevation.de>
parents:
404
diff
changeset
|
48 setWindowTitle(tr("Create binary installer")); |
361
b67dd46cd4a9
Added dialog to create a new, signed installer binary.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
49 setupGUI(); |
414
3d803d383b41
Wording and layout in TrustBridge administration create binary dialog.
Raimund Renkert <rrenkert@intevation.de>
parents:
404
diff
changeset
|
50 resize(500, 250); |
515
9d3880db6ba7
Improve error handlig and persist user decisions
Andre Heinecke <aheinecke@intevation.de>
parents:
428
diff
changeset
|
51 mCertFile->setText(settings.value("CodeSignCert", QString()).toString()); |
9d3880db6ba7
Improve error handlig and persist user decisions
Andre Heinecke <aheinecke@intevation.de>
parents:
428
diff
changeset
|
52 mBinaryFolder->setText(settings.value("LastBinaryFolder", QString()).toString()); |
9d3880db6ba7
Improve error handlig and persist user decisions
Andre Heinecke <aheinecke@intevation.de>
parents:
428
diff
changeset
|
53 mSaveFile->setText(settings.value("LastBinOutputFolder", QString()).toString()); |
516
3332db04c77d
Call makensis in create installer dialog
Andre Heinecke <aheinecke@intevation.de>
parents:
515
diff
changeset
|
54 |
3332db04c77d
Call makensis in create installer dialog
Andre Heinecke <aheinecke@intevation.de>
parents:
515
diff
changeset
|
55 connect(&mNSISProc, SIGNAL(finished(int, QProcess::ExitStatus)), |
3332db04c77d
Call makensis in create installer dialog
Andre Heinecke <aheinecke@intevation.de>
parents:
515
diff
changeset
|
56 this, SLOT(processFinished(int, QProcess::ExitStatus))); |
3332db04c77d
Call makensis in create installer dialog
Andre Heinecke <aheinecke@intevation.de>
parents:
515
diff
changeset
|
57 connect(&mNSISProc, SIGNAL(error(QProcess::ProcessError)), |
3332db04c77d
Call makensis in create installer dialog
Andre Heinecke <aheinecke@intevation.de>
parents:
515
diff
changeset
|
58 this, SLOT(processError(QProcess::ProcessError))); |
361
b67dd46cd4a9
Added dialog to create a new, signed installer binary.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
59 } |
b67dd46cd4a9
Added dialog to create a new, signed installer binary.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
60 |
b67dd46cd4a9
Added dialog to create a new, signed installer binary.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
61 void CreateInstallerDialog::setupGUI() |
b67dd46cd4a9
Added dialog to create a new, signed installer binary.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
62 { |
b67dd46cd4a9
Added dialog to create a new, signed installer binary.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
63 /* Top level layout / widgets */ |
b67dd46cd4a9
Added dialog to create a new, signed installer binary.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
64 QVBoxLayout *topLayout = new QVBoxLayout; |
414
3d803d383b41
Wording and layout in TrustBridge administration create binary dialog.
Raimund Renkert <rrenkert@intevation.de>
parents:
404
diff
changeset
|
65 QVBoxLayout *headerLayout = new QVBoxLayout; |
3d803d383b41
Wording and layout in TrustBridge administration create binary dialog.
Raimund Renkert <rrenkert@intevation.de>
parents:
404
diff
changeset
|
66 QHBoxLayout *headerSubLayout = new QHBoxLayout; |
428
d1819cd56dee
Updated dialog layout.
Raimund Renkert <rrenkert@intevation.de>
parents:
426
diff
changeset
|
67 QHBoxLayout *centerLayout = new QHBoxLayout; |
361
b67dd46cd4a9
Added dialog to create a new, signed installer binary.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
68 QHBoxLayout *bottomLayout = new QHBoxLayout; |
428
d1819cd56dee
Updated dialog layout.
Raimund Renkert <rrenkert@intevation.de>
parents:
426
diff
changeset
|
69 QVBoxLayout *labelLayout = new QVBoxLayout; |
d1819cd56dee
Updated dialog layout.
Raimund Renkert <rrenkert@intevation.de>
parents:
426
diff
changeset
|
70 QVBoxLayout *fieldLayout = new QVBoxLayout; |
d1819cd56dee
Updated dialog layout.
Raimund Renkert <rrenkert@intevation.de>
parents:
426
diff
changeset
|
71 QVBoxLayout *buttonLayout = new QVBoxLayout; |
361
b67dd46cd4a9
Added dialog to create a new, signed installer binary.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
72 |
414
3d803d383b41
Wording and layout in TrustBridge administration create binary dialog.
Raimund Renkert <rrenkert@intevation.de>
parents:
404
diff
changeset
|
73 QLabel *header = new QLabel("<h3>" + tr("Create binary installer") + "</h3>"); |
3d803d383b41
Wording and layout in TrustBridge administration create binary dialog.
Raimund Renkert <rrenkert@intevation.de>
parents:
404
diff
changeset
|
74 QLabel *description = new QLabel( |
515
9d3880db6ba7
Improve error handlig and persist user decisions
Andre Heinecke <aheinecke@intevation.de>
parents:
428
diff
changeset
|
75 tr("Create and sign a TrustBridge binary installer.")); |
414
3d803d383b41
Wording and layout in TrustBridge administration create binary dialog.
Raimund Renkert <rrenkert@intevation.de>
parents:
404
diff
changeset
|
76 headerSubLayout->insertSpacing(0, 40); |
3d803d383b41
Wording and layout in TrustBridge administration create binary dialog.
Raimund Renkert <rrenkert@intevation.de>
parents:
404
diff
changeset
|
77 headerSubLayout->addWidget(description); |
3d803d383b41
Wording and layout in TrustBridge administration create binary dialog.
Raimund Renkert <rrenkert@intevation.de>
parents:
404
diff
changeset
|
78 QFrame *headerSeparator = new QFrame(); |
3d803d383b41
Wording and layout in TrustBridge administration create binary dialog.
Raimund Renkert <rrenkert@intevation.de>
parents:
404
diff
changeset
|
79 headerSeparator->setFrameShape(QFrame::HLine); |
3d803d383b41
Wording and layout in TrustBridge administration create binary dialog.
Raimund Renkert <rrenkert@intevation.de>
parents:
404
diff
changeset
|
80 headerSeparator->setFrameShadow(QFrame::Sunken); |
3d803d383b41
Wording and layout in TrustBridge administration create binary dialog.
Raimund Renkert <rrenkert@intevation.de>
parents:
404
diff
changeset
|
81 headerLayout->addWidget(header); |
3d803d383b41
Wording and layout in TrustBridge administration create binary dialog.
Raimund Renkert <rrenkert@intevation.de>
parents:
404
diff
changeset
|
82 headerLayout->addLayout(headerSubLayout); |
3d803d383b41
Wording and layout in TrustBridge administration create binary dialog.
Raimund Renkert <rrenkert@intevation.de>
parents:
404
diff
changeset
|
83 headerLayout->addWidget(headerSeparator); |
428
d1819cd56dee
Updated dialog layout.
Raimund Renkert <rrenkert@intevation.de>
parents:
426
diff
changeset
|
84 headerLayout->insertSpacing(4, 10); |
361
b67dd46cd4a9
Added dialog to create a new, signed installer binary.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
85 |
515
9d3880db6ba7
Improve error handlig and persist user decisions
Andre Heinecke <aheinecke@intevation.de>
parents:
428
diff
changeset
|
86 QLabel *archiveLabel = new QLabel(tr("Select binary folder:")); |
9d3880db6ba7
Improve error handlig and persist user decisions
Andre Heinecke <aheinecke@intevation.de>
parents:
428
diff
changeset
|
87 QLabel *certLabel = new QLabel(tr("Select code signing certificate:")); |
428
d1819cd56dee
Updated dialog layout.
Raimund Renkert <rrenkert@intevation.de>
parents:
426
diff
changeset
|
88 QLabel *saveLabel = new QLabel(tr("Select output folder:")); |
d1819cd56dee
Updated dialog layout.
Raimund Renkert <rrenkert@intevation.de>
parents:
426
diff
changeset
|
89 labelLayout->addWidget(archiveLabel); |
d1819cd56dee
Updated dialog layout.
Raimund Renkert <rrenkert@intevation.de>
parents:
426
diff
changeset
|
90 labelLayout->addWidget(certLabel); |
d1819cd56dee
Updated dialog layout.
Raimund Renkert <rrenkert@intevation.de>
parents:
426
diff
changeset
|
91 labelLayout->addWidget(saveLabel); |
d1819cd56dee
Updated dialog layout.
Raimund Renkert <rrenkert@intevation.de>
parents:
426
diff
changeset
|
92 |
515
9d3880db6ba7
Improve error handlig and persist user decisions
Andre Heinecke <aheinecke@intevation.de>
parents:
428
diff
changeset
|
93 mBinaryFolder = new QLineEdit(); |
428
d1819cd56dee
Updated dialog layout.
Raimund Renkert <rrenkert@intevation.de>
parents:
426
diff
changeset
|
94 mCertFile = new QLineEdit(); |
d1819cd56dee
Updated dialog layout.
Raimund Renkert <rrenkert@intevation.de>
parents:
426
diff
changeset
|
95 mSaveFile = new QLineEdit(); |
515
9d3880db6ba7
Improve error handlig and persist user decisions
Andre Heinecke <aheinecke@intevation.de>
parents:
428
diff
changeset
|
96 fieldLayout->addWidget(mBinaryFolder); |
428
d1819cd56dee
Updated dialog layout.
Raimund Renkert <rrenkert@intevation.de>
parents:
426
diff
changeset
|
97 fieldLayout->addWidget(mCertFile); |
d1819cd56dee
Updated dialog layout.
Raimund Renkert <rrenkert@intevation.de>
parents:
426
diff
changeset
|
98 fieldLayout->addWidget(mSaveFile); |
d1819cd56dee
Updated dialog layout.
Raimund Renkert <rrenkert@intevation.de>
parents:
426
diff
changeset
|
99 |
361
b67dd46cd4a9
Added dialog to create a new, signed installer binary.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
100 QPushButton *archiveSelect = new QPushButton("..."); |
515
9d3880db6ba7
Improve error handlig and persist user decisions
Andre Heinecke <aheinecke@intevation.de>
parents:
428
diff
changeset
|
101 connect(archiveSelect, SIGNAL(clicked()), this, SLOT(openFolderSelect())); |
361
b67dd46cd4a9
Added dialog to create a new, signed installer binary.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
102 archiveSelect->setFixedWidth(30); |
b67dd46cd4a9
Added dialog to create a new, signed installer binary.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
103 QPushButton *certSelect = new QPushButton("..."); |
b67dd46cd4a9
Added dialog to create a new, signed installer binary.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
104 connect(certSelect, SIGNAL(clicked()), this, SLOT(openCertificateSelect())); |
b67dd46cd4a9
Added dialog to create a new, signed installer binary.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
105 certSelect->setFixedWidth(30); |
b67dd46cd4a9
Added dialog to create a new, signed installer binary.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
106 QPushButton *saveSelect = new QPushButton("..."); |
b67dd46cd4a9
Added dialog to create a new, signed installer binary.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
107 connect(saveSelect, SIGNAL(clicked()), this, SLOT(openSaveLocation())); |
b67dd46cd4a9
Added dialog to create a new, signed installer binary.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
108 saveSelect->setFixedWidth(30); |
428
d1819cd56dee
Updated dialog layout.
Raimund Renkert <rrenkert@intevation.de>
parents:
426
diff
changeset
|
109 buttonLayout->addWidget(archiveSelect); |
d1819cd56dee
Updated dialog layout.
Raimund Renkert <rrenkert@intevation.de>
parents:
426
diff
changeset
|
110 buttonLayout->addWidget(certSelect); |
d1819cd56dee
Updated dialog layout.
Raimund Renkert <rrenkert@intevation.de>
parents:
426
diff
changeset
|
111 buttonLayout->addWidget(saveSelect); |
361
b67dd46cd4a9
Added dialog to create a new, signed installer binary.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
112 |
428
d1819cd56dee
Updated dialog layout.
Raimund Renkert <rrenkert@intevation.de>
parents:
426
diff
changeset
|
113 centerLayout->addLayout(labelLayout); |
d1819cd56dee
Updated dialog layout.
Raimund Renkert <rrenkert@intevation.de>
parents:
426
diff
changeset
|
114 centerLayout->addLayout(fieldLayout); |
d1819cd56dee
Updated dialog layout.
Raimund Renkert <rrenkert@intevation.de>
parents:
426
diff
changeset
|
115 centerLayout->addLayout(buttonLayout); |
361
b67dd46cd4a9
Added dialog to create a new, signed installer binary.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
116 |
414
3d803d383b41
Wording and layout in TrustBridge administration create binary dialog.
Raimund Renkert <rrenkert@intevation.de>
parents:
404
diff
changeset
|
117 QPushButton *create = new QPushButton(tr("Create installer")); |
361
b67dd46cd4a9
Added dialog to create a new, signed installer binary.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
118 connect(create, SIGNAL(clicked()), this, SLOT(createInstaller())); |
414
3d803d383b41
Wording and layout in TrustBridge administration create binary dialog.
Raimund Renkert <rrenkert@intevation.de>
parents:
404
diff
changeset
|
119 QPushButton *cancel = new QPushButton(tr("Cancel")); |
3d803d383b41
Wording and layout in TrustBridge administration create binary dialog.
Raimund Renkert <rrenkert@intevation.de>
parents:
404
diff
changeset
|
120 connect(cancel, SIGNAL(clicked()), this, SLOT(close())); |
361
b67dd46cd4a9
Added dialog to create a new, signed installer binary.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
121 bottomLayout->insertStretch(0, 10); |
b67dd46cd4a9
Added dialog to create a new, signed installer binary.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
122 bottomLayout->addWidget(create); |
414
3d803d383b41
Wording and layout in TrustBridge administration create binary dialog.
Raimund Renkert <rrenkert@intevation.de>
parents:
404
diff
changeset
|
123 bottomLayout->addWidget(cancel); |
3d803d383b41
Wording and layout in TrustBridge administration create binary dialog.
Raimund Renkert <rrenkert@intevation.de>
parents:
404
diff
changeset
|
124 |
3d803d383b41
Wording and layout in TrustBridge administration create binary dialog.
Raimund Renkert <rrenkert@intevation.de>
parents:
404
diff
changeset
|
125 QFrame *bottomSeparator = new QFrame(); |
3d803d383b41
Wording and layout in TrustBridge administration create binary dialog.
Raimund Renkert <rrenkert@intevation.de>
parents:
404
diff
changeset
|
126 bottomSeparator->setFrameShape(QFrame::HLine); |
3d803d383b41
Wording and layout in TrustBridge administration create binary dialog.
Raimund Renkert <rrenkert@intevation.de>
parents:
404
diff
changeset
|
127 bottomSeparator->setFrameShadow(QFrame::Sunken); |
361
b67dd46cd4a9
Added dialog to create a new, signed installer binary.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
128 |
b67dd46cd4a9
Added dialog to create a new, signed installer binary.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
129 topLayout->addLayout(headerLayout); |
b67dd46cd4a9
Added dialog to create a new, signed installer binary.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
130 topLayout->addLayout(centerLayout); |
b67dd46cd4a9
Added dialog to create a new, signed installer binary.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
131 topLayout->insertStretch(2, 10); |
428
d1819cd56dee
Updated dialog layout.
Raimund Renkert <rrenkert@intevation.de>
parents:
426
diff
changeset
|
132 centerLayout->insertSpacing(3, 10); |
414
3d803d383b41
Wording and layout in TrustBridge administration create binary dialog.
Raimund Renkert <rrenkert@intevation.de>
parents:
404
diff
changeset
|
133 topLayout->addWidget(bottomSeparator); |
361
b67dd46cd4a9
Added dialog to create a new, signed installer binary.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
134 topLayout->addLayout(bottomLayout); |
b67dd46cd4a9
Added dialog to create a new, signed installer binary.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
135 |
b67dd46cd4a9
Added dialog to create a new, signed installer binary.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
136 setLayout(topLayout); |
b67dd46cd4a9
Added dialog to create a new, signed installer binary.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
137 |
516
3332db04c77d
Call makensis in create installer dialog
Andre Heinecke <aheinecke@intevation.de>
parents:
515
diff
changeset
|
138 mProgress.setWindowModality(Qt::WindowModal); |
3332db04c77d
Call makensis in create installer dialog
Andre Heinecke <aheinecke@intevation.de>
parents:
515
diff
changeset
|
139 mProgress.setCancelButton(0); |
3332db04c77d
Call makensis in create installer dialog
Andre Heinecke <aheinecke@intevation.de>
parents:
515
diff
changeset
|
140 mProgress.setRange(0,0); |
3332db04c77d
Call makensis in create installer dialog
Andre Heinecke <aheinecke@intevation.de>
parents:
515
diff
changeset
|
141 mProgress.setMinimumDuration(0); |
3332db04c77d
Call makensis in create installer dialog
Andre Heinecke <aheinecke@intevation.de>
parents:
515
diff
changeset
|
142 |
361
b67dd46cd4a9
Added dialog to create a new, signed installer binary.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
143 return; |
b67dd46cd4a9
Added dialog to create a new, signed installer binary.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
144 } |
b67dd46cd4a9
Added dialog to create a new, signed installer binary.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
145 |
b67dd46cd4a9
Added dialog to create a new, signed installer binary.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
146 void CreateInstallerDialog::openCertificateSelect() |
b67dd46cd4a9
Added dialog to create a new, signed installer binary.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
147 { |
515
9d3880db6ba7
Improve error handlig and persist user decisions
Andre Heinecke <aheinecke@intevation.de>
parents:
428
diff
changeset
|
148 QSettings settings; |
361
b67dd46cd4a9
Added dialog to create a new, signed installer binary.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
149 QString certFile = QFileDialog::getOpenFileName( |
515
9d3880db6ba7
Improve error handlig and persist user decisions
Andre Heinecke <aheinecke@intevation.de>
parents:
428
diff
changeset
|
150 this, tr("Select certificate"), |
9d3880db6ba7
Improve error handlig and persist user decisions
Andre Heinecke <aheinecke@intevation.de>
parents:
428
diff
changeset
|
151 mCertFile->text().isEmpty() ? QDir::homePath() : mCertFile->text(), |
9d3880db6ba7
Improve error handlig and persist user decisions
Andre Heinecke <aheinecke@intevation.de>
parents:
428
diff
changeset
|
152 "*.pem *.der *.crt"); |
9d3880db6ba7
Improve error handlig and persist user decisions
Andre Heinecke <aheinecke@intevation.de>
parents:
428
diff
changeset
|
153 settings.setValue("CodeSignCert", certFile); |
361
b67dd46cd4a9
Added dialog to create a new, signed installer binary.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
154 mCertFile->setText(certFile); |
b67dd46cd4a9
Added dialog to create a new, signed installer binary.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
155 } |
b67dd46cd4a9
Added dialog to create a new, signed installer binary.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
156 |
515
9d3880db6ba7
Improve error handlig and persist user decisions
Andre Heinecke <aheinecke@intevation.de>
parents:
428
diff
changeset
|
157 void CreateInstallerDialog::openFolderSelect() |
361
b67dd46cd4a9
Added dialog to create a new, signed installer binary.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
158 { |
515
9d3880db6ba7
Improve error handlig and persist user decisions
Andre Heinecke <aheinecke@intevation.de>
parents:
428
diff
changeset
|
159 QSettings settings; |
9d3880db6ba7
Improve error handlig and persist user decisions
Andre Heinecke <aheinecke@intevation.de>
parents:
428
diff
changeset
|
160 QString archiveFolder = QFileDialog::getExistingDirectory( |
9d3880db6ba7
Improve error handlig and persist user decisions
Andre Heinecke <aheinecke@intevation.de>
parents:
428
diff
changeset
|
161 this, tr("Select binary folder"), |
9d3880db6ba7
Improve error handlig and persist user decisions
Andre Heinecke <aheinecke@intevation.de>
parents:
428
diff
changeset
|
162 mBinaryFolder->text().isEmpty() ? QDir::homePath() : mBinaryFolder->text()); |
9d3880db6ba7
Improve error handlig and persist user decisions
Andre Heinecke <aheinecke@intevation.de>
parents:
428
diff
changeset
|
163 mBinaryFolder->setText(archiveFolder); |
9d3880db6ba7
Improve error handlig and persist user decisions
Andre Heinecke <aheinecke@intevation.de>
parents:
428
diff
changeset
|
164 settings.setValue("LastBinaryFolder", archiveFolder); |
361
b67dd46cd4a9
Added dialog to create a new, signed installer binary.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
165 } |
b67dd46cd4a9
Added dialog to create a new, signed installer binary.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
166 |
b67dd46cd4a9
Added dialog to create a new, signed installer binary.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
167 void CreateInstallerDialog::openSaveLocation() |
b67dd46cd4a9
Added dialog to create a new, signed installer binary.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
168 { |
515
9d3880db6ba7
Improve error handlig and persist user decisions
Andre Heinecke <aheinecke@intevation.de>
parents:
428
diff
changeset
|
169 QSettings settings; |
361
b67dd46cd4a9
Added dialog to create a new, signed installer binary.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
170 QString saveFile = QFileDialog::getExistingDirectory( |
515
9d3880db6ba7
Improve error handlig and persist user decisions
Andre Heinecke <aheinecke@intevation.de>
parents:
428
diff
changeset
|
171 this, tr("Select target location"), |
9d3880db6ba7
Improve error handlig and persist user decisions
Andre Heinecke <aheinecke@intevation.de>
parents:
428
diff
changeset
|
172 mSaveFile->text().isEmpty() ? QDir::homePath() : mSaveFile->text()); |
361
b67dd46cd4a9
Added dialog to create a new, signed installer binary.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
173 mSaveFile->setText(saveFile); |
515
9d3880db6ba7
Improve error handlig and persist user decisions
Andre Heinecke <aheinecke@intevation.de>
parents:
428
diff
changeset
|
174 settings.setValue("LastBinOutputFolder", saveFile); |
9d3880db6ba7
Improve error handlig and persist user decisions
Andre Heinecke <aheinecke@intevation.de>
parents:
428
diff
changeset
|
175 } |
9d3880db6ba7
Improve error handlig and persist user decisions
Andre Heinecke <aheinecke@intevation.de>
parents:
428
diff
changeset
|
176 |
9d3880db6ba7
Improve error handlig and persist user decisions
Andre Heinecke <aheinecke@intevation.de>
parents:
428
diff
changeset
|
177 void CreateInstallerDialog::showErrorMessage(const QString &msg) |
9d3880db6ba7
Improve error handlig and persist user decisions
Andre Heinecke <aheinecke@intevation.de>
parents:
428
diff
changeset
|
178 { |
9d3880db6ba7
Improve error handlig and persist user decisions
Andre Heinecke <aheinecke@intevation.de>
parents:
428
diff
changeset
|
179 QMessageBox::warning(this, tr("Error!"), msg); |
361
b67dd46cd4a9
Added dialog to create a new, signed installer binary.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
180 } |
b67dd46cd4a9
Added dialog to create a new, signed installer binary.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
181 |
516
3332db04c77d
Call makensis in create installer dialog
Andre Heinecke <aheinecke@intevation.de>
parents:
515
diff
changeset
|
182 void CreateInstallerDialog::processFinished(int exitCode, QProcess::ExitStatus exitStatus) |
3332db04c77d
Call makensis in create installer dialog
Andre Heinecke <aheinecke@intevation.de>
parents:
515
diff
changeset
|
183 { |
571
6c4fff146999
Implement codesigning in the administrator tool
Andre Heinecke <aheinecke@intevation.de>
parents:
542
diff
changeset
|
184 if (mCurrentWorkingDir) { |
6c4fff146999
Implement codesigning in the administrator tool
Andre Heinecke <aheinecke@intevation.de>
parents:
542
diff
changeset
|
185 delete mCurrentWorkingDir; |
6c4fff146999
Implement codesigning in the administrator tool
Andre Heinecke <aheinecke@intevation.de>
parents:
542
diff
changeset
|
186 mCurrentWorkingDir = NULL; |
6c4fff146999
Implement codesigning in the administrator tool
Andre Heinecke <aheinecke@intevation.de>
parents:
542
diff
changeset
|
187 } |
526
f6371e9c959a
Add a dialog when installer creation is done
Andre Heinecke <aheinecke@intevation.de>
parents:
518
diff
changeset
|
188 FinishedDialog *fin = new FinishedDialog(0, tr("Created installer in %1.") |
542
421b69eeffe3
Actually write the installer to the output folder
Andre Heinecke <aheinecke@intevation.de>
parents:
541
diff
changeset
|
189 .arg(mSaveFile->text()), mNSISProc.readAll(), false); |
518
31e0a86f5a35
Actually set the arguments for makensis process. Fix escaping
Andre Heinecke <aheinecke@intevation.de>
parents:
516
diff
changeset
|
190 qDebug() << "Finished: " << mNSISProc.readAll(); |
571
6c4fff146999
Implement codesigning in the administrator tool
Andre Heinecke <aheinecke@intevation.de>
parents:
542
diff
changeset
|
191 mProgress.setLabelText(tr("Signing installer package...")); |
6c4fff146999
Implement codesigning in the administrator tool
Andre Heinecke <aheinecke@intevation.de>
parents:
542
diff
changeset
|
192 if (!signFile(mInstallerPath)) { |
6c4fff146999
Implement codesigning in the administrator tool
Andre Heinecke <aheinecke@intevation.de>
parents:
542
diff
changeset
|
193 showErrorMessage(tr("Failed to sign installer package.")); |
6c4fff146999
Implement codesigning in the administrator tool
Andre Heinecke <aheinecke@intevation.de>
parents:
542
diff
changeset
|
194 QFile::remove(mInstallerPath); |
6c4fff146999
Implement codesigning in the administrator tool
Andre Heinecke <aheinecke@intevation.de>
parents:
542
diff
changeset
|
195 } |
516
3332db04c77d
Call makensis in create installer dialog
Andre Heinecke <aheinecke@intevation.de>
parents:
515
diff
changeset
|
196 mProgress.cancel(); |
526
f6371e9c959a
Add a dialog when installer creation is done
Andre Heinecke <aheinecke@intevation.de>
parents:
518
diff
changeset
|
197 fin->show(); |
f6371e9c959a
Add a dialog when installer creation is done
Andre Heinecke <aheinecke@intevation.de>
parents:
518
diff
changeset
|
198 close(); |
516
3332db04c77d
Call makensis in create installer dialog
Andre Heinecke <aheinecke@intevation.de>
parents:
515
diff
changeset
|
199 } |
3332db04c77d
Call makensis in create installer dialog
Andre Heinecke <aheinecke@intevation.de>
parents:
515
diff
changeset
|
200 |
3332db04c77d
Call makensis in create installer dialog
Andre Heinecke <aheinecke@intevation.de>
parents:
515
diff
changeset
|
201 void CreateInstallerDialog::processError(QProcess::ProcessError error) |
3332db04c77d
Call makensis in create installer dialog
Andre Heinecke <aheinecke@intevation.de>
parents:
515
diff
changeset
|
202 { |
571
6c4fff146999
Implement codesigning in the administrator tool
Andre Heinecke <aheinecke@intevation.de>
parents:
542
diff
changeset
|
203 if (mCurrentWorkingDir) { |
6c4fff146999
Implement codesigning in the administrator tool
Andre Heinecke <aheinecke@intevation.de>
parents:
542
diff
changeset
|
204 delete mCurrentWorkingDir; |
6c4fff146999
Implement codesigning in the administrator tool
Andre Heinecke <aheinecke@intevation.de>
parents:
542
diff
changeset
|
205 mCurrentWorkingDir = NULL; |
6c4fff146999
Implement codesigning in the administrator tool
Andre Heinecke <aheinecke@intevation.de>
parents:
542
diff
changeset
|
206 } |
518
31e0a86f5a35
Actually set the arguments for makensis process. Fix escaping
Andre Heinecke <aheinecke@intevation.de>
parents:
516
diff
changeset
|
207 qDebug() << "Error: " << mNSISProc.readAll(); |
516
3332db04c77d
Call makensis in create installer dialog
Andre Heinecke <aheinecke@intevation.de>
parents:
515
diff
changeset
|
208 mProgress.cancel(); |
3332db04c77d
Call makensis in create installer dialog
Andre Heinecke <aheinecke@intevation.de>
parents:
515
diff
changeset
|
209 } |
3332db04c77d
Call makensis in create installer dialog
Andre Heinecke <aheinecke@intevation.de>
parents:
515
diff
changeset
|
210 |
361
b67dd46cd4a9
Added dialog to create a new, signed installer binary.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
211 void CreateInstallerDialog::createInstaller() |
b67dd46cd4a9
Added dialog to create a new, signed installer binary.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
212 { |
571
6c4fff146999
Implement codesigning in the administrator tool
Andre Heinecke <aheinecke@intevation.de>
parents:
542
diff
changeset
|
213 mProgress.setLabelText(tr("Creating installer package...")); |
515
9d3880db6ba7
Improve error handlig and persist user decisions
Andre Heinecke <aheinecke@intevation.de>
parents:
428
diff
changeset
|
214 QDir binDir(mBinaryFolder->text()); |
516
3332db04c77d
Call makensis in create installer dialog
Andre Heinecke <aheinecke@intevation.de>
parents:
515
diff
changeset
|
215 QDir outDir(mSaveFile->text()); |
3332db04c77d
Call makensis in create installer dialog
Andre Heinecke <aheinecke@intevation.de>
parents:
515
diff
changeset
|
216 if (mBinaryFolder->text().isEmpty() || !binDir.exists()) { |
515
9d3880db6ba7
Improve error handlig and persist user decisions
Andre Heinecke <aheinecke@intevation.de>
parents:
428
diff
changeset
|
217 showErrorMessage(tr("Please select an existing input folder.")); |
516
3332db04c77d
Call makensis in create installer dialog
Andre Heinecke <aheinecke@intevation.de>
parents:
515
diff
changeset
|
218 return; |
515
9d3880db6ba7
Improve error handlig and persist user decisions
Andre Heinecke <aheinecke@intevation.de>
parents:
428
diff
changeset
|
219 } |
516
3332db04c77d
Call makensis in create installer dialog
Andre Heinecke <aheinecke@intevation.de>
parents:
515
diff
changeset
|
220 if (mCertFile->text().isEmpty()) { |
3332db04c77d
Call makensis in create installer dialog
Andre Heinecke <aheinecke@intevation.de>
parents:
515
diff
changeset
|
221 showErrorMessage(tr("Please select a codesigning certificate.")); |
3332db04c77d
Call makensis in create installer dialog
Andre Heinecke <aheinecke@intevation.de>
parents:
515
diff
changeset
|
222 return; |
3332db04c77d
Call makensis in create installer dialog
Andre Heinecke <aheinecke@intevation.de>
parents:
515
diff
changeset
|
223 } |
3332db04c77d
Call makensis in create installer dialog
Andre Heinecke <aheinecke@intevation.de>
parents:
515
diff
changeset
|
224 if (mSaveFile->text().isEmpty() || !outDir.exists()) { |
3332db04c77d
Call makensis in create installer dialog
Andre Heinecke <aheinecke@intevation.de>
parents:
515
diff
changeset
|
225 showErrorMessage(tr("Please select a output folder.")); |
3332db04c77d
Call makensis in create installer dialog
Andre Heinecke <aheinecke@intevation.de>
parents:
515
diff
changeset
|
226 return; |
3332db04c77d
Call makensis in create installer dialog
Andre Heinecke <aheinecke@intevation.de>
parents:
515
diff
changeset
|
227 } |
3332db04c77d
Call makensis in create installer dialog
Andre Heinecke <aheinecke@intevation.de>
parents:
515
diff
changeset
|
228 QSettings options(binDir.filePath("meta.ini"), QSettings::IniFormat); |
3332db04c77d
Call makensis in create installer dialog
Andre Heinecke <aheinecke@intevation.de>
parents:
515
diff
changeset
|
229 options.sync(); |
3332db04c77d
Call makensis in create installer dialog
Andre Heinecke <aheinecke@intevation.de>
parents:
515
diff
changeset
|
230 QStringList keys = options.allKeys(); |
3332db04c77d
Call makensis in create installer dialog
Andre Heinecke <aheinecke@intevation.de>
parents:
515
diff
changeset
|
231 if (options.status() != QSettings::NoError || keys.size() < 1) { |
3332db04c77d
Call makensis in create installer dialog
Andre Heinecke <aheinecke@intevation.de>
parents:
515
diff
changeset
|
232 showErrorMessage(tr("Folder %1 does not appear to contain a meta.ini") |
3332db04c77d
Call makensis in create installer dialog
Andre Heinecke <aheinecke@intevation.de>
parents:
515
diff
changeset
|
233 .arg(binDir.path())); |
3332db04c77d
Call makensis in create installer dialog
Andre Heinecke <aheinecke@intevation.de>
parents:
515
diff
changeset
|
234 return; |
3332db04c77d
Call makensis in create installer dialog
Andre Heinecke <aheinecke@intevation.de>
parents:
515
diff
changeset
|
235 } |
761
49168bcb02e2
(Issue55) Sign a linux installer
Andre Heinecke <andre.heinecke@intevation.de>
parents:
571
diff
changeset
|
236 /* Sign the linux installer */ |
49168bcb02e2
(Issue55) Sign a linux installer
Andre Heinecke <andre.heinecke@intevation.de>
parents:
571
diff
changeset
|
237 QDir linuxDir(binDir.path() + "/linux"); |
49168bcb02e2
(Issue55) Sign a linux installer
Andre Heinecke <andre.heinecke@intevation.de>
parents:
571
diff
changeset
|
238 if (!linuxDir.exists()) { |
781
60d3f59f0803
Fix typos in translatable strings.
Andre Heinecke <andre.heinecke@intevation.de>
parents:
772
diff
changeset
|
239 showErrorMessage(tr("Failed to find the directory for linux binaries: %1") |
761
49168bcb02e2
(Issue55) Sign a linux installer
Andre Heinecke <andre.heinecke@intevation.de>
parents:
571
diff
changeset
|
240 .arg(linuxDir.path())); |
49168bcb02e2
(Issue55) Sign a linux installer
Andre Heinecke <andre.heinecke@intevation.de>
parents:
571
diff
changeset
|
241 return; |
49168bcb02e2
(Issue55) Sign a linux installer
Andre Heinecke <andre.heinecke@intevation.de>
parents:
571
diff
changeset
|
242 } |
49168bcb02e2
(Issue55) Sign a linux installer
Andre Heinecke <andre.heinecke@intevation.de>
parents:
571
diff
changeset
|
243 QStringList nameFilter; |
49168bcb02e2
(Issue55) Sign a linux installer
Andre Heinecke <andre.heinecke@intevation.de>
parents:
571
diff
changeset
|
244 nameFilter << "*.sh"; |
49168bcb02e2
(Issue55) Sign a linux installer
Andre Heinecke <andre.heinecke@intevation.de>
parents:
571
diff
changeset
|
245 QStringList candidates = linuxDir.entryList(nameFilter, QDir::Files | QDir::Readable); |
49168bcb02e2
(Issue55) Sign a linux installer
Andre Heinecke <andre.heinecke@intevation.de>
parents:
571
diff
changeset
|
246 if (candidates.isEmpty()) { |
781
60d3f59f0803
Fix typos in translatable strings.
Andre Heinecke <andre.heinecke@intevation.de>
parents:
772
diff
changeset
|
247 showErrorMessage(tr("Failed to find a readable *.sh file in: %1") |
761
49168bcb02e2
(Issue55) Sign a linux installer
Andre Heinecke <andre.heinecke@intevation.de>
parents:
571
diff
changeset
|
248 .arg(linuxDir.path())); |
49168bcb02e2
(Issue55) Sign a linux installer
Andre Heinecke <andre.heinecke@intevation.de>
parents:
571
diff
changeset
|
249 return; |
49168bcb02e2
(Issue55) Sign a linux installer
Andre Heinecke <andre.heinecke@intevation.de>
parents:
571
diff
changeset
|
250 } |
516
3332db04c77d
Call makensis in create installer dialog
Andre Heinecke <aheinecke@intevation.de>
parents:
515
diff
changeset
|
251 |
885
1cc85fd3daa5
(issue70) Handle i386 and amd64 packages
Andre Heinecke <andre.heinecke@intevation.de>
parents:
867
diff
changeset
|
252 foreach (const QString& candidate, candidates) { |
1cc85fd3daa5
(issue70) Handle i386 and amd64 packages
Andre Heinecke <andre.heinecke@intevation.de>
parents:
867
diff
changeset
|
253 mProgress.setLabelText(tr("Signing Linux package...")); |
1cc85fd3daa5
(issue70) Handle i386 and amd64 packages
Andre Heinecke <andre.heinecke@intevation.de>
parents:
867
diff
changeset
|
254 mProgress.cancel(); |
571
6c4fff146999
Implement codesigning in the administrator tool
Andre Heinecke <aheinecke@intevation.de>
parents:
542
diff
changeset
|
255 |
885
1cc85fd3daa5
(issue70) Handle i386 and amd64 packages
Andre Heinecke <andre.heinecke@intevation.de>
parents:
867
diff
changeset
|
256 bool x86arch; |
1cc85fd3daa5
(issue70) Handle i386 and amd64 packages
Andre Heinecke <andre.heinecke@intevation.de>
parents:
867
diff
changeset
|
257 if (candidate.endsWith("-i386.sh")) { |
1cc85fd3daa5
(issue70) Handle i386 and amd64 packages
Andre Heinecke <andre.heinecke@intevation.de>
parents:
867
diff
changeset
|
258 x86arch = true; |
1cc85fd3daa5
(issue70) Handle i386 and amd64 packages
Andre Heinecke <andre.heinecke@intevation.de>
parents:
867
diff
changeset
|
259 } else if (candidate.endsWith("-amd64.sh")) { |
1cc85fd3daa5
(issue70) Handle i386 and amd64 packages
Andre Heinecke <andre.heinecke@intevation.de>
parents:
867
diff
changeset
|
260 x86arch = false; |
1cc85fd3daa5
(issue70) Handle i386 and amd64 packages
Andre Heinecke <andre.heinecke@intevation.de>
parents:
867
diff
changeset
|
261 } else { |
1cc85fd3daa5
(issue70) Handle i386 and amd64 packages
Andre Heinecke <andre.heinecke@intevation.de>
parents:
867
diff
changeset
|
262 qDebug() << "Could not detrmine architecture of " << candidate; |
1cc85fd3daa5
(issue70) Handle i386 and amd64 packages
Andre Heinecke <andre.heinecke@intevation.de>
parents:
867
diff
changeset
|
263 qDebug() << "Skipping."; |
886
197c594aad2b
Really skip unknown packages when creating the installer.
Andre Heinecke <andre.heinecke@intevation.de>
parents:
885
diff
changeset
|
264 continue; |
885
1cc85fd3daa5
(issue70) Handle i386 and amd64 packages
Andre Heinecke <andre.heinecke@intevation.de>
parents:
867
diff
changeset
|
265 } |
1cc85fd3daa5
(issue70) Handle i386 and amd64 packages
Andre Heinecke <andre.heinecke@intevation.de>
parents:
867
diff
changeset
|
266 |
1cc85fd3daa5
(issue70) Handle i386 and amd64 packages
Andre Heinecke <andre.heinecke@intevation.de>
parents:
867
diff
changeset
|
267 QString outFileName = options.value("setupname", "TrustBridge-default.exe" |
1cc85fd3daa5
(issue70) Handle i386 and amd64 packages
Andre Heinecke <andre.heinecke@intevation.de>
parents:
867
diff
changeset
|
268 ).toString().replace(".exe", |
890
ad590fb9ab8f
Fix another error in package output names.
Andre Heinecke <andre.heinecke@intevation.de>
parents:
889
diff
changeset
|
269 x86arch ? "-i386.sh" : "-amd64.sh").arg(QString()); |
885
1cc85fd3daa5
(issue70) Handle i386 and amd64 packages
Andre Heinecke <andre.heinecke@intevation.de>
parents:
867
diff
changeset
|
270 |
1cc85fd3daa5
(issue70) Handle i386 and amd64 packages
Andre Heinecke <andre.heinecke@intevation.de>
parents:
867
diff
changeset
|
271 if (!appendTextSignatureToFile(linuxDir.path() + "/" + candidate, |
1cc85fd3daa5
(issue70) Handle i386 and amd64 packages
Andre Heinecke <andre.heinecke@intevation.de>
parents:
867
diff
changeset
|
272 outDir.path() + "/" + outFileName)) { |
1cc85fd3daa5
(issue70) Handle i386 and amd64 packages
Andre Heinecke <andre.heinecke@intevation.de>
parents:
867
diff
changeset
|
273 showErrorMessage(tr("Failed to sign linux package: %1").arg(candidate)); |
1cc85fd3daa5
(issue70) Handle i386 and amd64 packages
Andre Heinecke <andre.heinecke@intevation.de>
parents:
867
diff
changeset
|
274 mProgress.close(); |
1cc85fd3daa5
(issue70) Handle i386 and amd64 packages
Andre Heinecke <andre.heinecke@intevation.de>
parents:
867
diff
changeset
|
275 return; |
1cc85fd3daa5
(issue70) Handle i386 and amd64 packages
Andre Heinecke <andre.heinecke@intevation.de>
parents:
867
diff
changeset
|
276 } |
761
49168bcb02e2
(Issue55) Sign a linux installer
Andre Heinecke <andre.heinecke@intevation.de>
parents:
571
diff
changeset
|
277 } |
49168bcb02e2
(Issue55) Sign a linux installer
Andre Heinecke <andre.heinecke@intevation.de>
parents:
571
diff
changeset
|
278 |
49168bcb02e2
(Issue55) Sign a linux installer
Andre Heinecke <andre.heinecke@intevation.de>
parents:
571
diff
changeset
|
279 /* The Windows installer */ |
49168bcb02e2
(Issue55) Sign a linux installer
Andre Heinecke <andre.heinecke@intevation.de>
parents:
571
diff
changeset
|
280 |
49168bcb02e2
(Issue55) Sign a linux installer
Andre Heinecke <andre.heinecke@intevation.de>
parents:
571
diff
changeset
|
281 mCurrentWorkingDir = codesignBinaries(binDir.path() + "/windows"); |
49168bcb02e2
(Issue55) Sign a linux installer
Andre Heinecke <andre.heinecke@intevation.de>
parents:
571
diff
changeset
|
282 |
49168bcb02e2
(Issue55) Sign a linux installer
Andre Heinecke <andre.heinecke@intevation.de>
parents:
571
diff
changeset
|
283 if (!mCurrentWorkingDir) { |
571
6c4fff146999
Implement codesigning in the administrator tool
Andre Heinecke <aheinecke@intevation.de>
parents:
542
diff
changeset
|
284 /* Error messages should have been shown by the codesign function */ |
761
49168bcb02e2
(Issue55) Sign a linux installer
Andre Heinecke <andre.heinecke@intevation.de>
parents:
571
diff
changeset
|
285 mProgress.close(); |
571
6c4fff146999
Implement codesigning in the administrator tool
Andre Heinecke <aheinecke@intevation.de>
parents:
542
diff
changeset
|
286 return; |
6c4fff146999
Implement codesigning in the administrator tool
Andre Heinecke <aheinecke@intevation.de>
parents:
542
diff
changeset
|
287 } |
6c4fff146999
Implement codesigning in the administrator tool
Andre Heinecke <aheinecke@intevation.de>
parents:
542
diff
changeset
|
288 |
6c4fff146999
Implement codesigning in the administrator tool
Andre Heinecke <aheinecke@intevation.de>
parents:
542
diff
changeset
|
289 mProgress.setLabelText(tr("Creating NSIS package...")); |
6c4fff146999
Implement codesigning in the administrator tool
Andre Heinecke <aheinecke@intevation.de>
parents:
542
diff
changeset
|
290 |
516
3332db04c77d
Call makensis in create installer dialog
Andre Heinecke <aheinecke@intevation.de>
parents:
515
diff
changeset
|
291 /* Copy windows directory contents to tmpdir */ |
3332db04c77d
Call makensis in create installer dialog
Andre Heinecke <aheinecke@intevation.de>
parents:
515
diff
changeset
|
292 QStringList arguments; |
3332db04c77d
Call makensis in create installer dialog
Andre Heinecke <aheinecke@intevation.de>
parents:
515
diff
changeset
|
293 mNSISProc.setProgram("makensis"); |
518
31e0a86f5a35
Actually set the arguments for makensis process. Fix escaping
Andre Heinecke <aheinecke@intevation.de>
parents:
516
diff
changeset
|
294 mNSISProc.setProcessChannelMode(QProcess::MergedChannels); |
516
3332db04c77d
Call makensis in create installer dialog
Andre Heinecke <aheinecke@intevation.de>
parents:
515
diff
changeset
|
295 mNSISProc.setWorkingDirectory(outDir.path()); |
537
522b4e28c073
Use windows argument format for nsis on windows
Andre Heinecke <aheinecke@intevation.de>
parents:
526
diff
changeset
|
296 #ifdef Q_OS_WIN |
761
49168bcb02e2
(Issue55) Sign a linux installer
Andre Heinecke <andre.heinecke@intevation.de>
parents:
571
diff
changeset
|
297 arguments << QString::fromLatin1("/Dfiles_dir=") + mCurrentWorkingDir->path().replace("/", "\\"); |
1121
a162f4cbba75
(issue54) Handle plugin dir in create-dist-package and on installer creation.
Andre Heinecke <andre.heinecke@intevation.de>
parents:
979
diff
changeset
|
298 QString resourcedir = binDir.path() + "/resources"; |
a162f4cbba75
(issue54) Handle plugin dir in create-dist-package and on installer creation.
Andre Heinecke <andre.heinecke@intevation.de>
parents:
979
diff
changeset
|
299 arguments << QString::fromLatin1("/Dplugin_dir=") + resourcedir.replace("/", "\\"); |
541
1cddf87f8f83
ix variable path seperator
Andre Heinecke <aheinecke@intevation.de>
parents:
539
diff
changeset
|
300 arguments << "/Dpath_sep=\\"; |
537
522b4e28c073
Use windows argument format for nsis on windows
Andre Heinecke <aheinecke@intevation.de>
parents:
526
diff
changeset
|
301 foreach (const QString &key, keys) { |
542
421b69eeffe3
Actually write the installer to the output folder
Andre Heinecke <aheinecke@intevation.de>
parents:
541
diff
changeset
|
302 QString value = options.value(key, QString()).toString(); |
421b69eeffe3
Actually write the installer to the output folder
Andre Heinecke <aheinecke@intevation.de>
parents:
541
diff
changeset
|
303 if (key == "setupname") { |
421b69eeffe3
Actually write the installer to the output folder
Andre Heinecke <aheinecke@intevation.de>
parents:
541
diff
changeset
|
304 value = value.arg(outDir.path().replace("/", "\\") + "\\"); |
571
6c4fff146999
Implement codesigning in the administrator tool
Andre Heinecke <aheinecke@intevation.de>
parents:
542
diff
changeset
|
305 mInstallerPath = value; |
542
421b69eeffe3
Actually write the installer to the output folder
Andre Heinecke <aheinecke@intevation.de>
parents:
541
diff
changeset
|
306 } |
421b69eeffe3
Actually write the installer to the output folder
Andre Heinecke <aheinecke@intevation.de>
parents:
541
diff
changeset
|
307 arguments << QString::fromLatin1("/D%1=%2").arg(key, value); |
537
522b4e28c073
Use windows argument format for nsis on windows
Andre Heinecke <aheinecke@intevation.de>
parents:
526
diff
changeset
|
308 } |
864
45cf874221af
Check for nsi file and convert slashes to backslashes on windows
Andre Heinecke <andre.heinecke@intevation.de>
parents:
852
diff
changeset
|
309 arguments << QString(binDir.path() + "/trustbridge.nsi").replace("/", "\\"); |
537
522b4e28c073
Use windows argument format for nsis on windows
Andre Heinecke <aheinecke@intevation.de>
parents:
526
diff
changeset
|
310 #else |
761
49168bcb02e2
(Issue55) Sign a linux installer
Andre Heinecke <andre.heinecke@intevation.de>
parents:
571
diff
changeset
|
311 arguments << QString::fromLatin1("-Dfiles_dir=") + mCurrentWorkingDir->path(); |
1121
a162f4cbba75
(issue54) Handle plugin dir in create-dist-package and on installer creation.
Andre Heinecke <andre.heinecke@intevation.de>
parents:
979
diff
changeset
|
312 arguments << QString::fromLatin1("-Dplugin_dir=") + binDir.path() + "/resources"; |
541
1cddf87f8f83
ix variable path seperator
Andre Heinecke <aheinecke@intevation.de>
parents:
539
diff
changeset
|
313 arguments << "-Dpath_sep=/"; |
516
3332db04c77d
Call makensis in create installer dialog
Andre Heinecke <aheinecke@intevation.de>
parents:
515
diff
changeset
|
314 foreach (const QString &key, keys) { |
542
421b69eeffe3
Actually write the installer to the output folder
Andre Heinecke <aheinecke@intevation.de>
parents:
541
diff
changeset
|
315 QString value = options.value(key, QString()).toString(); |
421b69eeffe3
Actually write the installer to the output folder
Andre Heinecke <aheinecke@intevation.de>
parents:
541
diff
changeset
|
316 if (key == "setupname") { |
421b69eeffe3
Actually write the installer to the output folder
Andre Heinecke <aheinecke@intevation.de>
parents:
541
diff
changeset
|
317 value = value.arg(outDir.path() + "/"); |
571
6c4fff146999
Implement codesigning in the administrator tool
Andre Heinecke <aheinecke@intevation.de>
parents:
542
diff
changeset
|
318 mInstallerPath = value; |
542
421b69eeffe3
Actually write the installer to the output folder
Andre Heinecke <aheinecke@intevation.de>
parents:
541
diff
changeset
|
319 } |
421b69eeffe3
Actually write the installer to the output folder
Andre Heinecke <aheinecke@intevation.de>
parents:
541
diff
changeset
|
320 arguments << QString::fromLatin1("-D%1=%2").arg(key, value); |
516
3332db04c77d
Call makensis in create installer dialog
Andre Heinecke <aheinecke@intevation.de>
parents:
515
diff
changeset
|
321 } |
864
45cf874221af
Check for nsi file and convert slashes to backslashes on windows
Andre Heinecke <andre.heinecke@intevation.de>
parents:
852
diff
changeset
|
322 arguments << binDir.path() + "/trustbridge.nsi"; |
537
522b4e28c073
Use windows argument format for nsis on windows
Andre Heinecke <aheinecke@intevation.de>
parents:
526
diff
changeset
|
323 #endif |
516
3332db04c77d
Call makensis in create installer dialog
Andre Heinecke <aheinecke@intevation.de>
parents:
515
diff
changeset
|
324 |
864
45cf874221af
Check for nsi file and convert slashes to backslashes on windows
Andre Heinecke <andre.heinecke@intevation.de>
parents:
852
diff
changeset
|
325 |
45cf874221af
Check for nsi file and convert slashes to backslashes on windows
Andre Heinecke <andre.heinecke@intevation.de>
parents:
852
diff
changeset
|
326 QFileInfo nsiFile (binDir.path() + "/trustbridge.nsi"); |
45cf874221af
Check for nsi file and convert slashes to backslashes on windows
Andre Heinecke <andre.heinecke@intevation.de>
parents:
852
diff
changeset
|
327 if (!nsiFile.exists()) { |
45cf874221af
Check for nsi file and convert slashes to backslashes on windows
Andre Heinecke <andre.heinecke@intevation.de>
parents:
852
diff
changeset
|
328 showErrorMessage(tr("Failed to find installer script at: %1 ").arg(nsiFile.filePath())); |
45cf874221af
Check for nsi file and convert slashes to backslashes on windows
Andre Heinecke <andre.heinecke@intevation.de>
parents:
852
diff
changeset
|
329 } |
516
3332db04c77d
Call makensis in create installer dialog
Andre Heinecke <aheinecke@intevation.de>
parents:
515
diff
changeset
|
330 |
518
31e0a86f5a35
Actually set the arguments for makensis process. Fix escaping
Andre Heinecke <aheinecke@intevation.de>
parents:
516
diff
changeset
|
331 qDebug() << "Starting makensis with arguments: " << arguments; |
31e0a86f5a35
Actually set the arguments for makensis process. Fix escaping
Andre Heinecke <aheinecke@intevation.de>
parents:
516
diff
changeset
|
332 mNSISProc.setArguments(arguments); |
516
3332db04c77d
Call makensis in create installer dialog
Andre Heinecke <aheinecke@intevation.de>
parents:
515
diff
changeset
|
333 mNSISProc.start(); |
3332db04c77d
Call makensis in create installer dialog
Andre Heinecke <aheinecke@intevation.de>
parents:
515
diff
changeset
|
334 mProgress.show(); |
3332db04c77d
Call makensis in create installer dialog
Andre Heinecke <aheinecke@intevation.de>
parents:
515
diff
changeset
|
335 |
3332db04c77d
Call makensis in create installer dialog
Andre Heinecke <aheinecke@intevation.de>
parents:
515
diff
changeset
|
336 if (!mNSISProc.waitForStarted() || |
3332db04c77d
Call makensis in create installer dialog
Andre Heinecke <aheinecke@intevation.de>
parents:
515
diff
changeset
|
337 mNSISProc.state() == QProcess::NotRunning) { |
3332db04c77d
Call makensis in create installer dialog
Andre Heinecke <aheinecke@intevation.de>
parents:
515
diff
changeset
|
338 showErrorMessage(tr("Failed to start makensis.\n" |
3332db04c77d
Call makensis in create installer dialog
Andre Heinecke <aheinecke@intevation.de>
parents:
515
diff
changeset
|
339 "Please ensure that makensis is installed and in your PATH variable.")); |
3332db04c77d
Call makensis in create installer dialog
Andre Heinecke <aheinecke@intevation.de>
parents:
515
diff
changeset
|
340 } |
361
b67dd46cd4a9
Added dialog to create a new, signed installer binary.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
341 } |
526
f6371e9c959a
Add a dialog when installer creation is done
Andre Heinecke <aheinecke@intevation.de>
parents:
518
diff
changeset
|
342 |
571
6c4fff146999
Implement codesigning in the administrator tool
Andre Heinecke <aheinecke@intevation.de>
parents:
542
diff
changeset
|
343 bool CreateInstallerDialog::signFile(QString filePath) { |
6c4fff146999
Implement codesigning in the administrator tool
Andre Heinecke <aheinecke@intevation.de>
parents:
542
diff
changeset
|
344 QProcess signProc; |
6c4fff146999
Implement codesigning in the administrator tool
Andre Heinecke <aheinecke@intevation.de>
parents:
542
diff
changeset
|
345 signProc.setProcessChannelMode(QProcess::MergedChannels); |
1319
137a0686de7b
(issue158) Try to find osslsigncode also in the application's directory
Andre Heinecke <andre.heinecke@intevation.de>
parents:
1268
diff
changeset
|
346 QStringList candidates; |
137a0686de7b
(issue158) Try to find osslsigncode also in the application's directory
Andre Heinecke <andre.heinecke@intevation.de>
parents:
1268
diff
changeset
|
347 candidates << "osslsigncode" |
137a0686de7b
(issue158) Try to find osslsigncode also in the application's directory
Andre Heinecke <andre.heinecke@intevation.de>
parents:
1268
diff
changeset
|
348 << QDir::toNativeSeparators(QCoreApplication::applicationDirPath() + "/osslsigncode"); |
571
6c4fff146999
Implement codesigning in the administrator tool
Andre Heinecke <aheinecke@intevation.de>
parents:
542
diff
changeset
|
349 QStringList arguments; |
6c4fff146999
Implement codesigning in the administrator tool
Andre Heinecke <aheinecke@intevation.de>
parents:
542
diff
changeset
|
350 |
6c4fff146999
Implement codesigning in the administrator tool
Andre Heinecke <aheinecke@intevation.de>
parents:
542
diff
changeset
|
351 QSettings mySettings; |
6c4fff146999
Implement codesigning in the administrator tool
Andre Heinecke <aheinecke@intevation.de>
parents:
542
diff
changeset
|
352 |
6c4fff146999
Implement codesigning in the administrator tool
Andre Heinecke <aheinecke@intevation.de>
parents:
542
diff
changeset
|
353 QString publisher = mySettings.value("sign_publisher", SIGN_PUBLISHER).toString(); |
6c4fff146999
Implement codesigning in the administrator tool
Andre Heinecke <aheinecke@intevation.de>
parents:
542
diff
changeset
|
354 QString url = mySettings.value("sign_url", SIGN_URL).toString(); |
6c4fff146999
Implement codesigning in the administrator tool
Andre Heinecke <aheinecke@intevation.de>
parents:
542
diff
changeset
|
355 QString hash = mySettings.value("sign_hash", SIGN_HASH).toString(); |
6c4fff146999
Implement codesigning in the administrator tool
Andre Heinecke <aheinecke@intevation.de>
parents:
542
diff
changeset
|
356 |
6c4fff146999
Implement codesigning in the administrator tool
Andre Heinecke <aheinecke@intevation.de>
parents:
542
diff
changeset
|
357 arguments << "sign" << "-certs" << mCertFile->text() << "-key" |
6c4fff146999
Implement codesigning in the administrator tool
Andre Heinecke <aheinecke@intevation.de>
parents:
542
diff
changeset
|
358 << mCertFile->text() << "-n" << publisher << "-i" << |
6c4fff146999
Implement codesigning in the administrator tool
Andre Heinecke <aheinecke@intevation.de>
parents:
542
diff
changeset
|
359 url << "-h" << hash << "-in" << filePath << "-out" << filePath + ".signed"; |
6c4fff146999
Implement codesigning in the administrator tool
Andre Heinecke <aheinecke@intevation.de>
parents:
542
diff
changeset
|
360 |
6c4fff146999
Implement codesigning in the administrator tool
Andre Heinecke <aheinecke@intevation.de>
parents:
542
diff
changeset
|
361 qDebug() << "Starting osslsigncode with arguments: " << arguments; |
6c4fff146999
Implement codesigning in the administrator tool
Andre Heinecke <aheinecke@intevation.de>
parents:
542
diff
changeset
|
362 |
1319
137a0686de7b
(issue158) Try to find osslsigncode also in the application's directory
Andre Heinecke <andre.heinecke@intevation.de>
parents:
1268
diff
changeset
|
363 signProc.setArguments(arguments); |
137a0686de7b
(issue158) Try to find osslsigncode also in the application's directory
Andre Heinecke <andre.heinecke@intevation.de>
parents:
1268
diff
changeset
|
364 bool once_successful = false; |
137a0686de7b
(issue158) Try to find osslsigncode also in the application's directory
Andre Heinecke <andre.heinecke@intevation.de>
parents:
1268
diff
changeset
|
365 foreach (const QString &prog, candidates) { |
137a0686de7b
(issue158) Try to find osslsigncode also in the application's directory
Andre Heinecke <andre.heinecke@intevation.de>
parents:
1268
diff
changeset
|
366 signProc.setProgram(prog); |
137a0686de7b
(issue158) Try to find osslsigncode also in the application's directory
Andre Heinecke <andre.heinecke@intevation.de>
parents:
1268
diff
changeset
|
367 signProc.start(); |
137a0686de7b
(issue158) Try to find osslsigncode also in the application's directory
Andre Heinecke <andre.heinecke@intevation.de>
parents:
1268
diff
changeset
|
368 |
137a0686de7b
(issue158) Try to find osslsigncode also in the application's directory
Andre Heinecke <andre.heinecke@intevation.de>
parents:
1268
diff
changeset
|
369 if (!signProc.waitForFinished(30000)) { |
137a0686de7b
(issue158) Try to find osslsigncode also in the application's directory
Andre Heinecke <andre.heinecke@intevation.de>
parents:
1268
diff
changeset
|
370 continue; |
137a0686de7b
(issue158) Try to find osslsigncode also in the application's directory
Andre Heinecke <andre.heinecke@intevation.de>
parents:
1268
diff
changeset
|
371 } |
137a0686de7b
(issue158) Try to find osslsigncode also in the application's directory
Andre Heinecke <andre.heinecke@intevation.de>
parents:
1268
diff
changeset
|
372 |
137a0686de7b
(issue158) Try to find osslsigncode also in the application's directory
Andre Heinecke <andre.heinecke@intevation.de>
parents:
1268
diff
changeset
|
373 if (signProc.exitStatus() != QProcess::NormalExit || |
137a0686de7b
(issue158) Try to find osslsigncode also in the application's directory
Andre Heinecke <andre.heinecke@intevation.de>
parents:
1268
diff
changeset
|
374 signProc.exitCode() != 0) { |
137a0686de7b
(issue158) Try to find osslsigncode also in the application's directory
Andre Heinecke <andre.heinecke@intevation.de>
parents:
1268
diff
changeset
|
375 qDebug() << "Error process returned: " << signProc.exitCode(); |
137a0686de7b
(issue158) Try to find osslsigncode also in the application's directory
Andre Heinecke <andre.heinecke@intevation.de>
parents:
1268
diff
changeset
|
376 qDebug() << "Output: " << signProc.readAllStandardOutput(); |
137a0686de7b
(issue158) Try to find osslsigncode also in the application's directory
Andre Heinecke <andre.heinecke@intevation.de>
parents:
1268
diff
changeset
|
377 continue; |
137a0686de7b
(issue158) Try to find osslsigncode also in the application's directory
Andre Heinecke <andre.heinecke@intevation.de>
parents:
1268
diff
changeset
|
378 } |
137a0686de7b
(issue158) Try to find osslsigncode also in the application's directory
Andre Heinecke <andre.heinecke@intevation.de>
parents:
1268
diff
changeset
|
379 once_successful = true; |
137a0686de7b
(issue158) Try to find osslsigncode also in the application's directory
Andre Heinecke <andre.heinecke@intevation.de>
parents:
1268
diff
changeset
|
380 break; |
571
6c4fff146999
Implement codesigning in the administrator tool
Andre Heinecke <aheinecke@intevation.de>
parents:
542
diff
changeset
|
381 } |
6c4fff146999
Implement codesigning in the administrator tool
Andre Heinecke <aheinecke@intevation.de>
parents:
542
diff
changeset
|
382 |
1319
137a0686de7b
(issue158) Try to find osslsigncode also in the application's directory
Andre Heinecke <andre.heinecke@intevation.de>
parents:
1268
diff
changeset
|
383 if (!once_successful) { |
137a0686de7b
(issue158) Try to find osslsigncode also in the application's directory
Andre Heinecke <andre.heinecke@intevation.de>
parents:
1268
diff
changeset
|
384 qDebug() << "Failed to execute all osslsigncode candidates."; |
571
6c4fff146999
Implement codesigning in the administrator tool
Andre Heinecke <aheinecke@intevation.de>
parents:
542
diff
changeset
|
385 return false; |
6c4fff146999
Implement codesigning in the administrator tool
Andre Heinecke <aheinecke@intevation.de>
parents:
542
diff
changeset
|
386 } |
6c4fff146999
Implement codesigning in the administrator tool
Andre Heinecke <aheinecke@intevation.de>
parents:
542
diff
changeset
|
387 |
6c4fff146999
Implement codesigning in the administrator tool
Andre Heinecke <aheinecke@intevation.de>
parents:
542
diff
changeset
|
388 if (!QFile::remove(filePath)) { |
6c4fff146999
Implement codesigning in the administrator tool
Andre Heinecke <aheinecke@intevation.de>
parents:
542
diff
changeset
|
389 qDebug() << "Failed to remove file."; |
6c4fff146999
Implement codesigning in the administrator tool
Andre Heinecke <aheinecke@intevation.de>
parents:
542
diff
changeset
|
390 return false; |
6c4fff146999
Implement codesigning in the administrator tool
Andre Heinecke <aheinecke@intevation.de>
parents:
542
diff
changeset
|
391 } |
6c4fff146999
Implement codesigning in the administrator tool
Andre Heinecke <aheinecke@intevation.de>
parents:
542
diff
changeset
|
392 if (!QFile::copy(filePath + ".signed", filePath)) { |
6c4fff146999
Implement codesigning in the administrator tool
Andre Heinecke <aheinecke@intevation.de>
parents:
542
diff
changeset
|
393 qDebug() << "Failed to copy signed file in place."; |
6c4fff146999
Implement codesigning in the administrator tool
Andre Heinecke <aheinecke@intevation.de>
parents:
542
diff
changeset
|
394 return false; |
6c4fff146999
Implement codesigning in the administrator tool
Andre Heinecke <aheinecke@intevation.de>
parents:
542
diff
changeset
|
395 } |
6c4fff146999
Implement codesigning in the administrator tool
Andre Heinecke <aheinecke@intevation.de>
parents:
542
diff
changeset
|
396 if (!QFile::remove(filePath + ".signed")) { |
6c4fff146999
Implement codesigning in the administrator tool
Andre Heinecke <aheinecke@intevation.de>
parents:
542
diff
changeset
|
397 qDebug() << "Failed to remove signed."; |
6c4fff146999
Implement codesigning in the administrator tool
Andre Heinecke <aheinecke@intevation.de>
parents:
542
diff
changeset
|
398 return false; |
6c4fff146999
Implement codesigning in the administrator tool
Andre Heinecke <aheinecke@intevation.de>
parents:
542
diff
changeset
|
399 } |
6c4fff146999
Implement codesigning in the administrator tool
Andre Heinecke <aheinecke@intevation.de>
parents:
542
diff
changeset
|
400 return true; |
6c4fff146999
Implement codesigning in the administrator tool
Andre Heinecke <aheinecke@intevation.de>
parents:
542
diff
changeset
|
401 } |
6c4fff146999
Implement codesigning in the administrator tool
Andre Heinecke <aheinecke@intevation.de>
parents:
542
diff
changeset
|
402 |
979
01128d63226d
Copy the windows files recursively into the temporary directory
Andre Heinecke <andre.heinecke@intevation.de>
parents:
890
diff
changeset
|
403 bool copyPath(QString src, QString dst) |
01128d63226d
Copy the windows files recursively into the temporary directory
Andre Heinecke <andre.heinecke@intevation.de>
parents:
890
diff
changeset
|
404 { |
01128d63226d
Copy the windows files recursively into the temporary directory
Andre Heinecke <andre.heinecke@intevation.de>
parents:
890
diff
changeset
|
405 QDir dir(src); |
01128d63226d
Copy the windows files recursively into the temporary directory
Andre Heinecke <andre.heinecke@intevation.de>
parents:
890
diff
changeset
|
406 if (! dir.exists()) { |
01128d63226d
Copy the windows files recursively into the temporary directory
Andre Heinecke <andre.heinecke@intevation.de>
parents:
890
diff
changeset
|
407 qDebug() << "Source directory does not exist."; |
01128d63226d
Copy the windows files recursively into the temporary directory
Andre Heinecke <andre.heinecke@intevation.de>
parents:
890
diff
changeset
|
408 return false; |
01128d63226d
Copy the windows files recursively into the temporary directory
Andre Heinecke <andre.heinecke@intevation.de>
parents:
890
diff
changeset
|
409 } |
01128d63226d
Copy the windows files recursively into the temporary directory
Andre Heinecke <andre.heinecke@intevation.de>
parents:
890
diff
changeset
|
410 |
01128d63226d
Copy the windows files recursively into the temporary directory
Andre Heinecke <andre.heinecke@intevation.de>
parents:
890
diff
changeset
|
411 foreach (QString d, dir.entryList(QDir::Dirs | QDir::NoDotAndDotDot)) { |
01128d63226d
Copy the windows files recursively into the temporary directory
Andre Heinecke <andre.heinecke@intevation.de>
parents:
890
diff
changeset
|
412 QString dst_path = dst + QDir::separator() + d; |
01128d63226d
Copy the windows files recursively into the temporary directory
Andre Heinecke <andre.heinecke@intevation.de>
parents:
890
diff
changeset
|
413 dir.mkpath(dst_path); |
01128d63226d
Copy the windows files recursively into the temporary directory
Andre Heinecke <andre.heinecke@intevation.de>
parents:
890
diff
changeset
|
414 if (!copyPath(src+ QDir::separator() + d, dst_path)) { |
01128d63226d
Copy the windows files recursively into the temporary directory
Andre Heinecke <andre.heinecke@intevation.de>
parents:
890
diff
changeset
|
415 qDebug() << "Failed to copy subdirectory; " << d; |
01128d63226d
Copy the windows files recursively into the temporary directory
Andre Heinecke <andre.heinecke@intevation.de>
parents:
890
diff
changeset
|
416 return false; |
01128d63226d
Copy the windows files recursively into the temporary directory
Andre Heinecke <andre.heinecke@intevation.de>
parents:
890
diff
changeset
|
417 } |
01128d63226d
Copy the windows files recursively into the temporary directory
Andre Heinecke <andre.heinecke@intevation.de>
parents:
890
diff
changeset
|
418 } |
01128d63226d
Copy the windows files recursively into the temporary directory
Andre Heinecke <andre.heinecke@intevation.de>
parents:
890
diff
changeset
|
419 |
01128d63226d
Copy the windows files recursively into the temporary directory
Andre Heinecke <andre.heinecke@intevation.de>
parents:
890
diff
changeset
|
420 foreach (QString f, dir.entryList(QDir::Files)) { |
01128d63226d
Copy the windows files recursively into the temporary directory
Andre Heinecke <andre.heinecke@intevation.de>
parents:
890
diff
changeset
|
421 if (!QFile::copy(src + QDir::separator() + f, dst + QDir::separator() + f)) { |
01128d63226d
Copy the windows files recursively into the temporary directory
Andre Heinecke <andre.heinecke@intevation.de>
parents:
890
diff
changeset
|
422 qDebug() << "Failed to copy: " << f; |
01128d63226d
Copy the windows files recursively into the temporary directory
Andre Heinecke <andre.heinecke@intevation.de>
parents:
890
diff
changeset
|
423 return false; |
01128d63226d
Copy the windows files recursively into the temporary directory
Andre Heinecke <andre.heinecke@intevation.de>
parents:
890
diff
changeset
|
424 } |
01128d63226d
Copy the windows files recursively into the temporary directory
Andre Heinecke <andre.heinecke@intevation.de>
parents:
890
diff
changeset
|
425 } |
01128d63226d
Copy the windows files recursively into the temporary directory
Andre Heinecke <andre.heinecke@intevation.de>
parents:
890
diff
changeset
|
426 return true; |
01128d63226d
Copy the windows files recursively into the temporary directory
Andre Heinecke <andre.heinecke@intevation.de>
parents:
890
diff
changeset
|
427 } |
571
6c4fff146999
Implement codesigning in the administrator tool
Andre Heinecke <aheinecke@intevation.de>
parents:
542
diff
changeset
|
428 |
6c4fff146999
Implement codesigning in the administrator tool
Andre Heinecke <aheinecke@intevation.de>
parents:
542
diff
changeset
|
429 QTemporaryDir *CreateInstallerDialog::codesignBinaries(const QDir& sourceDir) { |
6c4fff146999
Implement codesigning in the administrator tool
Andre Heinecke <aheinecke@intevation.de>
parents:
542
diff
changeset
|
430 QTemporaryDir* target = new QTemporaryDir(); |
6c4fff146999
Implement codesigning in the administrator tool
Andre Heinecke <aheinecke@intevation.de>
parents:
542
diff
changeset
|
431 /* Copy all files from the source dir to a temporary location */ |
6c4fff146999
Implement codesigning in the administrator tool
Andre Heinecke <aheinecke@intevation.de>
parents:
542
diff
changeset
|
432 mProgress.setLabelText(tr("Signing binaries...")); |
6c4fff146999
Implement codesigning in the administrator tool
Andre Heinecke <aheinecke@intevation.de>
parents:
542
diff
changeset
|
433 |
6c4fff146999
Implement codesigning in the administrator tool
Andre Heinecke <aheinecke@intevation.de>
parents:
542
diff
changeset
|
434 mProgress.show(); |
979
01128d63226d
Copy the windows files recursively into the temporary directory
Andre Heinecke <andre.heinecke@intevation.de>
parents:
890
diff
changeset
|
435 |
01128d63226d
Copy the windows files recursively into the temporary directory
Andre Heinecke <andre.heinecke@intevation.de>
parents:
890
diff
changeset
|
436 /* Copy the whole directory. */ |
01128d63226d
Copy the windows files recursively into the temporary directory
Andre Heinecke <andre.heinecke@intevation.de>
parents:
890
diff
changeset
|
437 if (!copyPath(sourceDir.path(), target->path())) { |
01128d63226d
Copy the windows files recursively into the temporary directory
Andre Heinecke <andre.heinecke@intevation.de>
parents:
890
diff
changeset
|
438 qDebug() << "Copy failed."; |
01128d63226d
Copy the windows files recursively into the temporary directory
Andre Heinecke <andre.heinecke@intevation.de>
parents:
890
diff
changeset
|
439 showErrorMessage(tr("Failed to copy binaries to temporary location.")); |
01128d63226d
Copy the windows files recursively into the temporary directory
Andre Heinecke <andre.heinecke@intevation.de>
parents:
890
diff
changeset
|
440 mProgress.cancel(); |
01128d63226d
Copy the windows files recursively into the temporary directory
Andre Heinecke <andre.heinecke@intevation.de>
parents:
890
diff
changeset
|
441 return NULL; |
01128d63226d
Copy the windows files recursively into the temporary directory
Andre Heinecke <andre.heinecke@intevation.de>
parents:
890
diff
changeset
|
442 } |
01128d63226d
Copy the windows files recursively into the temporary directory
Andre Heinecke <andre.heinecke@intevation.de>
parents:
890
diff
changeset
|
443 /* Sign the top level .exe files */ |
571
6c4fff146999
Implement codesigning in the administrator tool
Andre Heinecke <aheinecke@intevation.de>
parents:
542
diff
changeset
|
444 foreach (const QFileInfo& entry, sourceDir.entryInfoList()) { |
6c4fff146999
Implement codesigning in the administrator tool
Andre Heinecke <aheinecke@intevation.de>
parents:
542
diff
changeset
|
445 QString targetPath = target->path() + QString::fromLatin1("/") + entry.fileName(); |
6c4fff146999
Implement codesigning in the administrator tool
Andre Heinecke <aheinecke@intevation.de>
parents:
542
diff
changeset
|
446 if (entry.fileName() == "." || entry.fileName() == "..") { |
6c4fff146999
Implement codesigning in the administrator tool
Andre Heinecke <aheinecke@intevation.de>
parents:
542
diff
changeset
|
447 continue; |
6c4fff146999
Implement codesigning in the administrator tool
Andre Heinecke <aheinecke@intevation.de>
parents:
542
diff
changeset
|
448 } |
6c4fff146999
Implement codesigning in the administrator tool
Andre Heinecke <aheinecke@intevation.de>
parents:
542
diff
changeset
|
449 if (entry.suffix() == "exe") { |
6c4fff146999
Implement codesigning in the administrator tool
Andre Heinecke <aheinecke@intevation.de>
parents:
542
diff
changeset
|
450 if (!signFile(targetPath)) { |
6c4fff146999
Implement codesigning in the administrator tool
Andre Heinecke <aheinecke@intevation.de>
parents:
542
diff
changeset
|
451 showErrorMessage(tr("Failed to sign binaries with osslsigncode.\n" |
1162
2a1206932f53
(issue107) Comment all TODO's and FIXME's with issues as documented in issue107
Andre Heinecke <andre.heinecke@intevation.de>
parents:
1121
diff
changeset
|
452 "Please check that %1 is a valid code signing certificate and that " |
571
6c4fff146999
Implement codesigning in the administrator tool
Andre Heinecke <aheinecke@intevation.de>
parents:
542
diff
changeset
|
453 "osslsigncode can be found in the PATH.").arg(mCertFile->text())); |
6c4fff146999
Implement codesigning in the administrator tool
Andre Heinecke <aheinecke@intevation.de>
parents:
542
diff
changeset
|
454 mProgress.cancel(); |
6c4fff146999
Implement codesigning in the administrator tool
Andre Heinecke <aheinecke@intevation.de>
parents:
542
diff
changeset
|
455 return NULL; |
6c4fff146999
Implement codesigning in the administrator tool
Andre Heinecke <aheinecke@intevation.de>
parents:
542
diff
changeset
|
456 } |
6c4fff146999
Implement codesigning in the administrator tool
Andre Heinecke <aheinecke@intevation.de>
parents:
542
diff
changeset
|
457 } |
6c4fff146999
Implement codesigning in the administrator tool
Andre Heinecke <aheinecke@intevation.de>
parents:
542
diff
changeset
|
458 } |
6c4fff146999
Implement codesigning in the administrator tool
Andre Heinecke <aheinecke@intevation.de>
parents:
542
diff
changeset
|
459 mProgress.cancel(); |
6c4fff146999
Implement codesigning in the administrator tool
Andre Heinecke <aheinecke@intevation.de>
parents:
542
diff
changeset
|
460 return target; |
6c4fff146999
Implement codesigning in the administrator tool
Andre Heinecke <aheinecke@intevation.de>
parents:
542
diff
changeset
|
461 } |
6c4fff146999
Implement codesigning in the administrator tool
Andre Heinecke <aheinecke@intevation.de>
parents:
542
diff
changeset
|
462 |
761
49168bcb02e2
(Issue55) Sign a linux installer
Andre Heinecke <andre.heinecke@intevation.de>
parents:
571
diff
changeset
|
463 bool CreateInstallerDialog::appendTextSignatureToFile(const QString& input, |
49168bcb02e2
(Issue55) Sign a linux installer
Andre Heinecke <andre.heinecke@intevation.de>
parents:
571
diff
changeset
|
464 const QString& output) { |
49168bcb02e2
(Issue55) Sign a linux installer
Andre Heinecke <andre.heinecke@intevation.de>
parents:
571
diff
changeset
|
465 QFile inFile(input); |
49168bcb02e2
(Issue55) Sign a linux installer
Andre Heinecke <andre.heinecke@intevation.de>
parents:
571
diff
changeset
|
466 pk_context pk; |
49168bcb02e2
(Issue55) Sign a linux installer
Andre Heinecke <andre.heinecke@intevation.de>
parents:
571
diff
changeset
|
467 |
49168bcb02e2
(Issue55) Sign a linux installer
Andre Heinecke <andre.heinecke@intevation.de>
parents:
571
diff
changeset
|
468 pk_init(&pk); |
49168bcb02e2
(Issue55) Sign a linux installer
Andre Heinecke <andre.heinecke@intevation.de>
parents:
571
diff
changeset
|
469 int ret = pk_parse_keyfile(&pk, mCertFile->text().toLocal8Bit().constData(), ""); |
49168bcb02e2
(Issue55) Sign a linux installer
Andre Heinecke <andre.heinecke@intevation.de>
parents:
571
diff
changeset
|
470 |
49168bcb02e2
(Issue55) Sign a linux installer
Andre Heinecke <andre.heinecke@intevation.de>
parents:
571
diff
changeset
|
471 if (ret != 0) { |
49168bcb02e2
(Issue55) Sign a linux installer
Andre Heinecke <andre.heinecke@intevation.de>
parents:
571
diff
changeset
|
472 showErrorMessage(tr("Failed to load certificate: %1") |
49168bcb02e2
(Issue55) Sign a linux installer
Andre Heinecke <andre.heinecke@intevation.de>
parents:
571
diff
changeset
|
473 .arg(getPolarSSLErrorMsg(ret))); |
49168bcb02e2
(Issue55) Sign a linux installer
Andre Heinecke <andre.heinecke@intevation.de>
parents:
571
diff
changeset
|
474 pk_free(&pk); |
49168bcb02e2
(Issue55) Sign a linux installer
Andre Heinecke <andre.heinecke@intevation.de>
parents:
571
diff
changeset
|
475 return false; |
49168bcb02e2
(Issue55) Sign a linux installer
Andre Heinecke <andre.heinecke@intevation.de>
parents:
571
diff
changeset
|
476 } |
49168bcb02e2
(Issue55) Sign a linux installer
Andre Heinecke <andre.heinecke@intevation.de>
parents:
571
diff
changeset
|
477 |
49168bcb02e2
(Issue55) Sign a linux installer
Andre Heinecke <andre.heinecke@intevation.de>
parents:
571
diff
changeset
|
478 /* Check that it is a 3072 bit RSA key as specified */ |
49168bcb02e2
(Issue55) Sign a linux installer
Andre Heinecke <andre.heinecke@intevation.de>
parents:
571
diff
changeset
|
479 if (!pk.pk_info || pk_get_size(&pk) != 3072 || |
49168bcb02e2
(Issue55) Sign a linux installer
Andre Heinecke <andre.heinecke@intevation.de>
parents:
571
diff
changeset
|
480 pk.pk_info->type != POLARSSL_PK_RSA) { |
1268
2efdf2faf4e5
Remove dead variable and fix possible null pointer dereference
Andre Heinecke <andre.heinecke@intevation.de>
parents:
1162
diff
changeset
|
481 if (pk.pk_info) { |
2efdf2faf4e5
Remove dead variable and fix possible null pointer dereference
Andre Heinecke <andre.heinecke@intevation.de>
parents:
1162
diff
changeset
|
482 qDebug() << pk.pk_info->type << "type"; |
2efdf2faf4e5
Remove dead variable and fix possible null pointer dereference
Andre Heinecke <andre.heinecke@intevation.de>
parents:
1162
diff
changeset
|
483 } |
761
49168bcb02e2
(Issue55) Sign a linux installer
Andre Heinecke <andre.heinecke@intevation.de>
parents:
571
diff
changeset
|
484 qDebug() << POLARSSL_PK_RSA << "rsa"; |
49168bcb02e2
(Issue55) Sign a linux installer
Andre Heinecke <andre.heinecke@intevation.de>
parents:
571
diff
changeset
|
485 qDebug() << "size " << pk_get_size(&pk); |
49168bcb02e2
(Issue55) Sign a linux installer
Andre Heinecke <andre.heinecke@intevation.de>
parents:
571
diff
changeset
|
486 showErrorMessage(tr("Only 3072 bit RSA keys are supported by the current format.")); |
49168bcb02e2
(Issue55) Sign a linux installer
Andre Heinecke <andre.heinecke@intevation.de>
parents:
571
diff
changeset
|
487 pk_free(&pk); |
49168bcb02e2
(Issue55) Sign a linux installer
Andre Heinecke <andre.heinecke@intevation.de>
parents:
571
diff
changeset
|
488 return false; |
49168bcb02e2
(Issue55) Sign a linux installer
Andre Heinecke <andre.heinecke@intevation.de>
parents:
571
diff
changeset
|
489 } |
49168bcb02e2
(Issue55) Sign a linux installer
Andre Heinecke <andre.heinecke@intevation.de>
parents:
571
diff
changeset
|
490 |
49168bcb02e2
(Issue55) Sign a linux installer
Andre Heinecke <andre.heinecke@intevation.de>
parents:
571
diff
changeset
|
491 if (!inFile.open(QIODevice::ReadOnly)) { |
49168bcb02e2
(Issue55) Sign a linux installer
Andre Heinecke <andre.heinecke@intevation.de>
parents:
571
diff
changeset
|
492 showErrorMessage(tr("Failed to open input file: %1").arg(inFile.fileName())); |
49168bcb02e2
(Issue55) Sign a linux installer
Andre Heinecke <andre.heinecke@intevation.de>
parents:
571
diff
changeset
|
493 pk_free(&pk); |
49168bcb02e2
(Issue55) Sign a linux installer
Andre Heinecke <andre.heinecke@intevation.de>
parents:
571
diff
changeset
|
494 return false; |
49168bcb02e2
(Issue55) Sign a linux installer
Andre Heinecke <andre.heinecke@intevation.de>
parents:
571
diff
changeset
|
495 } |
49168bcb02e2
(Issue55) Sign a linux installer
Andre Heinecke <andre.heinecke@intevation.de>
parents:
571
diff
changeset
|
496 |
1368
41cf49df007d
(issue179) Add signature timestamp in linux installer packages
Andre Heinecke <andre.heinecke@intevation.de>
parents:
1319
diff
changeset
|
497 QByteArray inputContent = inFile.readAll(); // Memory is cheap :) |
761
49168bcb02e2
(Issue55) Sign a linux installer
Andre Heinecke <andre.heinecke@intevation.de>
parents:
571
diff
changeset
|
498 inFile.close(); |
49168bcb02e2
(Issue55) Sign a linux installer
Andre Heinecke <andre.heinecke@intevation.de>
parents:
571
diff
changeset
|
499 |
1368
41cf49df007d
(issue179) Add signature timestamp in linux installer packages
Andre Heinecke <andre.heinecke@intevation.de>
parents:
1319
diff
changeset
|
500 |
41cf49df007d
(issue179) Add signature timestamp in linux installer packages
Andre Heinecke <andre.heinecke@intevation.de>
parents:
1319
diff
changeset
|
501 /* Append the current date time to the signed data so that it is also signed. |
41cf49df007d
(issue179) Add signature timestamp in linux installer packages
Andre Heinecke <andre.heinecke@intevation.de>
parents:
1319
diff
changeset
|
502 * Until 2106 qt will probably return an 64 bit int on toTime_t. If not |
41cf49df007d
(issue179) Add signature timestamp in linux installer packages
Andre Heinecke <andre.heinecke@intevation.de>
parents:
1319
diff
changeset
|
503 * I'm sorry. */ |
41cf49df007d
(issue179) Add signature timestamp in linux installer packages
Andre Heinecke <andre.heinecke@intevation.de>
parents:
1319
diff
changeset
|
504 QString sign_dt = QString("%1").arg(QDateTime::currentDateTime().toTime_t()); |
41cf49df007d
(issue179) Add signature timestamp in linux installer packages
Andre Heinecke <andre.heinecke@intevation.de>
parents:
1319
diff
changeset
|
505 inputContent.replace("###SIGNATURE_DATE###", sign_dt.toLocal8Bit().constData()); |
41cf49df007d
(issue179) Add signature timestamp in linux installer packages
Andre Heinecke <andre.heinecke@intevation.de>
parents:
1319
diff
changeset
|
506 inputContent.append("\r\nS_DT:" + sign_dt); |
41cf49df007d
(issue179) Add signature timestamp in linux installer packages
Andre Heinecke <andre.heinecke@intevation.de>
parents:
1319
diff
changeset
|
507 |
761
49168bcb02e2
(Issue55) Sign a linux installer
Andre Heinecke <andre.heinecke@intevation.de>
parents:
571
diff
changeset
|
508 if (inputContent.isEmpty()) { |
49168bcb02e2
(Issue55) Sign a linux installer
Andre Heinecke <andre.heinecke@intevation.de>
parents:
571
diff
changeset
|
509 showErrorMessage(tr("Failed to read input file: %1").arg(inFile.fileName())); |
49168bcb02e2
(Issue55) Sign a linux installer
Andre Heinecke <andre.heinecke@intevation.de>
parents:
571
diff
changeset
|
510 pk_free(&pk); |
49168bcb02e2
(Issue55) Sign a linux installer
Andre Heinecke <andre.heinecke@intevation.de>
parents:
571
diff
changeset
|
511 return false; |
49168bcb02e2
(Issue55) Sign a linux installer
Andre Heinecke <andre.heinecke@intevation.de>
parents:
571
diff
changeset
|
512 } |
49168bcb02e2
(Issue55) Sign a linux installer
Andre Heinecke <andre.heinecke@intevation.de>
parents:
571
diff
changeset
|
513 |
49168bcb02e2
(Issue55) Sign a linux installer
Andre Heinecke <andre.heinecke@intevation.de>
parents:
571
diff
changeset
|
514 const QByteArray signature = rsaSignSHA256Hash(sha256sum(inputContent), &pk); |
49168bcb02e2
(Issue55) Sign a linux installer
Andre Heinecke <andre.heinecke@intevation.de>
parents:
571
diff
changeset
|
515 |
49168bcb02e2
(Issue55) Sign a linux installer
Andre Heinecke <andre.heinecke@intevation.de>
parents:
571
diff
changeset
|
516 pk_free(&pk); |
49168bcb02e2
(Issue55) Sign a linux installer
Andre Heinecke <andre.heinecke@intevation.de>
parents:
571
diff
changeset
|
517 if (signature.size() != 3072 / 8) { |
49168bcb02e2
(Issue55) Sign a linux installer
Andre Heinecke <andre.heinecke@intevation.de>
parents:
571
diff
changeset
|
518 qDebug() << "Signature creation returned signature of invalid size."; |
49168bcb02e2
(Issue55) Sign a linux installer
Andre Heinecke <andre.heinecke@intevation.de>
parents:
571
diff
changeset
|
519 return false; |
49168bcb02e2
(Issue55) Sign a linux installer
Andre Heinecke <andre.heinecke@intevation.de>
parents:
571
diff
changeset
|
520 } |
49168bcb02e2
(Issue55) Sign a linux installer
Andre Heinecke <andre.heinecke@intevation.de>
parents:
571
diff
changeset
|
521 |
49168bcb02e2
(Issue55) Sign a linux installer
Andre Heinecke <andre.heinecke@intevation.de>
parents:
571
diff
changeset
|
522 QSaveFile outFile(output); |
49168bcb02e2
(Issue55) Sign a linux installer
Andre Heinecke <andre.heinecke@intevation.de>
parents:
571
diff
changeset
|
523 outFile.open(QIODevice::WriteOnly); |
49168bcb02e2
(Issue55) Sign a linux installer
Andre Heinecke <andre.heinecke@intevation.de>
parents:
571
diff
changeset
|
524 outFile.write(inputContent); |
49168bcb02e2
(Issue55) Sign a linux installer
Andre Heinecke <andre.heinecke@intevation.de>
parents:
571
diff
changeset
|
525 outFile.write("\r\nS:"); |
49168bcb02e2
(Issue55) Sign a linux installer
Andre Heinecke <andre.heinecke@intevation.de>
parents:
571
diff
changeset
|
526 outFile.write(signature.toBase64()); |
867
ecdc279dea15
Add newline add end of file after the text signature
Andre Heinecke <andre.heinecke@intevation.de>
parents:
864
diff
changeset
|
527 outFile.write("\n"); |
761
49168bcb02e2
(Issue55) Sign a linux installer
Andre Heinecke <andre.heinecke@intevation.de>
parents:
571
diff
changeset
|
528 |
49168bcb02e2
(Issue55) Sign a linux installer
Andre Heinecke <andre.heinecke@intevation.de>
parents:
571
diff
changeset
|
529 return outFile.commit(); |
49168bcb02e2
(Issue55) Sign a linux installer
Andre Heinecke <andre.heinecke@intevation.de>
parents:
571
diff
changeset
|
530 } |
49168bcb02e2
(Issue55) Sign a linux installer
Andre Heinecke <andre.heinecke@intevation.de>
parents:
571
diff
changeset
|
531 |
526
f6371e9c959a
Add a dialog when installer creation is done
Andre Heinecke <aheinecke@intevation.de>
parents:
518
diff
changeset
|
532 FinishedDialog::FinishedDialog(QDialog *parent, |
f6371e9c959a
Add a dialog when installer creation is done
Andre Heinecke <aheinecke@intevation.de>
parents:
518
diff
changeset
|
533 QString msg, QString details, bool isErr): |
f6371e9c959a
Add a dialog when installer creation is done
Andre Heinecke <aheinecke@intevation.de>
parents:
518
diff
changeset
|
534 QDialog(parent) |
f6371e9c959a
Add a dialog when installer creation is done
Andre Heinecke <aheinecke@intevation.de>
parents:
518
diff
changeset
|
535 { |
f6371e9c959a
Add a dialog when installer creation is done
Andre Heinecke <aheinecke@intevation.de>
parents:
518
diff
changeset
|
536 QVBoxLayout *topLayout = new QVBoxLayout; |
f6371e9c959a
Add a dialog when installer creation is done
Andre Heinecke <aheinecke@intevation.de>
parents:
518
diff
changeset
|
537 QHBoxLayout *buttonLayout = new QHBoxLayout; |
f6371e9c959a
Add a dialog when installer creation is done
Andre Heinecke <aheinecke@intevation.de>
parents:
518
diff
changeset
|
538 QLabel *msgLabel = new QLabel; |
f6371e9c959a
Add a dialog when installer creation is done
Andre Heinecke <aheinecke@intevation.de>
parents:
518
diff
changeset
|
539 QTextEdit *detailsWindow = new QTextEdit; |
f6371e9c959a
Add a dialog when installer creation is done
Andre Heinecke <aheinecke@intevation.de>
parents:
518
diff
changeset
|
540 |
f6371e9c959a
Add a dialog when installer creation is done
Andre Heinecke <aheinecke@intevation.de>
parents:
518
diff
changeset
|
541 detailsWindow->insertPlainText(details); |
f6371e9c959a
Add a dialog when installer creation is done
Andre Heinecke <aheinecke@intevation.de>
parents:
518
diff
changeset
|
542 detailsWindow->setReadOnly(true); |
f6371e9c959a
Add a dialog when installer creation is done
Andre Heinecke <aheinecke@intevation.de>
parents:
518
diff
changeset
|
543 detailsWindow->hide(); |
f6371e9c959a
Add a dialog when installer creation is done
Andre Heinecke <aheinecke@intevation.de>
parents:
518
diff
changeset
|
544 |
f6371e9c959a
Add a dialog when installer creation is done
Andre Heinecke <aheinecke@intevation.de>
parents:
518
diff
changeset
|
545 if (!isErr) { |
772
aec00847d86d
Improve message caption for successful package creation
Andre Heinecke <andre.heinecke@intevation.de>
parents:
761
diff
changeset
|
546 setWindowTitle(tr("Successfully created installation package")); |
526
f6371e9c959a
Add a dialog when installer creation is done
Andre Heinecke <aheinecke@intevation.de>
parents:
518
diff
changeset
|
547 msgLabel->setPixmap(QApplication::style()->standardIcon( |
f6371e9c959a
Add a dialog when installer creation is done
Andre Heinecke <aheinecke@intevation.de>
parents:
518
diff
changeset
|
548 QStyle::SP_MessageBoxInformation).pixmap(16, 16)); |
f6371e9c959a
Add a dialog when installer creation is done
Andre Heinecke <aheinecke@intevation.de>
parents:
518
diff
changeset
|
549 } else { |
f6371e9c959a
Add a dialog when installer creation is done
Andre Heinecke <aheinecke@intevation.de>
parents:
518
diff
changeset
|
550 setWindowTitle(tr("Error!")); |
f6371e9c959a
Add a dialog when installer creation is done
Andre Heinecke <aheinecke@intevation.de>
parents:
518
diff
changeset
|
551 msgLabel->setPixmap(QApplication::style()->standardIcon( |
f6371e9c959a
Add a dialog when installer creation is done
Andre Heinecke <aheinecke@intevation.de>
parents:
518
diff
changeset
|
552 QStyle::SP_MessageBoxCritical).pixmap(16, 16)); |
f6371e9c959a
Add a dialog when installer creation is done
Andre Heinecke <aheinecke@intevation.de>
parents:
518
diff
changeset
|
553 } |
f6371e9c959a
Add a dialog when installer creation is done
Andre Heinecke <aheinecke@intevation.de>
parents:
518
diff
changeset
|
554 msgLabel->setText(msg); |
f6371e9c959a
Add a dialog when installer creation is done
Andre Heinecke <aheinecke@intevation.de>
parents:
518
diff
changeset
|
555 |
f6371e9c959a
Add a dialog when installer creation is done
Andre Heinecke <aheinecke@intevation.de>
parents:
518
diff
changeset
|
556 topLayout->addWidget(msgLabel); |
f6371e9c959a
Add a dialog when installer creation is done
Andre Heinecke <aheinecke@intevation.de>
parents:
518
diff
changeset
|
557 topLayout->addWidget(detailsWindow); |
f6371e9c959a
Add a dialog when installer creation is done
Andre Heinecke <aheinecke@intevation.de>
parents:
518
diff
changeset
|
558 QPushButton *detailsBtn = new QPushButton(tr("Details")); |
f6371e9c959a
Add a dialog when installer creation is done
Andre Heinecke <aheinecke@intevation.de>
parents:
518
diff
changeset
|
559 connect(detailsBtn, SIGNAL(clicked()), detailsWindow, SLOT(show())); |
f6371e9c959a
Add a dialog when installer creation is done
Andre Heinecke <aheinecke@intevation.de>
parents:
518
diff
changeset
|
560 buttonLayout->addWidget(detailsBtn); |
f6371e9c959a
Add a dialog when installer creation is done
Andre Heinecke <aheinecke@intevation.de>
parents:
518
diff
changeset
|
561 |
f6371e9c959a
Add a dialog when installer creation is done
Andre Heinecke <aheinecke@intevation.de>
parents:
518
diff
changeset
|
562 QPushButton *okBtn = new QPushButton(tr("OK")); |
f6371e9c959a
Add a dialog when installer creation is done
Andre Heinecke <aheinecke@intevation.de>
parents:
518
diff
changeset
|
563 okBtn->setIcon(QApplication::style()->standardIcon(QStyle::SP_DialogOkButton)); |
f6371e9c959a
Add a dialog when installer creation is done
Andre Heinecke <aheinecke@intevation.de>
parents:
518
diff
changeset
|
564 connect(okBtn, SIGNAL(clicked()), this, SLOT(close())); |
f6371e9c959a
Add a dialog when installer creation is done
Andre Heinecke <aheinecke@intevation.de>
parents:
518
diff
changeset
|
565 buttonLayout->insertStretch(0, 100); |
f6371e9c959a
Add a dialog when installer creation is done
Andre Heinecke <aheinecke@intevation.de>
parents:
518
diff
changeset
|
566 buttonLayout->addWidget(okBtn); |
f6371e9c959a
Add a dialog when installer creation is done
Andre Heinecke <aheinecke@intevation.de>
parents:
518
diff
changeset
|
567 |
f6371e9c959a
Add a dialog when installer creation is done
Andre Heinecke <aheinecke@intevation.de>
parents:
518
diff
changeset
|
568 topLayout->addLayout(buttonLayout); |
f6371e9c959a
Add a dialog when installer creation is done
Andre Heinecke <aheinecke@intevation.de>
parents:
518
diff
changeset
|
569 setLayout(topLayout); |
f6371e9c959a
Add a dialog when installer creation is done
Andre Heinecke <aheinecke@intevation.de>
parents:
518
diff
changeset
|
570 } |
f6371e9c959a
Add a dialog when installer creation is done
Andre Heinecke <aheinecke@intevation.de>
parents:
518
diff
changeset
|
571 |