Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/keepassxreboot/keepassxc.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'src/browser/BrowserService.cpp')
-rw-r--r--src/browser/BrowserService.cpp57
1 files changed, 49 insertions, 8 deletions
diff --git a/src/browser/BrowserService.cpp b/src/browser/BrowserService.cpp
index 1f54e33ca..eb752996c 100644
--- a/src/browser/BrowserService.cpp
+++ b/src/browser/BrowserService.cpp
@@ -215,7 +215,6 @@ QJsonObject BrowserService::getDatabaseGroups()
QJsonObject BrowserService::createNewGroup(const QString& groupName)
{
-
auto db = getDatabase();
if (!db) {
return {};
@@ -284,6 +283,31 @@ QJsonObject BrowserService::createNewGroup(const QString& groupName)
return result;
}
+QString BrowserService::getCurrentTotp(const QString& uuid)
+{
+ QList<QSharedPointer<Database>> databases;
+ if (browserSettings()->searchInAllDatabases()) {
+ for (auto dbWidget : getMainWindow()->getOpenDatabases()) {
+ auto db = dbWidget->database();
+ if (db) {
+ databases << db;
+ }
+ }
+ } else {
+ databases << getDatabase();
+ }
+
+ auto entryUuid = Tools::hexToUuid(uuid);
+ for (const auto& db : databases) {
+ auto entry = db->rootGroup()->findEntryByUuid(entryUuid, true);
+ if (entry) {
+ return entry->totp();
+ }
+ }
+
+ return {};
+}
+
QString BrowserService::storeKey(const QString& key)
{
auto db = getDatabase();
@@ -413,7 +437,7 @@ QJsonArray BrowserService::findMatchingEntries(const QString& dbid,
}
// Sort results
- pwEntries = sortEntries(pwEntries, host, submitUrl);
+ pwEntries = sortEntries(pwEntries, host, submitUrl, url);
// Fill the list
QJsonArray result;
@@ -698,7 +722,10 @@ void BrowserService::convertAttributesToCustomData(QSharedPointer<Database> db)
}
}
-QList<Entry*> BrowserService::sortEntries(QList<Entry*>& pwEntries, const QString& host, const QString& entryUrl)
+QList<Entry*> BrowserService::sortEntries(QList<Entry*>& pwEntries,
+ const QString& host,
+ const QString& entryUrl,
+ const QString& fullUrl)
{
QUrl url(entryUrl);
if (url.scheme().isEmpty()) {
@@ -712,7 +739,7 @@ QList<Entry*> BrowserService::sortEntries(QList<Entry*>& pwEntries, const QStrin
// Build map of prioritized entries
QMultiMap<int, Entry*> priorities;
for (auto* entry : pwEntries) {
- priorities.insert(sortPriority(entry, host, submitUrl, baseSubmitUrl), entry);
+ priorities.insert(sortPriority(entry, host, submitUrl, baseSubmitUrl, fullUrl), entry);
}
QList<Entry*> results;
@@ -773,7 +800,7 @@ QList<Entry*> BrowserService::confirmEntries(QList<Entry*>& pwEntriesToConfirm,
config.save(entry);
});
- accessControlDialog.setItems(pwEntriesToConfirm, !submitHost.isEmpty() ? submitHost : url, httpAuth);
+ accessControlDialog.setItems(pwEntriesToConfirm, url, httpAuth);
QList<Entry*> allowedEntries;
if (accessControlDialog.exec() == QDialog::Accepted) {
@@ -895,7 +922,8 @@ Group* BrowserService::getDefaultEntryGroup(const QSharedPointer<Database>& sele
int BrowserService::sortPriority(const Entry* entry,
const QString& host,
const QString& submitUrl,
- const QString& baseSubmitUrl) const
+ const QString& baseSubmitUrl,
+ const QString& fullUrl) const
{
QUrl url(entry->url());
if (url.scheme().isEmpty()) {
@@ -914,9 +942,12 @@ int BrowserService::sortPriority(const Entry* entry,
if (!url.host().contains(".") && url.host() != "localhost") {
return 0;
}
- if (submitUrl == entryURL) {
+ if (fullUrl == entryURL) {
return 100;
}
+ if (submitUrl == entryURL) {
+ return 95;
+ }
if (submitUrl.startsWith(entryURL) && entryURL != host && baseSubmitUrl != entryURL) {
return 90;
}
@@ -1025,7 +1056,17 @@ bool BrowserService::handleURL(const QString& entryUrl, const QString& url, cons
// Match the subdomains with the limited wildcard
if (siteQUrl.host().endsWith(entryQUrl.host())) {
- return true;
+ if (!browserSettings()->bestMatchOnly()) {
+ return true;
+ }
+
+ // Match the exact subdomain and path, or start of the path when entry's path is longer than plain "/"
+ if (siteQUrl.host() == entryQUrl.host()) {
+ if (siteQUrl.path() == entryQUrl.path()
+ || (entryQUrl.path().size() > 1 && siteQUrl.path().startsWith(entryQUrl.path()))) {
+ return true;
+ }
+ }
}
return false;