Prevent overwriting of portable config on update

* Move portable configuration files into a config subfolder from the executable. This prevents overwriting the stored config when the application is updated in-place.
* Use .portable file to signal a portable app
* Fix #4751
This commit is contained in:
Jonathan White 2020-06-04 08:10:07 -04:00
parent 9d10792640
commit b7104be689
3 changed files with 7 additions and 15 deletions

View File

@ -987,13 +987,15 @@ build() {
cpack -G "${CPACK_GENERATORS};${build_generators}"
# Inject the portable config into the zip build and rename
touch .portable
for filename in ${APP_NAME}-*.zip; do
logInfo "Creating portable zip file"
local folder=$(echo ${filename} | sed -r 's/(.*)\.zip/\1/')
python -c 'import zipfile,sys ; zipfile.ZipFile(sys.argv[1],"a").write(sys.argv[2],sys.argv[3])' \
${filename} ${SRC_DIR}/share/keepassxc.ini ${folder}/keepassxc.ini
${filename} .portable ${folder}/.portable
mv ${filename} ${folder}-portable.zip
done
rm .portable
mv "${APP_NAME}-"*.* ../
else

View File

@ -1,10 +0,0 @@
[General]
UpdateCheckMessageShown=false
LastActiveDatabase=@Invalid()
LastOpenedDatabases=@Invalid()
HideWindowOnCopy=false
MinimizeOnCopy=true
[GUI]
HideUsernames=false
HidePasswords=true

View File

@ -427,10 +427,10 @@ Config::Config(const QString& fileName, QObject* parent)
Config::Config(QObject* parent)
: QObject(parent)
{
// Check if portable config is present (use it also to store local config)
QString portablePath = QDir::fromNativeSeparators(QCoreApplication::applicationDirPath()) + "/keepassxc.ini";
if (QFile::exists(portablePath)) {
init(portablePath);
// Check if we are running in portable mode, if so store the config files local to the app
auto portablePath = QCoreApplication::applicationDirPath().append("/%1");
if (QFile::exists(portablePath.arg(".portable"))) {
init(portablePath.arg("config/keepassxc.ini"), portablePath.arg("config/keepassxc_local.ini"));
return;
}