Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
53 changes: 33 additions & 20 deletions KeePassHttp/Handlers.cs
Original file line number Diff line number Diff line change
Expand Up @@ -154,28 +154,41 @@ private IEnumerable<PwEntryDatabase> FindMatchingEntries(Request r, Aes aes)
}

int listCount = 0;
bool titleSearch = (searchHost.IndexOf(".") == -1);
foreach (PwDatabase db in listDatabases)
{
searchHost = origSearchHost;
//get all possible entries for given host-name
while (listResult.Count == listCount && (origSearchHost == searchHost || searchHost.IndexOf(".") != -1))
{
parms.SearchString = String.Format("^{0}$|/{0}/?", searchHost);
var listEntries = new PwObjectList<PwEntry>();
db.RootGroup.SearchEntries(parms, listEntries);
foreach (var le in listEntries)
{
listResult.Add(new PwEntryDatabase(le, db));
}
searchHost = searchHost.Substring(searchHost.IndexOf(".") + 1);

//searchHost contains no dot --> prevent possible infinite loop
if (searchHost == origSearchHost)
break;
}
listCount = listResult.Count;
}

if (!titleSearch)
{
//get all possible entries for given host-name
while (listResult.Count == listCount && (origSearchHost == searchHost || searchHost.IndexOf(".") != -1))
{
parms.SearchString = String.Format("^{0}$|/{0}/?", searchHost);
var listEntries = new PwObjectList<PwEntry>();
db.RootGroup.SearchEntries(parms, listEntries);
foreach (var le in listEntries)
{
listResult.Add(new PwEntryDatabase(le, db));
}
searchHost = searchHost.Substring(searchHost.IndexOf(".") + 1);

//searchHost contains no dot --> prevent possible infinite loop
if (searchHost == origSearchHost)
break;
}
}
else
{
parms.SearchString = String.Format("{0}", searchHost);
var listEntries = new PwObjectList<PwEntry>();
db.RootGroup.SearchEntries(parms, listEntries);
foreach (var le in listEntries)
{
listResult.Add(new PwEntryDatabase(le, db));
}
}
listCount = listResult.Count;
}

Func<PwEntry, bool> filter = delegate(PwEntry e)
{
Expand Down Expand Up @@ -205,7 +218,7 @@ private IEnumerable<PwEntryDatabase> FindMatchingEntries(Request r, Aes aes)
if (formHost.EndsWith(uHost))
return true;
}
return formHost.Contains(title) || (entryUrl != null && formHost.Contains(entryUrl));
return title.Contains(formHost) || (entryUrl != null && formHost.Contains(entryUrl));
};

Func<PwEntry, bool> filterSchemes = delegate(PwEntry e)
Expand Down