2011-12-25 13:17:40 -05:00
|
|
|
/*
|
|
|
|
* Copyright (C) 2011 Felix Geyer <debfx@fobos.de>
|
|
|
|
*
|
|
|
|
* 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 or (at your option)
|
|
|
|
* version 3 of the License.
|
|
|
|
*
|
|
|
|
* 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, see <http://www.gnu.org/licenses/>.
|
|
|
|
*/
|
|
|
|
|
|
|
|
#include "Config.h"
|
|
|
|
|
2013-10-08 11:37:12 -04:00
|
|
|
#include <QCoreApplication>
|
2013-10-03 09:18:16 -04:00
|
|
|
#include <QDir>
|
|
|
|
#include <QSettings>
|
2015-07-22 11:19:48 -04:00
|
|
|
#include <QStandardPaths>
|
2013-10-03 09:18:16 -04:00
|
|
|
#include <QTemporaryFile>
|
2011-12-25 13:17:40 -05:00
|
|
|
|
2015-07-24 12:28:12 -04:00
|
|
|
Config* Config::m_instance(nullptr);
|
2012-05-31 08:51:44 -04:00
|
|
|
|
2012-05-27 14:05:57 -04:00
|
|
|
QVariant Config::get(const QString& key)
|
|
|
|
{
|
|
|
|
return m_settings->value(key, m_defaults.value(key));
|
|
|
|
}
|
|
|
|
|
2011-12-25 13:17:40 -05:00
|
|
|
QVariant Config::get(const QString& key, const QVariant& defaultValue)
|
|
|
|
{
|
|
|
|
return m_settings->value(key, defaultValue);
|
|
|
|
}
|
|
|
|
|
2017-03-06 17:12:07 -05:00
|
|
|
bool Config::hasAccessError()
|
|
|
|
{
|
|
|
|
return m_settings->status() & QSettings::AccessError;
|
|
|
|
}
|
|
|
|
|
|
|
|
QString Config::getFileName()
|
|
|
|
{
|
|
|
|
return m_settings->fileName();
|
|
|
|
}
|
|
|
|
|
2011-12-25 13:17:40 -05:00
|
|
|
void Config::set(const QString& key, const QVariant& value)
|
|
|
|
{
|
|
|
|
m_settings->setValue(key, value);
|
|
|
|
}
|
|
|
|
|
2012-06-14 16:55:25 -04:00
|
|
|
Config::Config(const QString& fileName, QObject* parent)
|
|
|
|
: QObject(parent)
|
|
|
|
{
|
|
|
|
init(fileName);
|
|
|
|
}
|
|
|
|
|
|
|
|
Config::Config(QObject* parent)
|
|
|
|
: QObject(parent)
|
2011-12-25 13:17:40 -05:00
|
|
|
{
|
|
|
|
QString userPath;
|
|
|
|
QString homePath = QDir::homePath();
|
|
|
|
|
2012-07-16 11:49:12 -04:00
|
|
|
#if defined(Q_OS_UNIX) && !defined(Q_OS_MAC)
|
2015-07-22 11:19:48 -04:00
|
|
|
// we can't use QStandardPaths on X11 as it uses XDG_DATA_HOME instead of XDG_CONFIG_HOME
|
2011-12-25 13:17:40 -05:00
|
|
|
QByteArray env = qgetenv("XDG_CONFIG_HOME");
|
|
|
|
if (env.isEmpty()) {
|
|
|
|
userPath = homePath;
|
|
|
|
userPath += "/.config";
|
|
|
|
}
|
|
|
|
else if (env[0] == '/') {
|
|
|
|
userPath = QFile::decodeName(env);
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
userPath = homePath;
|
|
|
|
userPath += '/';
|
|
|
|
userPath += QFile::decodeName(env);
|
|
|
|
}
|
|
|
|
|
2016-11-03 00:05:30 -04:00
|
|
|
userPath += "/keepassxc/";
|
2012-05-24 05:34:00 -04:00
|
|
|
#else
|
2015-09-12 12:41:48 -04:00
|
|
|
userPath = QDir::fromNativeSeparators(QStandardPaths::writableLocation(QStandardPaths::DataLocation));
|
2016-11-03 00:05:30 -04:00
|
|
|
// storageLocation() appends the application name ("/keepassxc") to the end
|
2014-04-30 22:26:39 -04:00
|
|
|
userPath += "/";
|
2011-12-25 13:17:40 -05:00
|
|
|
#endif
|
|
|
|
|
2017-02-18 07:49:55 -05:00
|
|
|
#ifdef QT_DEBUG
|
|
|
|
userPath += "keepassxc_debug.ini";
|
|
|
|
#else
|
2016-11-03 00:05:30 -04:00
|
|
|
userPath += "keepassxc.ini";
|
2017-02-18 07:49:55 -05:00
|
|
|
#endif
|
2011-12-25 13:17:40 -05:00
|
|
|
|
2012-06-14 16:55:25 -04:00
|
|
|
init(userPath);
|
|
|
|
}
|
|
|
|
|
|
|
|
Config::~Config()
|
|
|
|
{
|
|
|
|
}
|
|
|
|
|
|
|
|
void Config::init(const QString& fileName)
|
|
|
|
{
|
|
|
|
m_settings.reset(new QSettings(fileName, QSettings::IniFormat));
|
2012-05-27 14:05:57 -04:00
|
|
|
|
2012-05-27 17:01:14 -04:00
|
|
|
m_defaults.insert("RememberLastDatabases", true);
|
2015-03-14 23:06:53 -04:00
|
|
|
m_defaults.insert("RememberLastKeyFiles", true);
|
2013-03-24 18:21:59 -04:00
|
|
|
m_defaults.insert("OpenPreviousDatabasesOnStartup", true);
|
2012-06-10 10:28:46 -04:00
|
|
|
m_defaults.insert("AutoSaveAfterEveryChange", false);
|
2014-06-09 04:51:24 -04:00
|
|
|
m_defaults.insert("AutoReloadOnChange", true);
|
2012-06-10 15:54:58 -04:00
|
|
|
m_defaults.insert("AutoSaveOnExit", false);
|
2012-08-15 13:50:31 -04:00
|
|
|
m_defaults.insert("ShowToolbar", true);
|
2013-10-29 15:54:56 -04:00
|
|
|
m_defaults.insert("MinimizeOnCopy", false);
|
2014-04-14 17:31:56 -04:00
|
|
|
m_defaults.insert("UseGroupIconOnEntryCreation", false);
|
2014-05-15 12:27:53 -04:00
|
|
|
m_defaults.insert("AutoTypeEntryTitleMatch", true);
|
2017-02-22 10:08:06 -05:00
|
|
|
m_defaults.insert("UseGroupIconOnEntryCreation", true);
|
2017-04-04 10:21:45 -04:00
|
|
|
m_defaults.insert("IgnoreGroupExpansion", false);
|
2012-05-27 14:05:57 -04:00
|
|
|
m_defaults.insert("security/clearclipboard", true);
|
|
|
|
m_defaults.insert("security/clearclipboardtimeout", 10);
|
2014-01-07 15:56:58 -05:00
|
|
|
m_defaults.insert("security/lockdatabaseidle", false);
|
2017-02-22 10:08:06 -05:00
|
|
|
m_defaults.insert("security/lockdatabaseidlesec", 240);
|
2016-10-25 09:17:50 -04:00
|
|
|
m_defaults.insert("security/lockdatabaseminimize", false);
|
2017-05-04 16:52:10 -04:00
|
|
|
m_defaults.insert("security/lockdatabasescreenlock", true);
|
2016-11-23 21:59:24 -05:00
|
|
|
m_defaults.insert("security/passwordsrepeat", false);
|
2014-01-12 11:23:47 -05:00
|
|
|
m_defaults.insert("security/passwordscleartext", false);
|
2014-05-15 12:27:53 -04:00
|
|
|
m_defaults.insert("security/autotypeask", true);
|
2014-05-17 19:33:22 -04:00
|
|
|
m_defaults.insert("GUI/Language", "system");
|
2014-11-02 04:15:44 -05:00
|
|
|
m_defaults.insert("GUI/ShowTrayIcon", false);
|
|
|
|
m_defaults.insert("GUI/MinimizeToTray", false);
|
2015-06-18 09:23:41 -04:00
|
|
|
m_defaults.insert("GUI/MinimizeOnClose", false);
|
2011-12-25 13:17:40 -05:00
|
|
|
}
|
|
|
|
|
2012-05-31 08:51:44 -04:00
|
|
|
Config* Config::instance()
|
2011-12-25 13:17:40 -05:00
|
|
|
{
|
2012-05-31 08:51:44 -04:00
|
|
|
if (!m_instance) {
|
2012-06-14 16:55:25 -04:00
|
|
|
m_instance = new Config(qApp);
|
2011-12-25 13:17:40 -05:00
|
|
|
}
|
|
|
|
|
2012-05-31 08:51:44 -04:00
|
|
|
return m_instance;
|
2011-12-25 13:17:40 -05:00
|
|
|
}
|
2012-06-14 16:55:25 -04:00
|
|
|
|
2014-05-15 12:26:01 -04:00
|
|
|
void Config::createConfigFromFile(const QString& file)
|
2013-03-29 15:35:54 -04:00
|
|
|
{
|
|
|
|
Q_ASSERT(!m_instance);
|
|
|
|
m_instance = new Config(file, qApp);
|
|
|
|
}
|
|
|
|
|
2012-06-14 16:55:25 -04:00
|
|
|
void Config::createTempFileInstance()
|
|
|
|
{
|
|
|
|
Q_ASSERT(!m_instance);
|
2012-10-28 13:07:23 -04:00
|
|
|
QTemporaryFile* tmpFile = new QTemporaryFile();
|
2012-07-03 06:39:03 -04:00
|
|
|
bool openResult = tmpFile->open();
|
|
|
|
Q_ASSERT(openResult);
|
|
|
|
Q_UNUSED(openResult);
|
2012-10-28 13:07:23 -04:00
|
|
|
m_instance = new Config(tmpFile->fileName(), qApp);
|
|
|
|
tmpFile->setParent(m_instance);
|
2012-06-14 16:55:25 -04:00
|
|
|
}
|