diff --git a/src/browser/BrowserService.cpp b/src/browser/BrowserService.cpp index fb27614c79..1854f26894 100644 --- a/src/browser/BrowserService.cpp +++ b/src/browser/BrowserService.cpp @@ -602,7 +602,8 @@ QString BrowserService::storeKey(const QString& key) return {}; } - contains = db->metadata()->customData()->contains(CustomData::BrowserKeyPrefix + id); + contains = + db->metadata()->customData()->contains(CustomData::getKeyWithPrefix(CustomData::BrowserKeyPrefix, id)); if (contains) { dialogResult = MessageBox::warning(m_currentDatabaseWidget, tr("KeePassXC - Overwrite existing key?"), @@ -615,8 +616,8 @@ QString BrowserService::storeKey(const QString& key) } while (contains && dialogResult == MessageBox::Cancel); hideWindow(); - db->metadata()->customData()->set(CustomData::BrowserKeyPrefix + id, key); - db->metadata()->customData()->set(QString("%1%2").arg(CustomData::Created, id), + db->metadata()->customData()->set(CustomData::getKeyWithPrefix(CustomData::BrowserKeyPrefix, id), key); + db->metadata()->customData()->set(CustomData::getKeyWithPrefix(CustomData::Created, id), QLocale::system().toString(Clock::currentDateTime(), QLocale::ShortFormat)); return id; } @@ -628,7 +629,7 @@ QString BrowserService::getKey(const QString& id) return {}; } - return db->metadata()->customData()->value(CustomData::BrowserKeyPrefix + id); + return db->metadata()->customData()->value(CustomData::getKeyWithPrefix(CustomData::BrowserKeyPrefix, id)); } #ifdef WITH_XC_BROWSER_PASSKEYS @@ -1070,7 +1071,8 @@ QList BrowserService::searchEntries(const QString& siteUrl, // Check if database is connected with KeePassXC-Browser. If so, return browser key (otherwise empty) auto databaseConnected = [&](const QSharedPointer& db) { for (const StringPair& keyPair : keyList) { - QString key = db->metadata()->customData()->value(CustomData::BrowserKeyPrefix + keyPair.first); + const auto key = db->metadata()->customData()->value( + CustomData::getKeyWithPrefix(CustomData::BrowserKeyPrefix, keyPair.first)); if (!key.isEmpty() && keyPair.second == key) { return keyPair.first; } diff --git a/src/core/CustomData.cpp b/src/core/CustomData.cpp index bbd1d3b5e2..3c734e65f1 100644 --- a/src/core/CustomData.cpp +++ b/src/core/CustomData.cpp @@ -23,7 +23,6 @@ const QString CustomData::LastModified = QStringLiteral("_LAST_MODIFIED"); const QString CustomData::Created = QStringLiteral("_CREATED_"); const QString CustomData::BrowserKeyPrefix = QStringLiteral("KPXC_BROWSER_"); -const QString CustomData::BrowserLegacyKeyPrefix = QStringLiteral("Public Key: "); const QString CustomData::ExcludeFromReportsLegacy = QStringLiteral("KnownBad"); const QString CustomData::FdoSecretsExposedGroup = QStringLiteral("FDO_SECRETS_EXPOSED_GROUP"); const QString CustomData::RandomSlug = QStringLiteral("KPXC_RANDOM_SLUG"); @@ -52,6 +51,15 @@ QString CustomData::value(const QString& key) const return m_data.value(key).value; } +QString CustomData::getKeyWithPrefix(const QString& prefix, const QString& key) +{ + QString keyWithPrefix; + keyWithPrefix.reserve(prefix.length() + key.length()); + keyWithPrefix.append(prefix); + keyWithPrefix.append(key); + return keyWithPrefix; +} + const CustomData::CustomDataItem& CustomData::item(const QString& key) const { auto item = m_data.find(key); diff --git a/src/core/CustomData.h b/src/core/CustomData.h index 49e8a33ee3..3ee4d05efe 100644 --- a/src/core/CustomData.h +++ b/src/core/CustomData.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2018 KeePassXC Team + * Copyright (C) 2024 KeePassXC Team * * 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 @@ -64,11 +64,12 @@ class CustomData : public ModifiableObject bool operator==(const CustomData& other) const; bool operator!=(const CustomData& other) const; + static QString getKeyWithPrefix(const QString& prefix, const QString& key); + // Pre-defined keys static const QString LastModified; static const QString Created; static const QString BrowserKeyPrefix; - static const QString BrowserLegacyKeyPrefix; static const QString FdoSecretsExposedGroup; static const QString RandomSlug; static const QString RemoteProgramSettings; diff --git a/src/gui/dbsettings/DatabaseSettingsWidgetBrowser.cpp b/src/gui/dbsettings/DatabaseSettingsWidgetBrowser.cpp index 524d2a6401..fa52c8b8fb 100644 --- a/src/gui/dbsettings/DatabaseSettingsWidgetBrowser.cpp +++ b/src/gui/dbsettings/DatabaseSettingsWidgetBrowser.cpp @@ -102,9 +102,10 @@ void DatabaseSettingsWidgetBrowser::removeSelectedKey() const QItemSelectionModel* itemSelectionModel = m_ui->customDataTable->selectionModel(); if (itemSelectionModel) { for (const QModelIndex& index : itemSelectionModel->selectedRows(0)) { - QString key = index.data().toString(); - key.insert(0, CustomData::BrowserKeyPrefix); + const auto key = CustomData::getKeyWithPrefix(CustomData::BrowserKeyPrefix, index.data().toString()); + const auto createdKey = CustomData::getKeyWithPrefix(CustomData::Created, index.data().toString()); customData()->remove(key); + customData()->remove(createdKey); } updateModel(); } @@ -124,7 +125,7 @@ void DatabaseSettingsWidgetBrowser::updateModel() if (key.startsWith(CustomData::BrowserKeyPrefix)) { QString strippedKey = key; strippedKey.remove(CustomData::BrowserKeyPrefix); - auto created = customData()->value(getKeyWithPrefix(CustomData::Created, strippedKey)); + auto created = customData()->value(CustomData::getKeyWithPrefix(CustomData::Created, strippedKey)); auto createdItem = new QStandardItem(created); createdItem->setEditable(false); m_customDataModel->appendRow(QList() @@ -305,14 +306,9 @@ void DatabaseSettingsWidgetBrowser::replaceKey(const QString& prefix, const QString& oldName, const QString& newName) const { - const auto oldKey = getKeyWithPrefix(prefix, oldName); - const auto newKey = getKeyWithPrefix(prefix, newName); + const auto oldKey = CustomData::getKeyWithPrefix(prefix, oldName); + const auto newKey = CustomData::getKeyWithPrefix(prefix, newName); const auto tempValue = customData()->value(oldKey); m_db->metadata()->customData()->remove(oldKey); m_db->metadata()->customData()->set(newKey, tempValue); } - -QString DatabaseSettingsWidgetBrowser::getKeyWithPrefix(const QString& prefix, const QString& key) const -{ - return QString("%1%2").arg(prefix, key); -} diff --git a/src/gui/dbsettings/DatabaseSettingsWidgetBrowser.h b/src/gui/dbsettings/DatabaseSettingsWidgetBrowser.h index 1f20bf46b4..25664a71fd 100644 --- a/src/gui/dbsettings/DatabaseSettingsWidgetBrowser.h +++ b/src/gui/dbsettings/DatabaseSettingsWidgetBrowser.h @@ -63,7 +63,6 @@ private slots: void updateModel(); void settingsWarning(); void replaceKey(const QString& prefix, const QString& oldName, const QString& newName) const; - QString getKeyWithPrefix(const QString& prefix, const QString& key) const; protected: void showEvent(QShowEvent* event) override;