Skip to content
This repository was archived by the owner on Jan 19, 2021. It is now read-only.
This repository was archived by the owner on Jan 19, 2021. It is now read-only.

Implementation via tertiary extension is unwise. #3

@subdavis

Description

@subdavis

First, thanks for your contribution to the community! I do not intend for the following to be personal, diminish the value of your work, or insult you in any way. Please regard as an open critique from a fellow experienced extension developer who totally respects what you've done here.


Extending an Extension

I get the desire to follow unix philosophy and do 1 thing well, but web extensions cannot and should not enjoy the same separation of concerns that native tools like pass do.

Resource waste

It's kinda nuts that I have to have an entire process on my machine dedicated to listening to 1 event and putting stuff on the clipboard. Chrome lets you do event-based pages (and you probably should for chrome/chromium), but Firefox is still stuck with persistent backgrounds.

User experience

Subsection A: finding and installing

Browserpass already has a very high bar for "hoops to jump through" before you get to a working configuration. I consider a lot of it to be documentation bugs, and I'd like to help with that in the near future, because I think it can be improved. This model, though, is highly unusual -- users aren't accustomed to installing extensions for their extensions. I've never done it in my whole life.

Subsection B: actually using it

browserpass-otp, as a "satellite extension" is restricted in what it can do.

Either a) its abilities will be severely limited by the necessity of having to react to events produced in the core. I can't just open this extension popup and get the OTP token I want, I have to open the core-extension and do some kind of semi-unrelated user action which I have to remember to create the magic behavior over in the background page. The relationship between what I have to click and the result is impossible to describe with any design language (buttons, iconography, animation, relative location, etc.)

Or b) the developer(s) will end up paying for the separation by embedding more and more granular event hooks into the core-extension to make extension-plugins like this support a wider variety of things a user wants to do.

That brings us to:

Maintainability (most important, IMO)

Here's an example of something that might come up within the next few weeks:

'Let's add an event hook for after the user has successfully entered their password so that any plugins can perform additional actions like placing new data on the clipboard like OTP tokens! That would solve #1!'

This is a bad excuse to grow the API surface, and will make releases more of a pain in the ass because you have to know and plan for breaking changes between core-browserpass and the extensions it talks to and the schema of messages it sends them.

You have to release them in lock-step and document more stuff and nobody has time for that.

Final thoughts

It's kinda cool that the browser lets you do this. There are so many reasons not to do it. This functionality should absolutely be baked into browserpass-extension and only show up if you have entries with OTP configured. I don't agree with the argument that browserpass should try to protect users from breaking separation of 2FA. Pass itself lets you do literally whatever you want. The feature poses no risk to users who choose not to use it, and preventing people from using their password store the way they want is not browserpass's place.

cc @erayd @maximbaz

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions