annotate ui/createinstallerdialog.cpp @ 1386:90a8eb36e9b0

Add public certificate for updates.trustbridge.de
author Andre Heinecke <andre.heinecke@intevation.de>
date Thu, 15 Jan 2015 16:14:35 +0100
parents c8a6a3e6bdeb
children f3e2df6b49ba
rev   line source
404
17e1c8f37d72 Add License
Andre Heinecke <aheinecke@intevation.de>
parents: 361
diff changeset
1 /* Copyright (C) 2014 by Bundesamt für Sicherheit in der Informationstechnik
17e1c8f37d72 Add License
Andre Heinecke <aheinecke@intevation.de>
parents: 361
diff changeset
2 * Software engineering by Intevation GmbH
17e1c8f37d72 Add License
Andre Heinecke <aheinecke@intevation.de>
parents: 361
diff changeset
3 *
17e1c8f37d72 Add License
Andre Heinecke <aheinecke@intevation.de>
parents: 361
diff changeset
4 * This file is Free Software under the GNU GPL (v>=2)
17e1c8f37d72 Add License
Andre Heinecke <aheinecke@intevation.de>
parents: 361
diff changeset
5 * and comes with ABSOLUTELY NO WARRANTY!
17e1c8f37d72 Add License
Andre Heinecke <aheinecke@intevation.de>
parents: 361
diff changeset
6 * See LICENSE.txt for details.
17e1c8f37d72 Add License
Andre Heinecke <aheinecke@intevation.de>
parents: 361
diff changeset
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
1377
c8a6a3e6bdeb (issue178) Show checksums after installer creation
Andre Heinecke <andre.heinecke@intevation.de>
parents: 1368
diff changeset
35 #define SIGN_URL "https://www.trustbridge.de"
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
1377
c8a6a3e6bdeb (issue178) Show checksums after installer creation
Andre Heinecke <andre.heinecke@intevation.de>
parents: 1368
diff changeset
38 #define SIGN_PUBLISHER "Bundesamt für Sicherheit in der Informationstechnik"
571
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 }
1377
c8a6a3e6bdeb (issue178) Show checksums after installer creation
Andre Heinecke <andre.heinecke@intevation.de>
parents: 1368
diff changeset
188
571
6c4fff146999 Implement codesigning in the administrator tool
Andre Heinecke <aheinecke@intevation.de>
parents: 542
diff changeset
189 mProgress.setLabelText(tr("Signing installer package..."));
6c4fff146999 Implement codesigning in the administrator tool
Andre Heinecke <aheinecke@intevation.de>
parents: 542
diff changeset
190 if (!signFile(mInstallerPath)) {
6c4fff146999 Implement codesigning in the administrator tool
Andre Heinecke <aheinecke@intevation.de>
parents: 542
diff changeset
191 showErrorMessage(tr("Failed to sign installer package."));
6c4fff146999 Implement codesigning in the administrator tool
Andre Heinecke <aheinecke@intevation.de>
parents: 542
diff changeset
192 QFile::remove(mInstallerPath);
1377
c8a6a3e6bdeb (issue178) Show checksums after installer creation
Andre Heinecke <andre.heinecke@intevation.de>
parents: 1368
diff changeset
193 mProgress.cancel();
c8a6a3e6bdeb (issue178) Show checksums after installer creation
Andre Heinecke <andre.heinecke@intevation.de>
parents: 1368
diff changeset
194 } else {
c8a6a3e6bdeb (issue178) Show checksums after installer creation
Andre Heinecke <andre.heinecke@intevation.de>
parents: 1368
diff changeset
195 mProgress.setLabelText(tr("Calculating checksums..."));
c8a6a3e6bdeb (issue178) Show checksums after installer creation
Andre Heinecke <andre.heinecke@intevation.de>
parents: 1368
diff changeset
196 QString checksums = QString::fromLatin1("<br/><h3>") + tr("Checksums:") + "</h3>";
c8a6a3e6bdeb (issue178) Show checksums after installer creation
Andre Heinecke <andre.heinecke@intevation.de>
parents: 1368
diff changeset
197 QDir outDir(mSaveFile->text());
c8a6a3e6bdeb (issue178) Show checksums after installer creation
Andre Heinecke <andre.heinecke@intevation.de>
parents: 1368
diff changeset
198 bool checksumErr = false;
c8a6a3e6bdeb (issue178) Show checksums after installer creation
Andre Heinecke <andre.heinecke@intevation.de>
parents: 1368
diff changeset
199 QStringList filters;
c8a6a3e6bdeb (issue178) Show checksums after installer creation
Andre Heinecke <andre.heinecke@intevation.de>
parents: 1368
diff changeset
200 filters << "TrustBridge-*.sh" << "TrustBridge-*.exe";
c8a6a3e6bdeb (issue178) Show checksums after installer creation
Andre Heinecke <andre.heinecke@intevation.de>
parents: 1368
diff changeset
201 qDebug() << "Entries: " << outDir.entryList(filters);
c8a6a3e6bdeb (issue178) Show checksums after installer creation
Andre Heinecke <andre.heinecke@intevation.de>
parents: 1368
diff changeset
202 qDebug() << "Entries unfiltered: " << outDir.entryList();
c8a6a3e6bdeb (issue178) Show checksums after installer creation
Andre Heinecke <andre.heinecke@intevation.de>
parents: 1368
diff changeset
203 foreach (const QString &file, outDir.entryList(filters)) {
c8a6a3e6bdeb (issue178) Show checksums after installer creation
Andre Heinecke <andre.heinecke@intevation.de>
parents: 1368
diff changeset
204 QFile f(outDir.filePath(file));
c8a6a3e6bdeb (issue178) Show checksums after installer creation
Andre Heinecke <andre.heinecke@intevation.de>
parents: 1368
diff changeset
205 if (!f.open(QIODevice::ReadOnly)) {
c8a6a3e6bdeb (issue178) Show checksums after installer creation
Andre Heinecke <andre.heinecke@intevation.de>
parents: 1368
diff changeset
206 showErrorMessage (tr("Failed to open file \"%1\".").arg(file));
c8a6a3e6bdeb (issue178) Show checksums after installer creation
Andre Heinecke <andre.heinecke@intevation.de>
parents: 1368
diff changeset
207 checksumErr = true;
c8a6a3e6bdeb (issue178) Show checksums after installer creation
Andre Heinecke <andre.heinecke@intevation.de>
parents: 1368
diff changeset
208 break;
c8a6a3e6bdeb (issue178) Show checksums after installer creation
Andre Heinecke <andre.heinecke@intevation.de>
parents: 1368
diff changeset
209 }
c8a6a3e6bdeb (issue178) Show checksums after installer creation
Andre Heinecke <andre.heinecke@intevation.de>
parents: 1368
diff changeset
210 const QByteArray fileData = f.readAll();
c8a6a3e6bdeb (issue178) Show checksums after installer creation
Andre Heinecke <andre.heinecke@intevation.de>
parents: 1368
diff changeset
211 if (fileData.isEmpty()) {
c8a6a3e6bdeb (issue178) Show checksums after installer creation
Andre Heinecke <andre.heinecke@intevation.de>
parents: 1368
diff changeset
212 showErrorMessage (tr("Failed to read file \"%1\".").arg(file));
c8a6a3e6bdeb (issue178) Show checksums after installer creation
Andre Heinecke <andre.heinecke@intevation.de>
parents: 1368
diff changeset
213 checksumErr = true;
c8a6a3e6bdeb (issue178) Show checksums after installer creation
Andre Heinecke <andre.heinecke@intevation.de>
parents: 1368
diff changeset
214 break;
c8a6a3e6bdeb (issue178) Show checksums after installer creation
Andre Heinecke <andre.heinecke@intevation.de>
parents: 1368
diff changeset
215 }
c8a6a3e6bdeb (issue178) Show checksums after installer creation
Andre Heinecke <andre.heinecke@intevation.de>
parents: 1368
diff changeset
216 const QByteArray theSha256sum = sha256sum(fileData);
c8a6a3e6bdeb (issue178) Show checksums after installer creation
Andre Heinecke <andre.heinecke@intevation.de>
parents: 1368
diff changeset
217 const QByteArray theSha1sum = sha1sum(fileData);
c8a6a3e6bdeb (issue178) Show checksums after installer creation
Andre Heinecke <andre.heinecke@intevation.de>
parents: 1368
diff changeset
218 if (theSha1sum.isEmpty() || theSha256sum.isEmpty()) {
c8a6a3e6bdeb (issue178) Show checksums after installer creation
Andre Heinecke <andre.heinecke@intevation.de>
parents: 1368
diff changeset
219 showErrorMessage (tr("Failed to calculate checksums for \"%1\".").arg(file));
c8a6a3e6bdeb (issue178) Show checksums after installer creation
Andre Heinecke <andre.heinecke@intevation.de>
parents: 1368
diff changeset
220 checksumErr = true;
c8a6a3e6bdeb (issue178) Show checksums after installer creation
Andre Heinecke <andre.heinecke@intevation.de>
parents: 1368
diff changeset
221 break;
c8a6a3e6bdeb (issue178) Show checksums after installer creation
Andre Heinecke <andre.heinecke@intevation.de>
parents: 1368
diff changeset
222 }
c8a6a3e6bdeb (issue178) Show checksums after installer creation
Andre Heinecke <andre.heinecke@intevation.de>
parents: 1368
diff changeset
223 checksums += QString::fromLatin1("<br/><b>%1:</b><br/><pre>").arg(file);
c8a6a3e6bdeb (issue178) Show checksums after installer creation
Andre Heinecke <andre.heinecke@intevation.de>
parents: 1368
diff changeset
224 checksums += " SHA1: ";
c8a6a3e6bdeb (issue178) Show checksums after installer creation
Andre Heinecke <andre.heinecke@intevation.de>
parents: 1368
diff changeset
225 for (int i=0; i < theSha1sum.size(); i++) {
c8a6a3e6bdeb (issue178) Show checksums after installer creation
Andre Heinecke <andre.heinecke@intevation.de>
parents: 1368
diff changeset
226 checksums += QString("%1").arg(
c8a6a3e6bdeb (issue178) Show checksums after installer creation
Andre Heinecke <andre.heinecke@intevation.de>
parents: 1368
diff changeset
227 (unsigned char)(theSha1sum[i]), 0, 16).rightJustified(2, '0');
c8a6a3e6bdeb (issue178) Show checksums after installer creation
Andre Heinecke <andre.heinecke@intevation.de>
parents: 1368
diff changeset
228 }
c8a6a3e6bdeb (issue178) Show checksums after installer creation
Andre Heinecke <andre.heinecke@intevation.de>
parents: 1368
diff changeset
229
c8a6a3e6bdeb (issue178) Show checksums after installer creation
Andre Heinecke <andre.heinecke@intevation.de>
parents: 1368
diff changeset
230 checksums += "\n SHA256: ";
c8a6a3e6bdeb (issue178) Show checksums after installer creation
Andre Heinecke <andre.heinecke@intevation.de>
parents: 1368
diff changeset
231 for (int i=0; i < theSha256sum.size(); i++) {
c8a6a3e6bdeb (issue178) Show checksums after installer creation
Andre Heinecke <andre.heinecke@intevation.de>
parents: 1368
diff changeset
232 checksums += QString("%1").arg(
c8a6a3e6bdeb (issue178) Show checksums after installer creation
Andre Heinecke <andre.heinecke@intevation.de>
parents: 1368
diff changeset
233 (unsigned char)(theSha256sum[i]), 0, 16).rightJustified(2, '0');
c8a6a3e6bdeb (issue178) Show checksums after installer creation
Andre Heinecke <andre.heinecke@intevation.de>
parents: 1368
diff changeset
234 }
c8a6a3e6bdeb (issue178) Show checksums after installer creation
Andre Heinecke <andre.heinecke@intevation.de>
parents: 1368
diff changeset
235 checksums += "</pre>";
c8a6a3e6bdeb (issue178) Show checksums after installer creation
Andre Heinecke <andre.heinecke@intevation.de>
parents: 1368
diff changeset
236
c8a6a3e6bdeb (issue178) Show checksums after installer creation
Andre Heinecke <andre.heinecke@intevation.de>
parents: 1368
diff changeset
237 }
c8a6a3e6bdeb (issue178) Show checksums after installer creation
Andre Heinecke <andre.heinecke@intevation.de>
parents: 1368
diff changeset
238
c8a6a3e6bdeb (issue178) Show checksums after installer creation
Andre Heinecke <andre.heinecke@intevation.de>
parents: 1368
diff changeset
239 mProgress.cancel();
c8a6a3e6bdeb (issue178) Show checksums after installer creation
Andre Heinecke <andre.heinecke@intevation.de>
parents: 1368
diff changeset
240 if (!checksumErr) {
c8a6a3e6bdeb (issue178) Show checksums after installer creation
Andre Heinecke <andre.heinecke@intevation.de>
parents: 1368
diff changeset
241 FinishedDialog *fin = new FinishedDialog(0, tr("Successfully created the installation packages in \"%1\".")
c8a6a3e6bdeb (issue178) Show checksums after installer creation
Andre Heinecke <andre.heinecke@intevation.de>
parents: 1368
diff changeset
242 .arg(mSaveFile->text()) + checksums, mNSISProc.readAll(), false);
c8a6a3e6bdeb (issue178) Show checksums after installer creation
Andre Heinecke <andre.heinecke@intevation.de>
parents: 1368
diff changeset
243 qDebug() << "Finished: " << mNSISProc.readAll();
c8a6a3e6bdeb (issue178) Show checksums after installer creation
Andre Heinecke <andre.heinecke@intevation.de>
parents: 1368
diff changeset
244 fin->show();
c8a6a3e6bdeb (issue178) Show checksums after installer creation
Andre Heinecke <andre.heinecke@intevation.de>
parents: 1368
diff changeset
245 }
571
6c4fff146999 Implement codesigning in the administrator tool
Andre Heinecke <aheinecke@intevation.de>
parents: 542
diff changeset
246 }
526
f6371e9c959a Add a dialog when installer creation is done
Andre Heinecke <aheinecke@intevation.de>
parents: 518
diff changeset
247 close();
516
3332db04c77d Call makensis in create installer dialog
Andre Heinecke <aheinecke@intevation.de>
parents: 515
diff changeset
248 }
3332db04c77d Call makensis in create installer dialog
Andre Heinecke <aheinecke@intevation.de>
parents: 515
diff changeset
249
3332db04c77d Call makensis in create installer dialog
Andre Heinecke <aheinecke@intevation.de>
parents: 515
diff changeset
250 void CreateInstallerDialog::processError(QProcess::ProcessError error)
3332db04c77d Call makensis in create installer dialog
Andre Heinecke <aheinecke@intevation.de>
parents: 515
diff changeset
251 {
571
6c4fff146999 Implement codesigning in the administrator tool
Andre Heinecke <aheinecke@intevation.de>
parents: 542
diff changeset
252 if (mCurrentWorkingDir) {
6c4fff146999 Implement codesigning in the administrator tool
Andre Heinecke <aheinecke@intevation.de>
parents: 542
diff changeset
253 delete mCurrentWorkingDir;
6c4fff146999 Implement codesigning in the administrator tool
Andre Heinecke <aheinecke@intevation.de>
parents: 542
diff changeset
254 mCurrentWorkingDir = NULL;
6c4fff146999 Implement codesigning in the administrator tool
Andre Heinecke <aheinecke@intevation.de>
parents: 542
diff changeset
255 }
518
31e0a86f5a35 Actually set the arguments for makensis process. Fix escaping
Andre Heinecke <aheinecke@intevation.de>
parents: 516
diff changeset
256 qDebug() << "Error: " << mNSISProc.readAll();
516
3332db04c77d Call makensis in create installer dialog
Andre Heinecke <aheinecke@intevation.de>
parents: 515
diff changeset
257 mProgress.cancel();
3332db04c77d Call makensis in create installer dialog
Andre Heinecke <aheinecke@intevation.de>
parents: 515
diff changeset
258 }
3332db04c77d Call makensis in create installer dialog
Andre Heinecke <aheinecke@intevation.de>
parents: 515
diff changeset
259
361
b67dd46cd4a9 Added dialog to create a new, signed installer binary.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
260 void CreateInstallerDialog::createInstaller()
b67dd46cd4a9 Added dialog to create a new, signed installer binary.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
261 {
571
6c4fff146999 Implement codesigning in the administrator tool
Andre Heinecke <aheinecke@intevation.de>
parents: 542
diff changeset
262 mProgress.setLabelText(tr("Creating installer package..."));
515
9d3880db6ba7 Improve error handlig and persist user decisions
Andre Heinecke <aheinecke@intevation.de>
parents: 428
diff changeset
263 QDir binDir(mBinaryFolder->text());
516
3332db04c77d Call makensis in create installer dialog
Andre Heinecke <aheinecke@intevation.de>
parents: 515
diff changeset
264 QDir outDir(mSaveFile->text());
3332db04c77d Call makensis in create installer dialog
Andre Heinecke <aheinecke@intevation.de>
parents: 515
diff changeset
265 if (mBinaryFolder->text().isEmpty() || !binDir.exists()) {
515
9d3880db6ba7 Improve error handlig and persist user decisions
Andre Heinecke <aheinecke@intevation.de>
parents: 428
diff changeset
266 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
267 return;
515
9d3880db6ba7 Improve error handlig and persist user decisions
Andre Heinecke <aheinecke@intevation.de>
parents: 428
diff changeset
268 }
516
3332db04c77d Call makensis in create installer dialog
Andre Heinecke <aheinecke@intevation.de>
parents: 515
diff changeset
269 if (mCertFile->text().isEmpty()) {
3332db04c77d Call makensis in create installer dialog
Andre Heinecke <aheinecke@intevation.de>
parents: 515
diff changeset
270 showErrorMessage(tr("Please select a codesigning certificate."));
3332db04c77d Call makensis in create installer dialog
Andre Heinecke <aheinecke@intevation.de>
parents: 515
diff changeset
271 return;
3332db04c77d Call makensis in create installer dialog
Andre Heinecke <aheinecke@intevation.de>
parents: 515
diff changeset
272 }
3332db04c77d Call makensis in create installer dialog
Andre Heinecke <aheinecke@intevation.de>
parents: 515
diff changeset
273 if (mSaveFile->text().isEmpty() || !outDir.exists()) {
3332db04c77d Call makensis in create installer dialog
Andre Heinecke <aheinecke@intevation.de>
parents: 515
diff changeset
274 showErrorMessage(tr("Please select a output folder."));
3332db04c77d Call makensis in create installer dialog
Andre Heinecke <aheinecke@intevation.de>
parents: 515
diff changeset
275 return;
3332db04c77d Call makensis in create installer dialog
Andre Heinecke <aheinecke@intevation.de>
parents: 515
diff changeset
276 }
3332db04c77d Call makensis in create installer dialog
Andre Heinecke <aheinecke@intevation.de>
parents: 515
diff changeset
277 QSettings options(binDir.filePath("meta.ini"), QSettings::IniFormat);
3332db04c77d Call makensis in create installer dialog
Andre Heinecke <aheinecke@intevation.de>
parents: 515
diff changeset
278 options.sync();
3332db04c77d Call makensis in create installer dialog
Andre Heinecke <aheinecke@intevation.de>
parents: 515
diff changeset
279 QStringList keys = options.allKeys();
3332db04c77d Call makensis in create installer dialog
Andre Heinecke <aheinecke@intevation.de>
parents: 515
diff changeset
280 if (options.status() != QSettings::NoError || keys.size() < 1) {
3332db04c77d Call makensis in create installer dialog
Andre Heinecke <aheinecke@intevation.de>
parents: 515
diff changeset
281 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
282 .arg(binDir.path()));
3332db04c77d Call makensis in create installer dialog
Andre Heinecke <aheinecke@intevation.de>
parents: 515
diff changeset
283 return;
3332db04c77d Call makensis in create installer dialog
Andre Heinecke <aheinecke@intevation.de>
parents: 515
diff changeset
284 }
761
49168bcb02e2 (Issue55) Sign a linux installer
Andre Heinecke <andre.heinecke@intevation.de>
parents: 571
diff changeset
285 /* Sign the linux installer */
49168bcb02e2 (Issue55) Sign a linux installer
Andre Heinecke <andre.heinecke@intevation.de>
parents: 571
diff changeset
286 QDir linuxDir(binDir.path() + "/linux");
49168bcb02e2 (Issue55) Sign a linux installer
Andre Heinecke <andre.heinecke@intevation.de>
parents: 571
diff changeset
287 if (!linuxDir.exists()) {
781
60d3f59f0803 Fix typos in translatable strings.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 772
diff changeset
288 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
289 .arg(linuxDir.path()));
49168bcb02e2 (Issue55) Sign a linux installer
Andre Heinecke <andre.heinecke@intevation.de>
parents: 571
diff changeset
290 return;
49168bcb02e2 (Issue55) Sign a linux installer
Andre Heinecke <andre.heinecke@intevation.de>
parents: 571
diff changeset
291 }
49168bcb02e2 (Issue55) Sign a linux installer
Andre Heinecke <andre.heinecke@intevation.de>
parents: 571
diff changeset
292 QStringList nameFilter;
49168bcb02e2 (Issue55) Sign a linux installer
Andre Heinecke <andre.heinecke@intevation.de>
parents: 571
diff changeset
293 nameFilter << "*.sh";
49168bcb02e2 (Issue55) Sign a linux installer
Andre Heinecke <andre.heinecke@intevation.de>
parents: 571
diff changeset
294 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
295 if (candidates.isEmpty()) {
781
60d3f59f0803 Fix typos in translatable strings.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 772
diff changeset
296 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
297 .arg(linuxDir.path()));
49168bcb02e2 (Issue55) Sign a linux installer
Andre Heinecke <andre.heinecke@intevation.de>
parents: 571
diff changeset
298 return;
49168bcb02e2 (Issue55) Sign a linux installer
Andre Heinecke <andre.heinecke@intevation.de>
parents: 571
diff changeset
299 }
516
3332db04c77d Call makensis in create installer dialog
Andre Heinecke <aheinecke@intevation.de>
parents: 515
diff changeset
300
885
1cc85fd3daa5 (issue70) Handle i386 and amd64 packages
Andre Heinecke <andre.heinecke@intevation.de>
parents: 867
diff changeset
301 foreach (const QString& candidate, candidates) {
1cc85fd3daa5 (issue70) Handle i386 and amd64 packages
Andre Heinecke <andre.heinecke@intevation.de>
parents: 867
diff changeset
302 mProgress.setLabelText(tr("Signing Linux package..."));
1cc85fd3daa5 (issue70) Handle i386 and amd64 packages
Andre Heinecke <andre.heinecke@intevation.de>
parents: 867
diff changeset
303 mProgress.cancel();
571
6c4fff146999 Implement codesigning in the administrator tool
Andre Heinecke <aheinecke@intevation.de>
parents: 542
diff changeset
304
885
1cc85fd3daa5 (issue70) Handle i386 and amd64 packages
Andre Heinecke <andre.heinecke@intevation.de>
parents: 867
diff changeset
305 bool x86arch;
1cc85fd3daa5 (issue70) Handle i386 and amd64 packages
Andre Heinecke <andre.heinecke@intevation.de>
parents: 867
diff changeset
306 if (candidate.endsWith("-i386.sh")) {
1cc85fd3daa5 (issue70) Handle i386 and amd64 packages
Andre Heinecke <andre.heinecke@intevation.de>
parents: 867
diff changeset
307 x86arch = true;
1cc85fd3daa5 (issue70) Handle i386 and amd64 packages
Andre Heinecke <andre.heinecke@intevation.de>
parents: 867
diff changeset
308 } else if (candidate.endsWith("-amd64.sh")) {
1cc85fd3daa5 (issue70) Handle i386 and amd64 packages
Andre Heinecke <andre.heinecke@intevation.de>
parents: 867
diff changeset
309 x86arch = false;
1cc85fd3daa5 (issue70) Handle i386 and amd64 packages
Andre Heinecke <andre.heinecke@intevation.de>
parents: 867
diff changeset
310 } else {
1cc85fd3daa5 (issue70) Handle i386 and amd64 packages
Andre Heinecke <andre.heinecke@intevation.de>
parents: 867
diff changeset
311 qDebug() << "Could not detrmine architecture of " << candidate;
1cc85fd3daa5 (issue70) Handle i386 and amd64 packages
Andre Heinecke <andre.heinecke@intevation.de>
parents: 867
diff changeset
312 qDebug() << "Skipping.";
886
197c594aad2b Really skip unknown packages when creating the installer.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 885
diff changeset
313 continue;
885
1cc85fd3daa5 (issue70) Handle i386 and amd64 packages
Andre Heinecke <andre.heinecke@intevation.de>
parents: 867
diff changeset
314 }
1cc85fd3daa5 (issue70) Handle i386 and amd64 packages
Andre Heinecke <andre.heinecke@intevation.de>
parents: 867
diff changeset
315
1cc85fd3daa5 (issue70) Handle i386 and amd64 packages
Andre Heinecke <andre.heinecke@intevation.de>
parents: 867
diff changeset
316 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
317 ).toString().replace(".exe",
890
ad590fb9ab8f Fix another error in package output names.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 889
diff changeset
318 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
319
1cc85fd3daa5 (issue70) Handle i386 and amd64 packages
Andre Heinecke <andre.heinecke@intevation.de>
parents: 867
diff changeset
320 if (!appendTextSignatureToFile(linuxDir.path() + "/" + candidate,
1cc85fd3daa5 (issue70) Handle i386 and amd64 packages
Andre Heinecke <andre.heinecke@intevation.de>
parents: 867
diff changeset
321 outDir.path() + "/" + outFileName)) {
1cc85fd3daa5 (issue70) Handle i386 and amd64 packages
Andre Heinecke <andre.heinecke@intevation.de>
parents: 867
diff changeset
322 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
323 mProgress.close();
1cc85fd3daa5 (issue70) Handle i386 and amd64 packages
Andre Heinecke <andre.heinecke@intevation.de>
parents: 867
diff changeset
324 return;
1cc85fd3daa5 (issue70) Handle i386 and amd64 packages
Andre Heinecke <andre.heinecke@intevation.de>
parents: 867
diff changeset
325 }
761
49168bcb02e2 (Issue55) Sign a linux installer
Andre Heinecke <andre.heinecke@intevation.de>
parents: 571
diff changeset
326 }
49168bcb02e2 (Issue55) Sign a linux installer
Andre Heinecke <andre.heinecke@intevation.de>
parents: 571
diff changeset
327
49168bcb02e2 (Issue55) Sign a linux installer
Andre Heinecke <andre.heinecke@intevation.de>
parents: 571
diff changeset
328 /* The Windows installer */
49168bcb02e2 (Issue55) Sign a linux installer
Andre Heinecke <andre.heinecke@intevation.de>
parents: 571
diff changeset
329
49168bcb02e2 (Issue55) Sign a linux installer
Andre Heinecke <andre.heinecke@intevation.de>
parents: 571
diff changeset
330 mCurrentWorkingDir = codesignBinaries(binDir.path() + "/windows");
49168bcb02e2 (Issue55) Sign a linux installer
Andre Heinecke <andre.heinecke@intevation.de>
parents: 571
diff changeset
331
49168bcb02e2 (Issue55) Sign a linux installer
Andre Heinecke <andre.heinecke@intevation.de>
parents: 571
diff changeset
332 if (!mCurrentWorkingDir) {
571
6c4fff146999 Implement codesigning in the administrator tool
Andre Heinecke <aheinecke@intevation.de>
parents: 542
diff changeset
333 /* 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
334 mProgress.close();
571
6c4fff146999 Implement codesigning in the administrator tool
Andre Heinecke <aheinecke@intevation.de>
parents: 542
diff changeset
335 return;
6c4fff146999 Implement codesigning in the administrator tool
Andre Heinecke <aheinecke@intevation.de>
parents: 542
diff changeset
336 }
6c4fff146999 Implement codesigning in the administrator tool
Andre Heinecke <aheinecke@intevation.de>
parents: 542
diff changeset
337
6c4fff146999 Implement codesigning in the administrator tool
Andre Heinecke <aheinecke@intevation.de>
parents: 542
diff changeset
338 mProgress.setLabelText(tr("Creating NSIS package..."));
6c4fff146999 Implement codesigning in the administrator tool
Andre Heinecke <aheinecke@intevation.de>
parents: 542
diff changeset
339
516
3332db04c77d Call makensis in create installer dialog
Andre Heinecke <aheinecke@intevation.de>
parents: 515
diff changeset
340 /* Copy windows directory contents to tmpdir */
3332db04c77d Call makensis in create installer dialog
Andre Heinecke <aheinecke@intevation.de>
parents: 515
diff changeset
341 QStringList arguments;
3332db04c77d Call makensis in create installer dialog
Andre Heinecke <aheinecke@intevation.de>
parents: 515
diff changeset
342 mNSISProc.setProgram("makensis");
518
31e0a86f5a35 Actually set the arguments for makensis process. Fix escaping
Andre Heinecke <aheinecke@intevation.de>
parents: 516
diff changeset
343 mNSISProc.setProcessChannelMode(QProcess::MergedChannels);
516
3332db04c77d Call makensis in create installer dialog
Andre Heinecke <aheinecke@intevation.de>
parents: 515
diff changeset
344 mNSISProc.setWorkingDirectory(outDir.path());
537
522b4e28c073 Use windows argument format for nsis on windows
Andre Heinecke <aheinecke@intevation.de>
parents: 526
diff changeset
345 #ifdef Q_OS_WIN
761
49168bcb02e2 (Issue55) Sign a linux installer
Andre Heinecke <andre.heinecke@intevation.de>
parents: 571
diff changeset
346 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
347 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
348 arguments << QString::fromLatin1("/Dplugin_dir=") + resourcedir.replace("/", "\\");
541
1cddf87f8f83 ix variable path seperator
Andre Heinecke <aheinecke@intevation.de>
parents: 539
diff changeset
349 arguments << "/Dpath_sep=\\";
537
522b4e28c073 Use windows argument format for nsis on windows
Andre Heinecke <aheinecke@intevation.de>
parents: 526
diff changeset
350 foreach (const QString &key, keys) {
542
421b69eeffe3 Actually write the installer to the output folder
Andre Heinecke <aheinecke@intevation.de>
parents: 541
diff changeset
351 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
352 if (key == "setupname") {
421b69eeffe3 Actually write the installer to the output folder
Andre Heinecke <aheinecke@intevation.de>
parents: 541
diff changeset
353 value = value.arg(outDir.path().replace("/", "\\") + "\\");
571
6c4fff146999 Implement codesigning in the administrator tool
Andre Heinecke <aheinecke@intevation.de>
parents: 542
diff changeset
354 mInstallerPath = value;
542
421b69eeffe3 Actually write the installer to the output folder
Andre Heinecke <aheinecke@intevation.de>
parents: 541
diff changeset
355 }
421b69eeffe3 Actually write the installer to the output folder
Andre Heinecke <aheinecke@intevation.de>
parents: 541
diff changeset
356 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
357 }
864
45cf874221af Check for nsi file and convert slashes to backslashes on windows
Andre Heinecke <andre.heinecke@intevation.de>
parents: 852
diff changeset
358 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
359 #else
761
49168bcb02e2 (Issue55) Sign a linux installer
Andre Heinecke <andre.heinecke@intevation.de>
parents: 571
diff changeset
360 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
361 arguments << QString::fromLatin1("-Dplugin_dir=") + binDir.path() + "/resources";
541
1cddf87f8f83 ix variable path seperator
Andre Heinecke <aheinecke@intevation.de>
parents: 539
diff changeset
362 arguments << "-Dpath_sep=/";
516
3332db04c77d Call makensis in create installer dialog
Andre Heinecke <aheinecke@intevation.de>
parents: 515
diff changeset
363 foreach (const QString &key, keys) {
542
421b69eeffe3 Actually write the installer to the output folder
Andre Heinecke <aheinecke@intevation.de>
parents: 541
diff changeset
364 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
365 if (key == "setupname") {
421b69eeffe3 Actually write the installer to the output folder
Andre Heinecke <aheinecke@intevation.de>
parents: 541
diff changeset
366 value = value.arg(outDir.path() + "/");
571
6c4fff146999 Implement codesigning in the administrator tool
Andre Heinecke <aheinecke@intevation.de>
parents: 542
diff changeset
367 mInstallerPath = value;
542
421b69eeffe3 Actually write the installer to the output folder
Andre Heinecke <aheinecke@intevation.de>
parents: 541
diff changeset
368 }
421b69eeffe3 Actually write the installer to the output folder
Andre Heinecke <aheinecke@intevation.de>
parents: 541
diff changeset
369 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
370 }
864
45cf874221af Check for nsi file and convert slashes to backslashes on windows
Andre Heinecke <andre.heinecke@intevation.de>
parents: 852
diff changeset
371 arguments << binDir.path() + "/trustbridge.nsi";
537
522b4e28c073 Use windows argument format for nsis on windows
Andre Heinecke <aheinecke@intevation.de>
parents: 526
diff changeset
372 #endif
516
3332db04c77d Call makensis in create installer dialog
Andre Heinecke <aheinecke@intevation.de>
parents: 515
diff changeset
373
864
45cf874221af Check for nsi file and convert slashes to backslashes on windows
Andre Heinecke <andre.heinecke@intevation.de>
parents: 852
diff changeset
374
45cf874221af Check for nsi file and convert slashes to backslashes on windows
Andre Heinecke <andre.heinecke@intevation.de>
parents: 852
diff changeset
375 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
376 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
377 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
378 }
516
3332db04c77d Call makensis in create installer dialog
Andre Heinecke <aheinecke@intevation.de>
parents: 515
diff changeset
379
518
31e0a86f5a35 Actually set the arguments for makensis process. Fix escaping
Andre Heinecke <aheinecke@intevation.de>
parents: 516
diff changeset
380 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
381 mNSISProc.setArguments(arguments);
516
3332db04c77d Call makensis in create installer dialog
Andre Heinecke <aheinecke@intevation.de>
parents: 515
diff changeset
382 mNSISProc.start();
3332db04c77d Call makensis in create installer dialog
Andre Heinecke <aheinecke@intevation.de>
parents: 515
diff changeset
383 mProgress.show();
3332db04c77d Call makensis in create installer dialog
Andre Heinecke <aheinecke@intevation.de>
parents: 515
diff changeset
384
3332db04c77d Call makensis in create installer dialog
Andre Heinecke <aheinecke@intevation.de>
parents: 515
diff changeset
385 if (!mNSISProc.waitForStarted() ||
3332db04c77d Call makensis in create installer dialog
Andre Heinecke <aheinecke@intevation.de>
parents: 515
diff changeset
386 mNSISProc.state() == QProcess::NotRunning) {
3332db04c77d Call makensis in create installer dialog
Andre Heinecke <aheinecke@intevation.de>
parents: 515
diff changeset
387 showErrorMessage(tr("Failed to start makensis.\n"
3332db04c77d Call makensis in create installer dialog
Andre Heinecke <aheinecke@intevation.de>
parents: 515
diff changeset
388 "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
389 }
361
b67dd46cd4a9 Added dialog to create a new, signed installer binary.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
390 }
526
f6371e9c959a Add a dialog when installer creation is done
Andre Heinecke <aheinecke@intevation.de>
parents: 518
diff changeset
391
571
6c4fff146999 Implement codesigning in the administrator tool
Andre Heinecke <aheinecke@intevation.de>
parents: 542
diff changeset
392 bool CreateInstallerDialog::signFile(QString filePath) {
6c4fff146999 Implement codesigning in the administrator tool
Andre Heinecke <aheinecke@intevation.de>
parents: 542
diff changeset
393 QProcess signProc;
6c4fff146999 Implement codesigning in the administrator tool
Andre Heinecke <aheinecke@intevation.de>
parents: 542
diff changeset
394 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
395 QStringList candidates;
137a0686de7b (issue158) Try to find osslsigncode also in the application's directory
Andre Heinecke <andre.heinecke@intevation.de>
parents: 1268
diff changeset
396 candidates << "osslsigncode"
137a0686de7b (issue158) Try to find osslsigncode also in the application's directory
Andre Heinecke <andre.heinecke@intevation.de>
parents: 1268
diff changeset
397 << QDir::toNativeSeparators(QCoreApplication::applicationDirPath() + "/osslsigncode");
571
6c4fff146999 Implement codesigning in the administrator tool
Andre Heinecke <aheinecke@intevation.de>
parents: 542
diff changeset
398 QStringList arguments;
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 QSettings mySettings;
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 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
403 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
404 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
405
6c4fff146999 Implement codesigning in the administrator tool
Andre Heinecke <aheinecke@intevation.de>
parents: 542
diff changeset
406 arguments << "sign" << "-certs" << mCertFile->text() << "-key"
6c4fff146999 Implement codesigning in the administrator tool
Andre Heinecke <aheinecke@intevation.de>
parents: 542
diff changeset
407 << mCertFile->text() << "-n" << publisher << "-i" <<
6c4fff146999 Implement codesigning in the administrator tool
Andre Heinecke <aheinecke@intevation.de>
parents: 542
diff changeset
408 url << "-h" << hash << "-in" << filePath << "-out" << filePath + ".signed";
6c4fff146999 Implement codesigning in the administrator tool
Andre Heinecke <aheinecke@intevation.de>
parents: 542
diff changeset
409
6c4fff146999 Implement codesigning in the administrator tool
Andre Heinecke <aheinecke@intevation.de>
parents: 542
diff changeset
410 qDebug() << "Starting osslsigncode with arguments: " << arguments;
6c4fff146999 Implement codesigning in the administrator tool
Andre Heinecke <aheinecke@intevation.de>
parents: 542
diff changeset
411
1319
137a0686de7b (issue158) Try to find osslsigncode also in the application's directory
Andre Heinecke <andre.heinecke@intevation.de>
parents: 1268
diff changeset
412 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
413 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
414 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
415 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
416 signProc.start();
137a0686de7b (issue158) Try to find osslsigncode also in the application's directory
Andre Heinecke <andre.heinecke@intevation.de>
parents: 1268
diff changeset
417
137a0686de7b (issue158) Try to find osslsigncode also in the application's directory
Andre Heinecke <andre.heinecke@intevation.de>
parents: 1268
diff changeset
418 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
419 continue;
137a0686de7b (issue158) Try to find osslsigncode also in the application's directory
Andre Heinecke <andre.heinecke@intevation.de>
parents: 1268
diff changeset
420 }
137a0686de7b (issue158) Try to find osslsigncode also in the application's directory
Andre Heinecke <andre.heinecke@intevation.de>
parents: 1268
diff changeset
421
137a0686de7b (issue158) Try to find osslsigncode also in the application's directory
Andre Heinecke <andre.heinecke@intevation.de>
parents: 1268
diff changeset
422 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
423 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
424 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
425 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
426 continue;
137a0686de7b (issue158) Try to find osslsigncode also in the application's directory
Andre Heinecke <andre.heinecke@intevation.de>
parents: 1268
diff changeset
427 }
137a0686de7b (issue158) Try to find osslsigncode also in the application's directory
Andre Heinecke <andre.heinecke@intevation.de>
parents: 1268
diff changeset
428 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
429 break;
571
6c4fff146999 Implement codesigning in the administrator tool
Andre Heinecke <aheinecke@intevation.de>
parents: 542
diff changeset
430 }
6c4fff146999 Implement codesigning in the administrator tool
Andre Heinecke <aheinecke@intevation.de>
parents: 542
diff changeset
431
1319
137a0686de7b (issue158) Try to find osslsigncode also in the application's directory
Andre Heinecke <andre.heinecke@intevation.de>
parents: 1268
diff changeset
432 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
433 qDebug() << "Failed to execute all osslsigncode candidates.";
571
6c4fff146999 Implement codesigning in the administrator tool
Andre Heinecke <aheinecke@intevation.de>
parents: 542
diff changeset
434 return false;
6c4fff146999 Implement codesigning in the administrator tool
Andre Heinecke <aheinecke@intevation.de>
parents: 542
diff changeset
435 }
6c4fff146999 Implement codesigning in the administrator tool
Andre Heinecke <aheinecke@intevation.de>
parents: 542
diff changeset
436
6c4fff146999 Implement codesigning in the administrator tool
Andre Heinecke <aheinecke@intevation.de>
parents: 542
diff changeset
437 if (!QFile::remove(filePath)) {
6c4fff146999 Implement codesigning in the administrator tool
Andre Heinecke <aheinecke@intevation.de>
parents: 542
diff changeset
438 qDebug() << "Failed to remove file.";
6c4fff146999 Implement codesigning in the administrator tool
Andre Heinecke <aheinecke@intevation.de>
parents: 542
diff changeset
439 return false;
6c4fff146999 Implement codesigning in the administrator tool
Andre Heinecke <aheinecke@intevation.de>
parents: 542
diff changeset
440 }
6c4fff146999 Implement codesigning in the administrator tool
Andre Heinecke <aheinecke@intevation.de>
parents: 542
diff changeset
441 if (!QFile::copy(filePath + ".signed", filePath)) {
6c4fff146999 Implement codesigning in the administrator tool
Andre Heinecke <aheinecke@intevation.de>
parents: 542
diff changeset
442 qDebug() << "Failed to copy signed file in place.";
6c4fff146999 Implement codesigning in the administrator tool
Andre Heinecke <aheinecke@intevation.de>
parents: 542
diff changeset
443 return false;
6c4fff146999 Implement codesigning in the administrator tool
Andre Heinecke <aheinecke@intevation.de>
parents: 542
diff changeset
444 }
6c4fff146999 Implement codesigning in the administrator tool
Andre Heinecke <aheinecke@intevation.de>
parents: 542
diff changeset
445 if (!QFile::remove(filePath + ".signed")) {
6c4fff146999 Implement codesigning in the administrator tool
Andre Heinecke <aheinecke@intevation.de>
parents: 542
diff changeset
446 qDebug() << "Failed to remove signed.";
6c4fff146999 Implement codesigning in the administrator tool
Andre Heinecke <aheinecke@intevation.de>
parents: 542
diff changeset
447 return false;
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 return true;
6c4fff146999 Implement codesigning in the administrator tool
Andre Heinecke <aheinecke@intevation.de>
parents: 542
diff changeset
450 }
6c4fff146999 Implement codesigning in the administrator tool
Andre Heinecke <aheinecke@intevation.de>
parents: 542
diff changeset
451
979
01128d63226d Copy the windows files recursively into the temporary directory
Andre Heinecke <andre.heinecke@intevation.de>
parents: 890
diff changeset
452 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
453 {
01128d63226d Copy the windows files recursively into the temporary directory
Andre Heinecke <andre.heinecke@intevation.de>
parents: 890
diff changeset
454 QDir dir(src);
01128d63226d Copy the windows files recursively into the temporary directory
Andre Heinecke <andre.heinecke@intevation.de>
parents: 890
diff changeset
455 if (! dir.exists()) {
01128d63226d Copy the windows files recursively into the temporary directory
Andre Heinecke <andre.heinecke@intevation.de>
parents: 890
diff changeset
456 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
457 return false;
01128d63226d Copy the windows files recursively into the temporary directory
Andre Heinecke <andre.heinecke@intevation.de>
parents: 890
diff changeset
458 }
01128d63226d Copy the windows files recursively into the temporary directory
Andre Heinecke <andre.heinecke@intevation.de>
parents: 890
diff changeset
459
01128d63226d Copy the windows files recursively into the temporary directory
Andre Heinecke <andre.heinecke@intevation.de>
parents: 890
diff changeset
460 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
461 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
462 dir.mkpath(dst_path);
01128d63226d Copy the windows files recursively into the temporary directory
Andre Heinecke <andre.heinecke@intevation.de>
parents: 890
diff changeset
463 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
464 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
465 return false;
01128d63226d Copy the windows files recursively into the temporary directory
Andre Heinecke <andre.heinecke@intevation.de>
parents: 890
diff changeset
466 }
01128d63226d Copy the windows files recursively into the temporary directory
Andre Heinecke <andre.heinecke@intevation.de>
parents: 890
diff changeset
467 }
01128d63226d Copy the windows files recursively into the temporary directory
Andre Heinecke <andre.heinecke@intevation.de>
parents: 890
diff changeset
468
01128d63226d Copy the windows files recursively into the temporary directory
Andre Heinecke <andre.heinecke@intevation.de>
parents: 890
diff changeset
469 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
470 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
471 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
472 return false;
01128d63226d Copy the windows files recursively into the temporary directory
Andre Heinecke <andre.heinecke@intevation.de>
parents: 890
diff changeset
473 }
01128d63226d Copy the windows files recursively into the temporary directory
Andre Heinecke <andre.heinecke@intevation.de>
parents: 890
diff changeset
474 }
01128d63226d Copy the windows files recursively into the temporary directory
Andre Heinecke <andre.heinecke@intevation.de>
parents: 890
diff changeset
475 return true;
01128d63226d Copy the windows files recursively into the temporary directory
Andre Heinecke <andre.heinecke@intevation.de>
parents: 890
diff changeset
476 }
571
6c4fff146999 Implement codesigning in the administrator tool
Andre Heinecke <aheinecke@intevation.de>
parents: 542
diff changeset
477
6c4fff146999 Implement codesigning in the administrator tool
Andre Heinecke <aheinecke@intevation.de>
parents: 542
diff changeset
478 QTemporaryDir *CreateInstallerDialog::codesignBinaries(const QDir& sourceDir) {
6c4fff146999 Implement codesigning in the administrator tool
Andre Heinecke <aheinecke@intevation.de>
parents: 542
diff changeset
479 QTemporaryDir* target = new QTemporaryDir();
6c4fff146999 Implement codesigning in the administrator tool
Andre Heinecke <aheinecke@intevation.de>
parents: 542
diff changeset
480 /* 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
481 mProgress.setLabelText(tr("Signing binaries..."));
6c4fff146999 Implement codesigning in the administrator tool
Andre Heinecke <aheinecke@intevation.de>
parents: 542
diff changeset
482
6c4fff146999 Implement codesigning in the administrator tool
Andre Heinecke <aheinecke@intevation.de>
parents: 542
diff changeset
483 mProgress.show();
979
01128d63226d Copy the windows files recursively into the temporary directory
Andre Heinecke <andre.heinecke@intevation.de>
parents: 890
diff changeset
484
01128d63226d Copy the windows files recursively into the temporary directory
Andre Heinecke <andre.heinecke@intevation.de>
parents: 890
diff changeset
485 /* Copy the whole directory. */
01128d63226d Copy the windows files recursively into the temporary directory
Andre Heinecke <andre.heinecke@intevation.de>
parents: 890
diff changeset
486 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
487 qDebug() << "Copy failed.";
01128d63226d Copy the windows files recursively into the temporary directory
Andre Heinecke <andre.heinecke@intevation.de>
parents: 890
diff changeset
488 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
489 mProgress.cancel();
01128d63226d Copy the windows files recursively into the temporary directory
Andre Heinecke <andre.heinecke@intevation.de>
parents: 890
diff changeset
490 return NULL;
01128d63226d Copy the windows files recursively into the temporary directory
Andre Heinecke <andre.heinecke@intevation.de>
parents: 890
diff changeset
491 }
01128d63226d Copy the windows files recursively into the temporary directory
Andre Heinecke <andre.heinecke@intevation.de>
parents: 890
diff changeset
492 /* Sign the top level .exe files */
571
6c4fff146999 Implement codesigning in the administrator tool
Andre Heinecke <aheinecke@intevation.de>
parents: 542
diff changeset
493 foreach (const QFileInfo& entry, sourceDir.entryInfoList()) {
6c4fff146999 Implement codesigning in the administrator tool
Andre Heinecke <aheinecke@intevation.de>
parents: 542
diff changeset
494 QString targetPath = target->path() + QString::fromLatin1("/") + entry.fileName();
6c4fff146999 Implement codesigning in the administrator tool
Andre Heinecke <aheinecke@intevation.de>
parents: 542
diff changeset
495 if (entry.fileName() == "." || entry.fileName() == "..") {
6c4fff146999 Implement codesigning in the administrator tool
Andre Heinecke <aheinecke@intevation.de>
parents: 542
diff changeset
496 continue;
6c4fff146999 Implement codesigning in the administrator tool
Andre Heinecke <aheinecke@intevation.de>
parents: 542
diff changeset
497 }
6c4fff146999 Implement codesigning in the administrator tool
Andre Heinecke <aheinecke@intevation.de>
parents: 542
diff changeset
498 if (entry.suffix() == "exe") {
6c4fff146999 Implement codesigning in the administrator tool
Andre Heinecke <aheinecke@intevation.de>
parents: 542
diff changeset
499 if (!signFile(targetPath)) {
6c4fff146999 Implement codesigning in the administrator tool
Andre Heinecke <aheinecke@intevation.de>
parents: 542
diff changeset
500 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
501 "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
502 "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
503 mProgress.cancel();
6c4fff146999 Implement codesigning in the administrator tool
Andre Heinecke <aheinecke@intevation.de>
parents: 542
diff changeset
504 return NULL;
6c4fff146999 Implement codesigning in the administrator tool
Andre Heinecke <aheinecke@intevation.de>
parents: 542
diff changeset
505 }
6c4fff146999 Implement codesigning in the administrator tool
Andre Heinecke <aheinecke@intevation.de>
parents: 542
diff changeset
506 }
6c4fff146999 Implement codesigning in the administrator tool
Andre Heinecke <aheinecke@intevation.de>
parents: 542
diff changeset
507 }
6c4fff146999 Implement codesigning in the administrator tool
Andre Heinecke <aheinecke@intevation.de>
parents: 542
diff changeset
508 mProgress.cancel();
6c4fff146999 Implement codesigning in the administrator tool
Andre Heinecke <aheinecke@intevation.de>
parents: 542
diff changeset
509 return target;
6c4fff146999 Implement codesigning in the administrator tool
Andre Heinecke <aheinecke@intevation.de>
parents: 542
diff changeset
510 }
6c4fff146999 Implement codesigning in the administrator tool
Andre Heinecke <aheinecke@intevation.de>
parents: 542
diff changeset
511
761
49168bcb02e2 (Issue55) Sign a linux installer
Andre Heinecke <andre.heinecke@intevation.de>
parents: 571
diff changeset
512 bool CreateInstallerDialog::appendTextSignatureToFile(const QString& input,
49168bcb02e2 (Issue55) Sign a linux installer
Andre Heinecke <andre.heinecke@intevation.de>
parents: 571
diff changeset
513 const QString& output) {
49168bcb02e2 (Issue55) Sign a linux installer
Andre Heinecke <andre.heinecke@intevation.de>
parents: 571
diff changeset
514 QFile inFile(input);
49168bcb02e2 (Issue55) Sign a linux installer
Andre Heinecke <andre.heinecke@intevation.de>
parents: 571
diff changeset
515 pk_context pk;
49168bcb02e2 (Issue55) Sign a linux installer
Andre Heinecke <andre.heinecke@intevation.de>
parents: 571
diff changeset
516
49168bcb02e2 (Issue55) Sign a linux installer
Andre Heinecke <andre.heinecke@intevation.de>
parents: 571
diff changeset
517 pk_init(&pk);
49168bcb02e2 (Issue55) Sign a linux installer
Andre Heinecke <andre.heinecke@intevation.de>
parents: 571
diff changeset
518 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
519
49168bcb02e2 (Issue55) Sign a linux installer
Andre Heinecke <andre.heinecke@intevation.de>
parents: 571
diff changeset
520 if (ret != 0) {
49168bcb02e2 (Issue55) Sign a linux installer
Andre Heinecke <andre.heinecke@intevation.de>
parents: 571
diff changeset
521 showErrorMessage(tr("Failed to load certificate: %1")
49168bcb02e2 (Issue55) Sign a linux installer
Andre Heinecke <andre.heinecke@intevation.de>
parents: 571
diff changeset
522 .arg(getPolarSSLErrorMsg(ret)));
49168bcb02e2 (Issue55) Sign a linux installer
Andre Heinecke <andre.heinecke@intevation.de>
parents: 571
diff changeset
523 pk_free(&pk);
49168bcb02e2 (Issue55) Sign a linux installer
Andre Heinecke <andre.heinecke@intevation.de>
parents: 571
diff changeset
524 return false;
49168bcb02e2 (Issue55) Sign a linux installer
Andre Heinecke <andre.heinecke@intevation.de>
parents: 571
diff changeset
525 }
49168bcb02e2 (Issue55) Sign a linux installer
Andre Heinecke <andre.heinecke@intevation.de>
parents: 571
diff changeset
526
49168bcb02e2 (Issue55) Sign a linux installer
Andre Heinecke <andre.heinecke@intevation.de>
parents: 571
diff changeset
527 /* 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
528 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
529 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
530 if (pk.pk_info) {
2efdf2faf4e5 Remove dead variable and fix possible null pointer dereference
Andre Heinecke <andre.heinecke@intevation.de>
parents: 1162
diff changeset
531 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
532 }
761
49168bcb02e2 (Issue55) Sign a linux installer
Andre Heinecke <andre.heinecke@intevation.de>
parents: 571
diff changeset
533 qDebug() << POLARSSL_PK_RSA << "rsa";
49168bcb02e2 (Issue55) Sign a linux installer
Andre Heinecke <andre.heinecke@intevation.de>
parents: 571
diff changeset
534 qDebug() << "size " << pk_get_size(&pk);
49168bcb02e2 (Issue55) Sign a linux installer
Andre Heinecke <andre.heinecke@intevation.de>
parents: 571
diff changeset
535 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
536 pk_free(&pk);
49168bcb02e2 (Issue55) Sign a linux installer
Andre Heinecke <andre.heinecke@intevation.de>
parents: 571
diff changeset
537 return false;
49168bcb02e2 (Issue55) Sign a linux installer
Andre Heinecke <andre.heinecke@intevation.de>
parents: 571
diff changeset
538 }
49168bcb02e2 (Issue55) Sign a linux installer
Andre Heinecke <andre.heinecke@intevation.de>
parents: 571
diff changeset
539
49168bcb02e2 (Issue55) Sign a linux installer
Andre Heinecke <andre.heinecke@intevation.de>
parents: 571
diff changeset
540 if (!inFile.open(QIODevice::ReadOnly)) {
49168bcb02e2 (Issue55) Sign a linux installer
Andre Heinecke <andre.heinecke@intevation.de>
parents: 571
diff changeset
541 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
542 pk_free(&pk);
49168bcb02e2 (Issue55) Sign a linux installer
Andre Heinecke <andre.heinecke@intevation.de>
parents: 571
diff changeset
543 return false;
49168bcb02e2 (Issue55) Sign a linux installer
Andre Heinecke <andre.heinecke@intevation.de>
parents: 571
diff changeset
544 }
49168bcb02e2 (Issue55) Sign a linux installer
Andre Heinecke <andre.heinecke@intevation.de>
parents: 571
diff changeset
545
1368
41cf49df007d (issue179) Add signature timestamp in linux installer packages
Andre Heinecke <andre.heinecke@intevation.de>
parents: 1319
diff changeset
546 QByteArray inputContent = inFile.readAll(); // Memory is cheap :)
761
49168bcb02e2 (Issue55) Sign a linux installer
Andre Heinecke <andre.heinecke@intevation.de>
parents: 571
diff changeset
547 inFile.close();
49168bcb02e2 (Issue55) Sign a linux installer
Andre Heinecke <andre.heinecke@intevation.de>
parents: 571
diff changeset
548
1368
41cf49df007d (issue179) Add signature timestamp in linux installer packages
Andre Heinecke <andre.heinecke@intevation.de>
parents: 1319
diff changeset
549
41cf49df007d (issue179) Add signature timestamp in linux installer packages
Andre Heinecke <andre.heinecke@intevation.de>
parents: 1319
diff changeset
550 /* 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
551 * 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
552 * I'm sorry. */
41cf49df007d (issue179) Add signature timestamp in linux installer packages
Andre Heinecke <andre.heinecke@intevation.de>
parents: 1319
diff changeset
553 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
554 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
555 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
556
761
49168bcb02e2 (Issue55) Sign a linux installer
Andre Heinecke <andre.heinecke@intevation.de>
parents: 571
diff changeset
557 if (inputContent.isEmpty()) {
49168bcb02e2 (Issue55) Sign a linux installer
Andre Heinecke <andre.heinecke@intevation.de>
parents: 571
diff changeset
558 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
559 pk_free(&pk);
49168bcb02e2 (Issue55) Sign a linux installer
Andre Heinecke <andre.heinecke@intevation.de>
parents: 571
diff changeset
560 return false;
49168bcb02e2 (Issue55) Sign a linux installer
Andre Heinecke <andre.heinecke@intevation.de>
parents: 571
diff changeset
561 }
49168bcb02e2 (Issue55) Sign a linux installer
Andre Heinecke <andre.heinecke@intevation.de>
parents: 571
diff changeset
562
49168bcb02e2 (Issue55) Sign a linux installer
Andre Heinecke <andre.heinecke@intevation.de>
parents: 571
diff changeset
563 const QByteArray signature = rsaSignSHA256Hash(sha256sum(inputContent), &pk);
49168bcb02e2 (Issue55) Sign a linux installer
Andre Heinecke <andre.heinecke@intevation.de>
parents: 571
diff changeset
564
49168bcb02e2 (Issue55) Sign a linux installer
Andre Heinecke <andre.heinecke@intevation.de>
parents: 571
diff changeset
565 pk_free(&pk);
49168bcb02e2 (Issue55) Sign a linux installer
Andre Heinecke <andre.heinecke@intevation.de>
parents: 571
diff changeset
566 if (signature.size() != 3072 / 8) {
49168bcb02e2 (Issue55) Sign a linux installer
Andre Heinecke <andre.heinecke@intevation.de>
parents: 571
diff changeset
567 qDebug() << "Signature creation returned signature of invalid size.";
49168bcb02e2 (Issue55) Sign a linux installer
Andre Heinecke <andre.heinecke@intevation.de>
parents: 571
diff changeset
568 return false;
49168bcb02e2 (Issue55) Sign a linux installer
Andre Heinecke <andre.heinecke@intevation.de>
parents: 571
diff changeset
569 }
49168bcb02e2 (Issue55) Sign a linux installer
Andre Heinecke <andre.heinecke@intevation.de>
parents: 571
diff changeset
570
49168bcb02e2 (Issue55) Sign a linux installer
Andre Heinecke <andre.heinecke@intevation.de>
parents: 571
diff changeset
571 QSaveFile outFile(output);
49168bcb02e2 (Issue55) Sign a linux installer
Andre Heinecke <andre.heinecke@intevation.de>
parents: 571
diff changeset
572 outFile.open(QIODevice::WriteOnly);
49168bcb02e2 (Issue55) Sign a linux installer
Andre Heinecke <andre.heinecke@intevation.de>
parents: 571
diff changeset
573 outFile.write(inputContent);
49168bcb02e2 (Issue55) Sign a linux installer
Andre Heinecke <andre.heinecke@intevation.de>
parents: 571
diff changeset
574 outFile.write("\r\nS:");
49168bcb02e2 (Issue55) Sign a linux installer
Andre Heinecke <andre.heinecke@intevation.de>
parents: 571
diff changeset
575 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
576 outFile.write("\n");
761
49168bcb02e2 (Issue55) Sign a linux installer
Andre Heinecke <andre.heinecke@intevation.de>
parents: 571
diff changeset
577
49168bcb02e2 (Issue55) Sign a linux installer
Andre Heinecke <andre.heinecke@intevation.de>
parents: 571
diff changeset
578 return outFile.commit();
49168bcb02e2 (Issue55) Sign a linux installer
Andre Heinecke <andre.heinecke@intevation.de>
parents: 571
diff changeset
579 }
49168bcb02e2 (Issue55) Sign a linux installer
Andre Heinecke <andre.heinecke@intevation.de>
parents: 571
diff changeset
580
526
f6371e9c959a Add a dialog when installer creation is done
Andre Heinecke <aheinecke@intevation.de>
parents: 518
diff changeset
581 FinishedDialog::FinishedDialog(QDialog *parent,
f6371e9c959a Add a dialog when installer creation is done
Andre Heinecke <aheinecke@intevation.de>
parents: 518
diff changeset
582 QString msg, QString details, bool isErr):
f6371e9c959a Add a dialog when installer creation is done
Andre Heinecke <aheinecke@intevation.de>
parents: 518
diff changeset
583 QDialog(parent)
f6371e9c959a Add a dialog when installer creation is done
Andre Heinecke <aheinecke@intevation.de>
parents: 518
diff changeset
584 {
f6371e9c959a Add a dialog when installer creation is done
Andre Heinecke <aheinecke@intevation.de>
parents: 518
diff changeset
585 QVBoxLayout *topLayout = new QVBoxLayout;
f6371e9c959a Add a dialog when installer creation is done
Andre Heinecke <aheinecke@intevation.de>
parents: 518
diff changeset
586 QHBoxLayout *buttonLayout = new QHBoxLayout;
f6371e9c959a Add a dialog when installer creation is done
Andre Heinecke <aheinecke@intevation.de>
parents: 518
diff changeset
587 QLabel *msgLabel = new QLabel;
f6371e9c959a Add a dialog when installer creation is done
Andre Heinecke <aheinecke@intevation.de>
parents: 518
diff changeset
588 QTextEdit *detailsWindow = new QTextEdit;
f6371e9c959a Add a dialog when installer creation is done
Andre Heinecke <aheinecke@intevation.de>
parents: 518
diff changeset
589
f6371e9c959a Add a dialog when installer creation is done
Andre Heinecke <aheinecke@intevation.de>
parents: 518
diff changeset
590 detailsWindow->insertPlainText(details);
f6371e9c959a Add a dialog when installer creation is done
Andre Heinecke <aheinecke@intevation.de>
parents: 518
diff changeset
591 detailsWindow->setReadOnly(true);
f6371e9c959a Add a dialog when installer creation is done
Andre Heinecke <aheinecke@intevation.de>
parents: 518
diff changeset
592 detailsWindow->hide();
f6371e9c959a Add a dialog when installer creation is done
Andre Heinecke <aheinecke@intevation.de>
parents: 518
diff changeset
593
f6371e9c959a Add a dialog when installer creation is done
Andre Heinecke <aheinecke@intevation.de>
parents: 518
diff changeset
594 if (!isErr) {
772
aec00847d86d Improve message caption for successful package creation
Andre Heinecke <andre.heinecke@intevation.de>
parents: 761
diff changeset
595 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
596 msgLabel->setPixmap(QApplication::style()->standardIcon(
f6371e9c959a Add a dialog when installer creation is done
Andre Heinecke <aheinecke@intevation.de>
parents: 518
diff changeset
597 QStyle::SP_MessageBoxInformation).pixmap(16, 16));
f6371e9c959a Add a dialog when installer creation is done
Andre Heinecke <aheinecke@intevation.de>
parents: 518
diff changeset
598 } else {
f6371e9c959a Add a dialog when installer creation is done
Andre Heinecke <aheinecke@intevation.de>
parents: 518
diff changeset
599 setWindowTitle(tr("Error!"));
f6371e9c959a Add a dialog when installer creation is done
Andre Heinecke <aheinecke@intevation.de>
parents: 518
diff changeset
600 msgLabel->setPixmap(QApplication::style()->standardIcon(
f6371e9c959a Add a dialog when installer creation is done
Andre Heinecke <aheinecke@intevation.de>
parents: 518
diff changeset
601 QStyle::SP_MessageBoxCritical).pixmap(16, 16));
f6371e9c959a Add a dialog when installer creation is done
Andre Heinecke <aheinecke@intevation.de>
parents: 518
diff changeset
602 }
f6371e9c959a Add a dialog when installer creation is done
Andre Heinecke <aheinecke@intevation.de>
parents: 518
diff changeset
603 msgLabel->setText(msg);
1377
c8a6a3e6bdeb (issue178) Show checksums after installer creation
Andre Heinecke <andre.heinecke@intevation.de>
parents: 1368
diff changeset
604 msgLabel->setTextInteractionFlags(
c8a6a3e6bdeb (issue178) Show checksums after installer creation
Andre Heinecke <andre.heinecke@intevation.de>
parents: 1368
diff changeset
605 Qt::TextSelectableByMouse |
c8a6a3e6bdeb (issue178) Show checksums after installer creation
Andre Heinecke <andre.heinecke@intevation.de>
parents: 1368
diff changeset
606 Qt::TextSelectableByKeyboard);
526
f6371e9c959a Add a dialog when installer creation is done
Andre Heinecke <aheinecke@intevation.de>
parents: 518
diff changeset
607
f6371e9c959a Add a dialog when installer creation is done
Andre Heinecke <aheinecke@intevation.de>
parents: 518
diff changeset
608 topLayout->addWidget(msgLabel);
f6371e9c959a Add a dialog when installer creation is done
Andre Heinecke <aheinecke@intevation.de>
parents: 518
diff changeset
609 topLayout->addWidget(detailsWindow);
f6371e9c959a Add a dialog when installer creation is done
Andre Heinecke <aheinecke@intevation.de>
parents: 518
diff changeset
610 QPushButton *detailsBtn = new QPushButton(tr("Details"));
f6371e9c959a Add a dialog when installer creation is done
Andre Heinecke <aheinecke@intevation.de>
parents: 518
diff changeset
611 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
612 buttonLayout->addWidget(detailsBtn);
f6371e9c959a Add a dialog when installer creation is done
Andre Heinecke <aheinecke@intevation.de>
parents: 518
diff changeset
613
f6371e9c959a Add a dialog when installer creation is done
Andre Heinecke <aheinecke@intevation.de>
parents: 518
diff changeset
614 QPushButton *okBtn = new QPushButton(tr("OK"));
f6371e9c959a Add a dialog when installer creation is done
Andre Heinecke <aheinecke@intevation.de>
parents: 518
diff changeset
615 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
616 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
617 buttonLayout->insertStretch(0, 100);
f6371e9c959a Add a dialog when installer creation is done
Andre Heinecke <aheinecke@intevation.de>
parents: 518
diff changeset
618 buttonLayout->addWidget(okBtn);
f6371e9c959a Add a dialog when installer creation is done
Andre Heinecke <aheinecke@intevation.de>
parents: 518
diff changeset
619
f6371e9c959a Add a dialog when installer creation is done
Andre Heinecke <aheinecke@intevation.de>
parents: 518
diff changeset
620 topLayout->addLayout(buttonLayout);
f6371e9c959a Add a dialog when installer creation is done
Andre Heinecke <aheinecke@intevation.de>
parents: 518
diff changeset
621 setLayout(topLayout);
f6371e9c959a Add a dialog when installer creation is done
Andre Heinecke <aheinecke@intevation.de>
parents: 518
diff changeset
622 }
f6371e9c959a Add a dialog when installer creation is done
Andre Heinecke <aheinecke@intevation.de>
parents: 518
diff changeset
623

http://wald.intevation.org/projects/trustbridge/