buttercup / buttercup-desktop

:key: Cross-Platform Passwords & Secrets Vault
https://buttercup.pw
GNU General Public License v3.0
4.33k stars 331 forks source link

As a user, when I find (i.e. cmd + f), I want to search custom fields #Enhancement #760

Open ldexterldesign opened 5 years ago

ldexterldesign commented 5 years ago

Hi all,

Thanks for software

As a user[u], when I find (i.e. cmd + f), I want to search custom fields #Enhancement

As title

I have the following use case, with the plethora of Mozilla accounts/logins 😒, where http://accounts.firefox.com acts as a single sign-on for http://addons.thunderbird.net and http://addons.mozilla.org

When I find "mozilla" the following (Firefox) entry doesn't appear in results and it would be very helpful if it did:

Screenshot 2019-03-27 at 17 08 11 Screenshot 2019-03-27 at 17 08 30

If you're reading and:

Welcome feedback/input

If you have any issues (e.g. questions/queries) then happy to help

Hope to hear back

Keep up awesome work!

Yours hopefully

u:

hardware: Apple, MacBook Pro (Retina, 15-inch, Mid 2014) software - application: Buttercup, v1.15.0 (1.15.0) software - operating system: Apple, macOS, v10.14.3 (18D109)

perry-mitchell commented 5 years ago

Sounds good to me. We should simply include all fields in the fuzzy search. The score of an entry that contains more references to the search term will be ranked higher as expected.

jadach1 commented 5 years ago

Hey guys, I was looking into this problem and found an interesting dilemma.

So the properties of these objects are stored like this in the program:

image

Now after I hit ctrl-f and enter a value a method eventually a method will be called named search which comes from the library buttercup-core-web which exports EntryFinder

https://github.com/buttercup/buttercup-core-web/blob/40b6ff7ee4b04a085720dbb013782be8e921f864/source/EntryFinder.js

image

Inside that library the search method which is being called to get the values of the matching text entered by the user is being iterated by a further library called fuse https://fusejs.io

Here is the issue blocking the above problem

image

The fuse object only accepts keys as parameters, and they keys that are being passed in are property.title, and property.username , if you take a look above at my 1st screen of how the objects are stored, I have a custom field where the title is set to the string of "farmer", so the property value is property.farmer , which kind of blocks the possibility of being able to pass in keys to search for custom fields.

Besides changing how the architecture of how custom fields are stored in the application I am not sure how else this issue can be resolved. I would love to hear some of your feedback and opinions on this issue.

perry-mitchell commented 5 years ago

Hi @jadach1 - sorry for the delay. You’re right that the EntryFinder implementation is not ideal for the format you’re seeing there. The fields array is that of an entry facade, and the entry finder searches entry instances.

I think the best way to tackle this is in the core:

Of course this would require that EntryFinder takes one or more full archive facades. It would also require that the new external Buttercup facades library is used in the core (currently the core has some deprecated facade functionality which should be removed).