From 52de31ac79787450888f3c7886b8241f746db5da Mon Sep 17 00:00:00 2001 From: Chocobo1 Date: Mon, 28 Jan 2019 15:36:19 +0800 Subject: [PATCH] Add migration code for WebUI https related change --- src/app/CMakeLists.txt | 1 + src/app/app.pri | 9 ++--- src/app/upgrade.cpp | 84 ++++++++++++++++++++++++++++++++++++++++++ src/app/upgrade.h | 7 +--- 4 files changed, 90 insertions(+), 11 deletions(-) create mode 100644 src/app/upgrade.cpp diff --git a/src/app/CMakeLists.txt b/src/app/CMakeLists.txt index 4079dfe93..45dc52ae4 100644 --- a/src/app/CMakeLists.txt +++ b/src/app/CMakeLists.txt @@ -7,6 +7,7 @@ application.cpp cmdoptions.cpp filelogger.cpp main.cpp +upgrade.cpp ) target_include_directories(qBittorrent PRIVATE ${CMAKE_CURRENT_BINARY_DIR}) diff --git a/src/app/app.pri b/src/app/app.pri index bd9b03d45..7473ef625 100644 --- a/src/app/app.pri +++ b/src/app/app.pri @@ -17,13 +17,15 @@ usesystemqtsingleapplication { HEADERS += \ $$PWD/application.h \ $$PWD/cmdoptions.h \ - $$PWD/filelogger.h + $$PWD/filelogger.h \ + $$PWD/upgrade.h SOURCES += \ $$PWD/application.cpp \ $$PWD/cmdoptions.cpp \ $$PWD/filelogger.cpp \ - $$PWD/main.cpp + $$PWD/main.cpp \ + $$PWD/upgrade.cpp stacktrace { unix { @@ -37,6 +39,3 @@ stacktrace { } } } - -# upgrade code -HEADERS += $$PWD/upgrade.h diff --git a/src/app/upgrade.cpp b/src/app/upgrade.cpp new file mode 100644 index 000000000..99bcde1a0 --- /dev/null +++ b/src/app/upgrade.cpp @@ -0,0 +1,84 @@ +/* + * Bittorrent Client using Qt and libtorrent. + * Copyright (C) 2019 Mike Tzou (Chocobo1) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * In addition, as a special exception, the copyright holders give permission to + * link this program with the OpenSSL project's "OpenSSL" library (or with + * modified versions of it that use the same license as the "OpenSSL" library), + * and distribute the linked executables. You must obey the GNU General Public + * License in all respects for all of the code used other than "OpenSSL". If you + * modify file(s), you may extend this exception to your version of the file(s), + * but you are not obligated to do so. If you do not wish to do so, delete this + * exception statement from your version. + */ + +#include "upgrade.h" + +#include + +#include "base/logger.h" +#include "base/profile.h" +#include "base/settingsstorage.h" +#include "base/utils/fs.h" + +namespace +{ + void exportWebUIHttpsFiles() + { + const auto migrate = [](const QString &oldKey, const QString &newKey, const QString &savePath) { + SettingsStorage *settingsStorage {SettingsStorage::instance()}; + const QByteArray oldData {settingsStorage->loadValue(oldKey).toByteArray()}; + const QString newData {settingsStorage->loadValue(newKey).toString()}; + const QString errorMsgFormat {QObject::tr("Migrate preferences failed: WebUI https, file: \"%1\", error: \"%2\"")}; + + if (!newData.isEmpty() || oldData.isEmpty()) + return; + + QFile file(savePath); + if (!file.open(QIODevice::WriteOnly)) { + LogMsg(errorMsgFormat.arg(savePath, file.errorString()) , Log::WARNING); + return; + } + if (file.write(oldData) != oldData.size()) { + file.close(); + Utils::Fs::forceRemove(savePath); + LogMsg(errorMsgFormat.arg(savePath, QLatin1String("Write incomplete.")) , Log::WARNING); + return; + } + + settingsStorage->storeValue(newKey, savePath); + settingsStorage->removeValue(oldKey); + + LogMsg(QObject::tr("Migrated preferences: WebUI https, exported data to file: \"%1\"").arg(savePath) + , Log::INFO); + }; + + const QString configPath {specialFolderLocation(SpecialFolder::Config)}; + migrate(QLatin1String("Preferences/WebUI/HTTPS/Certificate") + , QLatin1String("Preferences/WebUI/HTTPS/CertificatePath") + , Utils::Fs::toNativePath(configPath + QLatin1String("WebUICertificate.crt"))); + migrate(QLatin1String("Preferences/WebUI/HTTPS/Key") + , QLatin1String("Preferences/WebUI/HTTPS/KeyPath") + , Utils::Fs::toNativePath(configPath + QLatin1String("WebUIPrivateKey.pem"))); + } +} + +bool upgrade(const bool /*ask*/) +{ + exportWebUIHttpsFiles(); + return true; +} diff --git a/src/app/upgrade.h b/src/app/upgrade.h index 570bb2651..28c336fd2 100644 --- a/src/app/upgrade.h +++ b/src/app/upgrade.h @@ -28,9 +28,4 @@ #pragma once -bool upgrade(bool /*ask*/ = true) -{ - // Intentionally left no-op as a placeholder for future use - - return true; -} +bool upgrade(bool ask = true);