diff options
Diffstat (limited to 'src/libs')
-rw-r--r-- | src/libs/installer/applyproductkeyoperation.cpp | 66 | ||||
-rw-r--r-- | src/libs/installer/applyproductkeyoperation.h | 51 | ||||
-rw-r--r-- | src/libs/installer/component.cpp | 6 | ||||
-rw-r--r-- | src/libs/installer/init.cpp | 2 | ||||
-rw-r--r-- | src/libs/installer/installer.pro | 19 | ||||
-rw-r--r-- | src/libs/installer/packagemanagercore.cpp | 7 | ||||
-rw-r--r-- | src/libs/installer/packagemanagercore_p.cpp | 14 | ||||
-rw-r--r-- | src/libs/installer/productkeycheck.cpp | 80 | ||||
-rw-r--r-- | src/libs/installer/productkeycheck.h | 62 |
9 files changed, 304 insertions, 3 deletions
diff --git a/src/libs/installer/applyproductkeyoperation.cpp b/src/libs/installer/applyproductkeyoperation.cpp new file mode 100644 index 000000000..4556df743 --- /dev/null +++ b/src/libs/installer/applyproductkeyoperation.cpp @@ -0,0 +1,66 @@ +/************************************************************************** +** +** Copyright (c) 2012 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal +** +** This file is part of Installer Framework +** +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. For licensing terms and +** conditions see http://qt.digia.com/licensing. For further information +** use the contact form at http://qt.digia.com/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Digia gives you certain additional +** rights. These rights are described in the Digia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +**************************************************************************/ + +#include "applyproductkeyoperation.h" +#include "productkeycheck.h" + +using namespace QInstaller; + +ApplyProductKeyOperation::ApplyProductKeyOperation() +{ + setName(QLatin1String("ApplyProductKey")); +} + +void ApplyProductKeyOperation::backup() +{ +} + +bool ApplyProductKeyOperation::performOperation() +{ + if (!ProductKeyCheck::instance()->applyKey(arguments())) { + setError(UserDefinedError); + setErrorString(ProductKeyCheck::instance()->lastErrorString()); + } + return true; +} + +bool ApplyProductKeyOperation::undoOperation() +{ + return true; +} + +bool ApplyProductKeyOperation::testOperation() +{ + return true; +} + +Operation *ApplyProductKeyOperation::clone() const +{ + return new ApplyProductKeyOperation(); +} diff --git a/src/libs/installer/applyproductkeyoperation.h b/src/libs/installer/applyproductkeyoperation.h new file mode 100644 index 000000000..9761492a1 --- /dev/null +++ b/src/libs/installer/applyproductkeyoperation.h @@ -0,0 +1,51 @@ +/************************************************************************** +** +** Copyright (c) 2012 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal +** +** This file is part of Installer Framework +** +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. For licensing terms and +** conditions see http://qt.digia.com/licensing. For further information +** use the contact form at http://qt.digia.com/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Digia gives you certain additional +** rights. These rights are described in the Digia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +**************************************************************************/ + +#ifndef APPLYPRODUCTKEYOPERATION_H +#define APPLYPRODUCTKEYOPERATION_H + +#include "qinstallerglobal.h" + +namespace QInstaller { + +class INSTALLER_EXPORT ApplyProductKeyOperation : public Operation +{ +public: + ApplyProductKeyOperation(); + + void backup(); + bool performOperation(); + bool undoOperation(); + bool testOperation(); + Operation *clone() const; +}; + +} // namespace + +#endif // APPLYPRODUCTKEYOPERATION_H diff --git a/src/libs/installer/component.cpp b/src/libs/installer/component.cpp index 064e74cb5..fb554155f 100644 --- a/src/libs/installer/component.cpp +++ b/src/libs/installer/component.cpp @@ -50,6 +50,8 @@ #include <kdupdaterupdatesourcesinfo.h> #include <kdupdaterupdateoperationfactory.h> +#include <productkeycheck.h> + #include <QtCore/QDirIterator> #include <QtCore/QTranslator> @@ -497,6 +499,10 @@ void Component::loadLicenses(const QString &directory, const QHash<QString, QVar QHash<QString, QVariant>::const_iterator it; for (it = licenseHash.begin(); it != licenseHash.end(); ++it) { const QString &fileName = it.value().toString(); + + if (!ProductKeyCheck::instance()->isValidLicense(fileName)) + continue; + QFileInfo fileInfo(fileName); QFile file(QString::fromLatin1("%1%2_%3.%4").arg(directory, fileInfo.baseName(), QLocale().name().toLower(), fileInfo.completeSuffix())); diff --git a/src/libs/installer/init.cpp b/src/libs/installer/init.cpp index a49f74690..579446ebf 100644 --- a/src/libs/installer/init.cpp +++ b/src/libs/installer/init.cpp @@ -58,6 +58,7 @@ #include "linereplaceoperation.h" #include "minimumprogressoperation.h" #include "licenseoperation.h" +#include "applyproductkeyoperation.h" // QtSDK specific #include "qtpatchoperation.h" @@ -240,6 +241,7 @@ void QInstaller::init() factory.registerUpdateOperation<LineReplaceOperation>(QLatin1String("LineReplace")); factory.registerUpdateOperation<MinimumProgressOperation>(QLatin1String("MinimumProgress")); factory.registerUpdateOperation<LicenseOperation>(QLatin1String("License")); + factory.registerUpdateOperation<ApplyProductKeyOperation>(QLatin1String("ApplyProductKey")); // QtSDK specific factory.registerUpdateOperation<RegisterQtInCreatorQNXOperation>(QLatin1String("RegisterQtInCreatorQNX")); diff --git a/src/libs/installer/installer.pro b/src/libs/installer/installer.pro index 17dd3bfdc..3b0b10813 100644 --- a/src/libs/installer/installer.pro +++ b/src/libs/installer/installer.pro @@ -6,6 +6,19 @@ include(../7zip/7zip.pri) include(../kdtools/kdtools.pri) include(../../../installerfw.pri) +# productkeycheck API +# call qmake "PRODUCTKEYCHECK_PRI_FILE=<your_path_to_pri_file>" +# content of that pri file needs to be: +# SOURCES += $$PWD/productkeycheck.cpp +# ... +# your files if needed +HEADERS += productkeycheck.h +!isEmpty(PRODUCTKEYCHECK_PRI_FILE) { + include($$PRODUCTKEYCHECK_PRI_FILE) +} else { + SOURCES += productkeycheck.cpp +} + DESTDIR = $$IFW_LIB_PATH DLLDESTDIR = $$IFW_APP_PATH @@ -85,7 +98,8 @@ HEADERS += packagemanagercore.h \ link.h \ createlinkoperation.h \ packagemanagercoredata.h \ - registerqtincreatorqnxoperation.h + registerqtincreatorqnxoperation.h \ + applyproductkeyoperation.h SOURCES += packagemanagercore.cpp \ packagemanagercore_p.cpp \ @@ -153,7 +167,8 @@ HEADERS += packagemanagercore.h \ link.cpp \ createlinkoperation.cpp \ packagemanagercoredata.cpp \ - registerqtincreatorqnxoperation.cpp + registerqtincreatorqnxoperation.cpp \ + applyproductkeyoperation.cpp RESOURCES += resources/patch_file_lists.qrc \ resources/installer.qrc diff --git a/src/libs/installer/packagemanagercore.cpp b/src/libs/installer/packagemanagercore.cpp index 1829be95e..63f4eb45a 100644 --- a/src/libs/installer/packagemanagercore.cpp +++ b/src/libs/installer/packagemanagercore.cpp @@ -57,6 +57,8 @@ #include "settings.h" #include "utils.h" +#include <productkeycheck.h> + #include <QFuture> #include <QFutureWatcher> #include <QtConcurrentRun> @@ -697,6 +699,11 @@ bool PackageManagerCore::fetchRemotePackagesTree() return false; } + if (!ProductKeyCheck::instance()->hasValidKey()) { + d->setStatus(Failure, ProductKeyCheck::instance()->lastErrorString()); + return false; + } + const LocalPackagesHash installedPackages = d->localInstalledPackages(); if (!isInstaller() && status() == Failure) return false; diff --git a/src/libs/installer/packagemanagercore_p.cpp b/src/libs/installer/packagemanagercore_p.cpp index 5bcbb5418..35603eab3 100644 --- a/src/libs/installer/packagemanagercore_p.cpp +++ b/src/libs/installer/packagemanagercore_p.cpp @@ -60,7 +60,9 @@ #include "kdupdaterupdateoperationfactory.h" #include "kdupdaterupdatefinder.h" -#include <QtConcurrentRun> +#include <productkeycheck.h> + +#include <QtCore/QtConcurrentRun> #include <QtCore/QCoreApplication> #include <QtCore/QDir> #include <QtCore/QDirIterator> @@ -555,6 +557,16 @@ QString PackageManagerCorePrivate::installReason(Component *component) void PackageManagerCorePrivate::initialize(const QHash<QString, QString> ¶ms) { + if (!ProductKeyCheck::instance()->hasValidKey()) { + if (m_core->isInstaller()) { + setStatus(PackageManagerCore::Failure, ProductKeyCheck::instance()->lastErrorString()); + } else { + MessageBoxHandler::warning(MessageBoxHandler::currentBestSuitParent(), + QLatin1String("ProductKeyCheckError"), ProductKeyCheck::instance()->lastErrorString(), + ProductKeyCheck::instance()->maintainanceToolDetailErrorNotice(), QMessageBox::Ok); + } + } + m_coreCheckedHash.clear(); m_data = PackageManagerCoreData(params); m_componentsToInstallCalculated = false; diff --git a/src/libs/installer/productkeycheck.cpp b/src/libs/installer/productkeycheck.cpp new file mode 100644 index 000000000..f975db821 --- /dev/null +++ b/src/libs/installer/productkeycheck.cpp @@ -0,0 +1,80 @@ +/************************************************************************** +** +** Copyright (c) 2012 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal +** +** This file is part of Installer Framework +** +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. For licensing terms and +** conditions see http://qt.digia.com/licensing. For further information +** use the contact form at http://qt.digia.com/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Digia gives you certain additional +** rights. These rights are described in the Digia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +**************************************************************************/ + +#include <productkeycheck.h> + + +class ProductKeyCheckPrivate +{ +}; + + +ProductKeyCheck::ProductKeyCheck() + : d(new ProductKeyCheckPrivate()) +{ +} + +ProductKeyCheck::~ProductKeyCheck() +{ + delete d; +} + +ProductKeyCheck *ProductKeyCheck::instance() +{ + static ProductKeyCheck *instance = 0; + if (instance == 0) + instance = new ProductKeyCheck(); + return instance; +} + +bool ProductKeyCheck::hasValidKey() +{ + return true; +} + +bool ProductKeyCheck::applyKey(const QStringList &/*arguments*/) +{ + return true; +} + +QString ProductKeyCheck::lastErrorString() +{ + return QString(); +} + +QString ProductKeyCheck::maintainanceToolDetailErrorNotice() +{ + return QString(); +} + +// to filter none valid licenses +bool ProductKeyCheck::isValidLicense(const QString &/*fileName*/) +{ + return true; +} diff --git a/src/libs/installer/productkeycheck.h b/src/libs/installer/productkeycheck.h new file mode 100644 index 000000000..1ecffc3d2 --- /dev/null +++ b/src/libs/installer/productkeycheck.h @@ -0,0 +1,62 @@ +/************************************************************************** +** +** Copyright (c) 2012 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal +** +** This file is part of Installer Framework +** +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. For licensing terms and +** conditions see http://qt.digia.com/licensing. For further information +** use the contact form at http://qt.digia.com/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Digia gives you certain additional +** rights. These rights are described in the Digia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +**************************************************************************/ + +#ifndef PRODUCTKEYCHECK_H +#define PRODUCTKEYCHECK_H + +#include "qinstallerglobal.h" + +#include <QString> +#include <QHash> + +class ProductKeyCheckPrivate; + +class INSTALLER_EXPORT ProductKeyCheck +{ +public: + ~ProductKeyCheck(); + static ProductKeyCheck *instance(); + + // was validLicense + bool hasValidKey(); + QString lastErrorString(); + QString maintainanceToolDetailErrorNotice(); + + //is used in the generic ApplyProductKeyOperation, for example to patch things + bool applyKey(const QStringList &arguments); + + // to filter none valid licenses + bool isValidLicense(const QString &fileName); + +private: + ProductKeyCheck(); + ProductKeyCheckPrivate *const d; +}; + +#endif // PRODUCTKEYCHECK_H |