view ui/createinstallerdialog.h @ 1371:23df332b2a4c

(issue179) Read install signature timestamp from config This also changes the way the sigDt is propgated to the MainWindow. It no longer uses the settings but hands it over as a parameter directly.
author Andre Heinecke <andre.heinecke@intevation.de>
date Mon, 24 Nov 2014 15:48:49 +0100
parents 2a1aa9df8f11
children
line wrap: on
line source
/* Copyright (C) 2014 by Bundesamt für Sicherheit in der Informationstechnik
 * Software engineering by Intevation GmbH
 *
 * This file is Free Software under the GNU GPL (v>=2)
 * and comes with ABSOLUTELY NO WARRANTY!
 * See LICENSE.txt for details.
 */
#ifndef CREATEINSTALLERDIALOG_H
#define CREATEINSTALLERDIALOG_H

#include <QDialog>
#include <QMainWindow>
#include <QLineEdit>
#include <QProcess>
#include <QProgressDialog>
#include <QDir>
/**
 * @file createinstallerdialog.h
 * @brief The dialog to select the input and create an installer.
 */

class QListWidget;
class QTemporaryDir;

/** @brief The dialog to select the input and create an installer. */
class CreateInstallerDialog : public QDialog
{
    Q_OBJECT
public:
    /** @brief Create a dialog showing settings for the create installer
     * process
     * */
    CreateInstallerDialog(QMainWindow *parent);

private:
    void setupGUI();

    QLineEdit *mCertFile;
    QLineEdit *mBinaryFolder;
    QLineEdit *mSaveFile;

    QProcess mNSISProc;
    QProgressDialog mProgress;
    QString mInstallerPath;
    QTemporaryDir *mCurrentWorkingDir;

    /** @brief show an error message with QMessageBox
     *
     * @param [in] msg The message to show
     */
    void showErrorMessage(const QString &msg);

private slots:
    void openCertificateSelect();
    void openFolderSelect();
    void openSaveLocation();

    /**@brief entry point for installer creation
     *
     * check the selected parameters (certificate / folder etc.) and
     * create the nsis installer. This also creates the signatures. */
    void createInstaller();

    /**@brief Create tempoary dir with signed binaries from sourcedir
     *
     * Copies all files from the sourceDir to a temporary directory
     * and signs all .exe files in that directory.
     *
     * The caller needs to delete the temporary directory. If an error
     * occurs NULL is returned.
     *
     * @param[in] sourceDir the directory with the binaries to sign
     * @returns a pointer to a temporary dir containing the signed binaries
     * or NULL.
     */
    QTemporaryDir *codesignBinaries(const QDir& sourceDir);

    /**@brief Sign a file with the codesigning certificate from mCertFile
     *
     * Calls osslsigncode to sign the file pointed to in filePath.
     * The signing operation is logged.
     *
     * Sign information (hash algo / publisher / url) can be set at
     * build time or in the settings with the variables:
     *
     * sign_hash # the hash algorithm to use. Values are the same as in singtool
     * sign_publisher # the publisher information
     * sign_url # the product url to use in the signature
     *
     * @param[in] filePath the absolute path to the file.
     * @returns true on success, false on error
     */
    bool signFile(QString filePath);

    /* Slots for the creator process */
    void processError(QProcess::ProcessError error);
    void processFinished(int exitCode, QProcess::ExitStatus exitStatus);

public slots:
    /**@brief Append a base64 encoded sha256 RSA signature to a file.
     *
     * The format of the added signature line will be:<BR>
     * S:\<signature\>\\r\\n<BR>
     * For the signature the key in mCertFile is used.
     *
     * @param[in] input The absolute path of the file to sign
     * @param[out] output The absolute path of the file to write
     *
     * @returns true on success, false on failure
     */
    bool appendTextSignatureToFile(const QString& input, const QString& output);
};

/** @brief The dialog shown after the installer was created. */
class FinishedDialog : public QDialog
{
    Q_OBJECT

    public:
        /** @brief constructor for the dialog
         *
         * @param [in] parent the parent window
         * @param [in] msg the message to show
         * @param [in] details verbose information
         * @param [in] isErr if the dialog should be shown as an error*/
        FinishedDialog(QDialog *parent,
                       QString msg,
                       QString details,
                       bool isErr);

};


#endif // CREATEINSTALLERDIALOG_H

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