mirror of
https://github.com/HifiExperiments/overte.git
synced 2025-08-09 23:16:50 +02:00
Merge pull request #11723 from Atlante45/fix/ds-config-version
Move DS config version to config file
This commit is contained in:
commit
9a0a74c9b9
5 changed files with 43 additions and 93 deletions
|
@ -29,6 +29,7 @@
|
||||||
#include <NLPacketList.h>
|
#include <NLPacketList.h>
|
||||||
#include <NumericalConstants.h>
|
#include <NumericalConstants.h>
|
||||||
#include <SettingHandle.h>
|
#include <SettingHandle.h>
|
||||||
|
#include <SettingHelpers.h>
|
||||||
#include <AvatarData.h> //for KillAvatarReason
|
#include <AvatarData.h> //for KillAvatarReason
|
||||||
#include <FingerprintUtils.h>
|
#include <FingerprintUtils.h>
|
||||||
#include "DomainServerNodeData.h"
|
#include "DomainServerNodeData.h"
|
||||||
|
@ -43,12 +44,7 @@ const QString DESCRIPTION_COLUMNS_KEY = "columns";
|
||||||
|
|
||||||
const QString SETTINGS_VIEWPOINT_KEY = "viewpoint";
|
const QString SETTINGS_VIEWPOINT_KEY = "viewpoint";
|
||||||
|
|
||||||
static Setting::Handle<double> JSON_SETTING_VERSION("json-settings/version", 0.0);
|
DomainServerSettingsManager::DomainServerSettingsManager() {
|
||||||
|
|
||||||
DomainServerSettingsManager::DomainServerSettingsManager() :
|
|
||||||
_descriptionArray(),
|
|
||||||
_configMap()
|
|
||||||
{
|
|
||||||
// load the description object from the settings description
|
// load the description object from the settings description
|
||||||
QFile descriptionFile(QCoreApplication::applicationDirPath() + SETTINGS_DESCRIPTION_RELATIVE_PATH);
|
QFile descriptionFile(QCoreApplication::applicationDirPath() + SETTINGS_DESCRIPTION_RELATIVE_PATH);
|
||||||
descriptionFile.open(QIODevice::ReadOnly);
|
descriptionFile.open(QIODevice::ReadOnly);
|
||||||
|
@ -100,12 +96,34 @@ void DomainServerSettingsManager::processSettingsRequestPacket(QSharedPointer<Re
|
||||||
void DomainServerSettingsManager::setupConfigMap(const QStringList& argumentList) {
|
void DomainServerSettingsManager::setupConfigMap(const QStringList& argumentList) {
|
||||||
_argumentList = argumentList;
|
_argumentList = argumentList;
|
||||||
|
|
||||||
// after 1.7 we no longer use the master or merged configs - this is kept in place for migration
|
_configMap.loadConfig(_argumentList);
|
||||||
_configMap.loadMasterAndUserConfig(_argumentList);
|
|
||||||
|
static const auto VERSION_SETTINGS_KEYPATH = "version";
|
||||||
|
QVariant* versionVariant = _configMap.valueForKeyPath(VERSION_SETTINGS_KEYPATH);
|
||||||
|
|
||||||
|
if (!versionVariant) {
|
||||||
|
versionVariant = _configMap.valueForKeyPath(VERSION_SETTINGS_KEYPATH, true);
|
||||||
|
*versionVariant = _descriptionVersion;
|
||||||
|
persistToFile();
|
||||||
|
qDebug() << "No version in config file, setting to current version" << _descriptionVersion;
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
// Backward compatibility migration code
|
||||||
|
// The config version used to be stored in a different file
|
||||||
|
// This moves it to the actual config file.
|
||||||
|
Setting::Handle<double> JSON_SETTING_VERSION("json-settings/version", 0.0);
|
||||||
|
if (JSON_SETTING_VERSION.isSet()) {
|
||||||
|
auto version = JSON_SETTING_VERSION.get();
|
||||||
|
*versionVariant = version;
|
||||||
|
persistToFile();
|
||||||
|
QFile::remove(settingsFilename());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// What settings version were we before and what are we using now?
|
// What settings version were we before and what are we using now?
|
||||||
// Do we need to do any re-mapping?
|
// Do we need to do any re-mapping?
|
||||||
double oldVersion = JSON_SETTING_VERSION.get();
|
double oldVersion = versionVariant->toDouble();
|
||||||
|
|
||||||
if (oldVersion != _descriptionVersion) {
|
if (oldVersion != _descriptionVersion) {
|
||||||
const QString ALLOWED_USERS_SETTINGS_KEYPATH = "security.allowed_users";
|
const QString ALLOWED_USERS_SETTINGS_KEYPATH = "security.allowed_users";
|
||||||
|
@ -137,12 +155,6 @@ void DomainServerSettingsManager::setupConfigMap(const QStringList& argumentList
|
||||||
QVariant* restrictedAccess = _configMap.valueForKeyPath(RESTRICTED_ACCESS_SETTINGS_KEYPATH, true);
|
QVariant* restrictedAccess = _configMap.valueForKeyPath(RESTRICTED_ACCESS_SETTINGS_KEYPATH, true);
|
||||||
|
|
||||||
*restrictedAccess = QVariant(true);
|
*restrictedAccess = QVariant(true);
|
||||||
|
|
||||||
// write the new settings to the json file
|
|
||||||
persistToFile();
|
|
||||||
|
|
||||||
// reload the master and user config so that the merged config is right
|
|
||||||
_configMap.loadMasterAndUserConfig(_argumentList);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -172,12 +184,6 @@ void DomainServerSettingsManager::setupConfigMap(const QStringList& argumentList
|
||||||
|
|
||||||
*entityServerVariant = entityServerMap;
|
*entityServerVariant = entityServerMap;
|
||||||
}
|
}
|
||||||
|
|
||||||
// write the new settings to the json file
|
|
||||||
persistToFile();
|
|
||||||
|
|
||||||
// reload the master and user config so that the merged config is right
|
|
||||||
_configMap.loadMasterAndUserConfig(_argumentList);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -195,12 +201,6 @@ void DomainServerSettingsManager::setupConfigMap(const QStringList& argumentList
|
||||||
qDebug() << "Migrating plaintext password to SHA256 hash in domain-server settings.";
|
qDebug() << "Migrating plaintext password to SHA256 hash in domain-server settings.";
|
||||||
|
|
||||||
*passwordVariant = QCryptographicHash::hash(plaintextPassword.toUtf8(), QCryptographicHash::Sha256).toHex();
|
*passwordVariant = QCryptographicHash::hash(plaintextPassword.toUtf8(), QCryptographicHash::Sha256).toHex();
|
||||||
|
|
||||||
// write the new settings to file
|
|
||||||
persistToFile();
|
|
||||||
|
|
||||||
// reload the master and user config so the merged config is correct
|
|
||||||
_configMap.loadMasterAndUserConfig(_argumentList);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -283,19 +283,6 @@ void DomainServerSettingsManager::setupConfigMap(const QStringList& argumentList
|
||||||
packPermissions();
|
packPermissions();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (oldVersion < 1.7) {
|
|
||||||
// This was prior to the removal of the master config file
|
|
||||||
// So we write the merged config to the user config file, and stop reading from the user config file
|
|
||||||
|
|
||||||
qDebug() << "Migrating merged config to user config file. The master config file is deprecated.";
|
|
||||||
|
|
||||||
// replace the user config by the merged config
|
|
||||||
_configMap.getConfig() = _configMap.getMergedConfig();
|
|
||||||
|
|
||||||
// persist the new config so the user config file has the correctly merged config
|
|
||||||
persistToFile();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (oldVersion < 1.8) {
|
if (oldVersion < 1.8) {
|
||||||
unpackPermissions();
|
unpackPermissions();
|
||||||
// This was prior to addition of domain content replacement, add that to localhost permissions by default
|
// This was prior to addition of domain content replacement, add that to localhost permissions by default
|
||||||
|
@ -316,16 +303,16 @@ void DomainServerSettingsManager::setupConfigMap(const QStringList& argumentList
|
||||||
QVariant* wizardCompletedOnce = _configMap.valueForKeyPath(WIZARD_COMPLETED_ONCE, true);
|
QVariant* wizardCompletedOnce = _configMap.valueForKeyPath(WIZARD_COMPLETED_ONCE, true);
|
||||||
|
|
||||||
*wizardCompletedOnce = QVariant(true);
|
*wizardCompletedOnce = QVariant(true);
|
||||||
|
|
||||||
// write the new settings to the json file
|
|
||||||
persistToFile();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// write the current description version to our settings
|
||||||
|
*versionVariant = _descriptionVersion;
|
||||||
|
|
||||||
|
// write the new settings to the json file
|
||||||
|
persistToFile();
|
||||||
}
|
}
|
||||||
|
|
||||||
unpackPermissions();
|
unpackPermissions();
|
||||||
|
|
||||||
// write the current description version to our settings
|
|
||||||
JSON_SETTING_VERSION.set(_descriptionVersion);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
QVariantMap& DomainServerSettingsManager::getDescriptorsMap() {
|
QVariantMap& DomainServerSettingsManager::getDescriptorsMap() {
|
||||||
|
@ -1289,9 +1276,6 @@ bool DomainServerSettingsManager::recurseJSONObjectAndOverwriteSettings(const QJ
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// re-merge the user and master configs after a settings change
|
|
||||||
_configMap.mergeMasterAndUserConfigs();
|
|
||||||
|
|
||||||
return needRestart;
|
return needRestart;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -91,32 +91,6 @@ QVariantMap HifiConfigVariantMap::mergeCLParametersWithJSONConfig(const QStringL
|
||||||
return mergedMap;
|
return mergedMap;
|
||||||
}
|
}
|
||||||
|
|
||||||
HifiConfigVariantMap::HifiConfigVariantMap() :
|
|
||||||
_userConfigFilename(),
|
|
||||||
_masterConfig(),
|
|
||||||
_userConfig(),
|
|
||||||
_mergedConfig()
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
void HifiConfigVariantMap::loadMasterAndUserConfig(const QStringList& argumentList) {
|
|
||||||
// check if there is a master config file
|
|
||||||
const QString MASTER_CONFIG_FILE_OPTION = "--master-config";
|
|
||||||
|
|
||||||
int masterConfigIndex = argumentList.indexOf(MASTER_CONFIG_FILE_OPTION);
|
|
||||||
if (masterConfigIndex != -1) {
|
|
||||||
QString masterConfigFilepath = argumentList[masterConfigIndex + 1];
|
|
||||||
|
|
||||||
loadMapFromJSONFile(_masterConfig, masterConfigFilepath);
|
|
||||||
}
|
|
||||||
|
|
||||||
// load the user config - that method replace loadMasterAndUserConfig after the 1.7 migration
|
|
||||||
loadConfig(argumentList);
|
|
||||||
|
|
||||||
mergeMasterAndUserConfigs();
|
|
||||||
}
|
|
||||||
|
|
||||||
void HifiConfigVariantMap::loadConfig(const QStringList& argumentList) {
|
void HifiConfigVariantMap::loadConfig(const QStringList& argumentList) {
|
||||||
// load the user config
|
// load the user config
|
||||||
const QString USER_CONFIG_FILE_OPTION = "--user-config";
|
const QString USER_CONFIG_FILE_OPTION = "--user-config";
|
||||||
|
@ -172,14 +146,6 @@ void HifiConfigVariantMap::loadConfig(const QStringList& argumentList) {
|
||||||
loadMapFromJSONFile(_userConfig, _userConfigFilename);
|
loadMapFromJSONFile(_userConfig, _userConfigFilename);
|
||||||
}
|
}
|
||||||
|
|
||||||
void HifiConfigVariantMap::mergeMasterAndUserConfigs() {
|
|
||||||
// the merged config is initially matched to the master config
|
|
||||||
_mergedConfig = _masterConfig;
|
|
||||||
|
|
||||||
// then we merge in anything missing from the user config
|
|
||||||
addMissingValuesToExistingMap(_mergedConfig, _userConfig);
|
|
||||||
}
|
|
||||||
|
|
||||||
void HifiConfigVariantMap::loadMapFromJSONFile(QVariantMap& existingMap, const QString& filename) {
|
void HifiConfigVariantMap::loadMapFromJSONFile(QVariantMap& existingMap, const QString& filename) {
|
||||||
QFile configFile(filename);
|
QFile configFile(filename);
|
||||||
|
|
||||||
|
|
|
@ -21,26 +21,19 @@ class HifiConfigVariantMap {
|
||||||
public:
|
public:
|
||||||
static QVariantMap mergeCLParametersWithJSONConfig(const QStringList& argumentList);
|
static QVariantMap mergeCLParametersWithJSONConfig(const QStringList& argumentList);
|
||||||
|
|
||||||
HifiConfigVariantMap();
|
|
||||||
void loadMasterAndUserConfig(const QStringList& argumentList);
|
|
||||||
void loadConfig(const QStringList& argumentList);
|
void loadConfig(const QStringList& argumentList);
|
||||||
|
|
||||||
const QVariant value(const QString& key) const { return _userConfig.value(key); }
|
const QVariant value(const QString& key) const { return _userConfig.value(key); }
|
||||||
QVariant* valueForKeyPath(const QString& keyPath, bool shouldCreateIfMissing = false)
|
QVariant* valueForKeyPath(const QString& keyPath, bool shouldCreateIfMissing = false)
|
||||||
{ return ::valueForKeyPath(_userConfig, keyPath, shouldCreateIfMissing); }
|
{ return ::valueForKeyPath(_userConfig, keyPath, shouldCreateIfMissing); }
|
||||||
|
|
||||||
QVariantMap& getMergedConfig() { return _mergedConfig; }
|
|
||||||
QVariantMap& getConfig() { return _userConfig; }
|
QVariantMap& getConfig() { return _userConfig; }
|
||||||
|
|
||||||
void mergeMasterAndUserConfigs();
|
|
||||||
|
|
||||||
const QString& getUserConfigFilename() const { return _userConfigFilename; }
|
const QString& getUserConfigFilename() const { return _userConfigFilename; }
|
||||||
private:
|
private:
|
||||||
QString _userConfigFilename;
|
QString _userConfigFilename;
|
||||||
|
|
||||||
QVariantMap _masterConfig;
|
|
||||||
QVariantMap _userConfig;
|
QVariantMap _userConfig;
|
||||||
QVariantMap _mergedConfig;
|
|
||||||
|
|
||||||
void loadMapFromJSONFile(QVariantMap& existingMap, const QString& filename);
|
void loadMapFromJSONFile(QVariantMap& existingMap, const QString& filename);
|
||||||
void addMissingValuesToExistingMap(QVariantMap& existingMap, const QVariantMap& newMap);
|
void addMissingValuesToExistingMap(QVariantMap& existingMap, const QVariantMap& newMap);
|
||||||
|
|
|
@ -23,9 +23,15 @@
|
||||||
|
|
||||||
#include "SharedLogging.h"
|
#include "SharedLogging.h"
|
||||||
|
|
||||||
|
const QSettings::Format JSON_FORMAT = QSettings::registerFormat("json", readJSONFile, writeJSONFile);
|
||||||
|
|
||||||
QSettings::SettingsMap jsonDocumentToVariantMap(const QJsonDocument& document);
|
QSettings::SettingsMap jsonDocumentToVariantMap(const QJsonDocument& document);
|
||||||
QJsonDocument variantMapToJsonDocument(const QSettings::SettingsMap& map);
|
QJsonDocument variantMapToJsonDocument(const QSettings::SettingsMap& map);
|
||||||
|
|
||||||
|
QString settingsFilename() {
|
||||||
|
return QSettings().fileName();
|
||||||
|
}
|
||||||
|
|
||||||
bool readJSONFile(QIODevice& device, QSettings::SettingsMap& map) {
|
bool readJSONFile(QIODevice& device, QSettings::SettingsMap& map) {
|
||||||
QJsonParseError jsonParseError;
|
QJsonParseError jsonParseError;
|
||||||
|
|
||||||
|
|
|
@ -14,12 +14,13 @@
|
||||||
|
|
||||||
#include <QSettings>
|
#include <QSettings>
|
||||||
|
|
||||||
|
extern const QSettings::Format JSON_FORMAT;
|
||||||
|
|
||||||
|
QString settingsFilename();
|
||||||
|
|
||||||
bool readJSONFile(QIODevice& device, QSettings::SettingsMap& map);
|
bool readJSONFile(QIODevice& device, QSettings::SettingsMap& map);
|
||||||
bool writeJSONFile(QIODevice& device, const QSettings::SettingsMap& map);
|
bool writeJSONFile(QIODevice& device, const QSettings::SettingsMap& map);
|
||||||
|
|
||||||
static const auto JSON_FORMAT = QSettings::registerFormat("json", readJSONFile, writeJSONFile);
|
|
||||||
|
|
||||||
void loadOldINIFile(QSettings& settings);
|
void loadOldINIFile(QSettings& settings);
|
||||||
|
|
||||||
|
|
||||||
#endif // hifi_SettingHelpers_h
|
#endif // hifi_SettingHelpers_h
|
||||||
|
|
Loading…
Reference in a new issue