mozilla-lockwise / lockwise-addon Goto Github PK
View Code? Open in Web Editor NEWTake your passwords everywhere
Home Page: https://mozilla-lockwise.github.io/lockwise-addon
License: Mozilla Public License 2.0
Take your passwords everywhere
Home Page: https://mozilla-lockwise.github.io/lockwise-addon
License: Mozilla Public License 2.0
Once I’ve been informed of a breach in the market or via Monitor, I want know what other accounts may be compromised.
This is likely an epic that will require tasks and further breakdown.
Zeplin
Entry Detail w/ Warning: https://zpl.io/a8pGM6w (links to Monitor page)
Monitor: https://zpl.io/2G9WZ44
When using the Lockbox extension, I want to know how to set it up so that I can easily access on mobile.
InVision
User Menu (not signed in)
https://mozilla.invisionapp.com/share/ENOL84959AK#/339623981_Logins_-_Home_-_Menu_-_Not_Signed_In_-Light-
Connect Device Modal - Needs to sign in
https://mozilla.invisionapp.com/share/ENOL84959AK#/342439032_Logins_-_Connect_Device_-_Not_Signed_In_-Light-
Connect Device Modal - Needs to check "logins" in sync pref
https://mozilla.invisionapp.com/share/ENOL84959AK#/342439031_Logins_-_Connect_Device_-_Logins_Not_Checked_-Light-
Connect Device Modal - Steps complete (transitions to instruction screen)
https://mozilla.invisionapp.com/share/ENOL84959AK#/343764712_Logins_-_Connect_Device_-_Steps_Complete_-Light-
Connect Device Modal - Instructions (what a user would see if they were already signed in and selected "Connect a Device" from the user menu)
https://mozilla.invisionapp.com/share/ENOL84959AK#/343764713_Logins_-_Connect_Device_-_Instructions_-Light-
Zeplin
User Menu (not signed in): https://zpl.io/a8pvROX
Connect Device Modal - Needs to sign in: https://zpl.io/aByAXxp
Connect Device Modal - Needs to check "logins" in sync pref: https://zpl.io/a8pqXgw
Connect Device Modal - Steps complete (transitions to instruction screen): https://zpl.io/boKE38E
Connect Device Modal - Instructions: https://zpl.io/VqK43Ym
If I have the Lockbox webextension installed, and I navigate to "saved logins" (currently in about:preferences#logins AND context menu) I want engage the Lockbox management interface and not the browser.*
*If someone goes out of their way to download the extension, we assume they want to use their chosen management interface over the default the browser provides.
Child of #38
When I want to get my passwords across my many devices, I want to clearly know how to do that
Zeplin
https://zpl.io/boK9ggk
(Current approach is to link to lockbox.firefox.com page for both iOS and Android, letting the functionality built on that page handle text/email of app, as well as providing additional information to the user regarding the apps)
As the product owner, I want to know how users engage with the extension to help inform decisions for future effort, while making sure users have control over whether or not their usage data is submitted.
When I don't have any logins saved in Firefox, I want to be informed and given a path to add some.
InVision
Full View
https://mozilla.invisionapp.com/share/ENOL84959AK#/339614512_Logins_-_Home_-_No_Logins_-Light-
Doorhanger
https://mozilla.invisionapp.com/share/ENOL84959AK#/343746149_Doorhanger_-_Empty_State_-Light-
Zeplin
Full View: https://zpl.io/a759P0v
Doorhanger: https://zpl.io/bJ9dX3n
Link in designs would direct to: https://lockbox.firefox.com/faq.html#how-do-i-get-my-saved-logins-into-firefox-lockbox
When I want to access my passwords, I need a quick way from anywhere I am to get to that interface.
InVision
https://mozilla.invisionapp.com/share/ENOL84959AK#/331897167_Lockbox_-_Doorhanger_-_New_Tab
Zeplin
https://zpl.io/boK9ggk
Placeholder for discussion with data & legal teams about any changed telemetry probes or telemetry storage timelines for the new addon
Followup issue from last bit of review feedback.
The update() method should require a complete login object, rather than just the bits we've updated, so that we don't have to internally strip out null
fields injected by the webextensions framework
This is a placeholder issue as we need to go through and define all the changes to be made across the entire product suite. Once we explore what all those changes need to be, and open associated issues in the various repos, then we can close out this issue.
This may or may not be related to the rebranding efforts happening (ie even if the product line stays Lockbox for the time being, there are some discrepancies that need to be addressed)
When I want to take inventory of all the accounts I have saved, I want an easy way to scan the list to find the desired account. Favicons can provide easier readability.
UX team to complete additional acceptance criteria
InVision
Zeplin
Full View: https://zpl.io/agP43dR
Doorhanger: https://zpl.io/2pnBLP8
When I come to the management interface, I want to see all my saved logins and know how best to engage with the tools.
InVision
https://mozilla.invisionapp.com/share/6WNKK56RZCU#/318338543_Saved_Logins_-_Home
Zeplin
https://zpl.io/boK9ggk
Related to #33
Related to #34
Required by #35
Required by #36
A Logins API is necessary to function post Firefox 64 for the Lockbox add-on to access browser saved logins.
Child of #38
InVision
Signed In: https://mozilla.invisionapp.com/share/ENOL84959AK#/338158451_Logins_-_Home_-_Menu_-Light-
Not Signed In: https://mozilla.invisionapp.com/share/ENOL84959AK#/339623981_Logins_-_Home_-_Menu_-_Not_Signed_In_-Light-
Hover: https://mozilla.invisionapp.com/share/ENOL84959AK#/344286028_Logins_-_Home_-_Menu_-_Hover_-Light-
Zeplin
Signed In: https://zpl.io/aRWJ48g
Not Signed In: https://zpl.io/a8pvROX
Hover: https://zpl.io/VQKLLYA
When I want to take inventory of the accounts I have saved for a specific URL, I want an easy way to navigate the list to make decisions around next actions (view details, copy, manage).
Zeplin
Default (search focused): https://zpl.io/2EPeOpy
Filtered: https://zpl.io/25G8Jln
Entry Hover: https://zpl.io/andg3Rk
Info Button Hover: https://zpl.io/bJ9JDAJ
Bottom Button ("Open Lockbox") Hover: https://zpl.io/V4QNvg4
improves coverage; decreases risk of unintended breakage
Integration test of:
When I want to access my saved logins, I want to be able to do that similarly to how I already navigate the web, by typing in a url or clicking a saved bookmark.
When I have several Lockbox entries and I need to access an online account, I need to be able to quickly find an entry by website address, entry name, or username.
Zeplin
https://zpl.io/bWgLA9M
Using Firefox 66, the extension crashes.
Steps to reproduce:
about:debugging
/addons
directory in repoAt this point the browser will crash and lockbox will be uninstalled on restart.
OS: Windows 10
git branch: master
Firefox Version: Nightly 66.0a1 (2019-01-10) (64-bit)
Additional Info:
I had created one entry in the management page and opened and closed the dropdown 1 time before this started happening.
ERROR in Cannot read property 'readdir' of undefined
is the error I'm seeing after running
npm install
and npm run build
.
Looks like this error is coming from here. Haven't figured out which directory is undefined though.
Entrypoint list/popup = list/popup.js
[./background/browser-action.js] 804 bytes {background} [built]
[./background/index.js] 493 bytes {background} [built]
[./background/message-ports.js] 2.33 KiB {background} [built]
[./background/telemetry.js] 3.11 KiB {background} [built]
[./l10n.js] 2.94 KiB {list/manage} {list/popup} [built]
[./list/actions.js] 6.6 KiB {list/manage} {list/popup} [built]
[./list/manage/index.js] 1.13 KiB {list/manage} [built]
[./list/manage/reducers.js] 1.59 KiB {list/manage} [built]
[./list/manage/telemetry.js] 2.05 KiB {list/manage} [built]
[./list/message-ports.js] 878 bytes {list/manage} {list/popup} [built]
[./list/popup/containers/current-selection.js] 1.14 KiB {list/popup} [built]
[./list/popup/index.js] 1.51 KiB {list/popup} [built]
[./list/popup/reducers.js] 385 bytes {list/popup} [built]
[./list/popup/telemetry.js] 835 bytes {list/popup} [built]
[./telemetry.js] 361 bytes {list/manage} {list/popup} [built]
+ 192 hidden modules
ERROR in Cannot read property 'readdir' of undefined
Child html-webpack-plugin for "list/manage.html":
1 asset
Entrypoint undefined = list/manage.html
[../node_modules/html-webpack-plugin/lib/loader.js!./template.ejs] 1010 bytes {0} [built]
+ 3 hidden modules
Child html-webpack-plugin for "list/popup.html":
1 asset
Entrypoint undefined = list/popup.html
[../node_modules/html-webpack-plugin/lib/loader.js!./template.ejs] 1010 bytes {0} [built]
+ 3 hidden modules
npm ERR! code ELIFECYCLE
npm ERR! errno 2
npm ERR! [email protected] build: `webpack`
npm ERR! Exit status 2
npm ERR!
npm ERR! Failed at the [email protected] build script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm ERR! A complete log of this run can be found in:
npm ERR! /home/meandave/.npm/_logs/2019-01-07T19_35_10_535Z-debug.log
Child of #38
If the user is logged in to Sync, there are two edge cases we might bump into:
In both cases, the existing desktop code redirects the user to the sync preferences page (about:preferences#sync) to fix their situation.
Open questions:
gSync.openPrefs
or gSync.openSignInAgainPage()
(usage example) from an embedded API experiment. Need to make sure gSync
is available in an API experiment js file (it should be).InVision
Full View: https://mozilla.invisionapp.com/share/ENOL84959AK#/343774936_Logins_-_Sync_Issue_-Light-
Full View - User Menu: https://mozilla.invisionapp.com/share/ENOL84959AK#/343989952_Logins_-_Sync_Issue_-_Menu_-Light-
Doorhanger: https://mozilla.invisionapp.com/share/ENOL84959AK#/343777425_Doorhanger_-_Sync_Issue_-Light-
Zeplin
Full View: https://zpl.io/2ZjOwLJ
Full View - User Menu: https://zpl.io/adrod9e
Doorhanger: https://zpl.io/VOKELQl
*Link would direct to sync preferences
Requires #92
When working in the management interface, updating an existing credential or adding a new one, the browser should not try to save passwords the user is manually managing. We want to eliminate that confusion.
I want to be able to easily change my entry details (e.g., username and/or password).
InVision
https://mozilla.invisionapp.com/share/ENOL84959AK#/338187075_Logins_-_Entry_Detail_-_Edit_-Light-
Long passwords: https://mozilla.invisionapp.com/share/ENOL84959AK#/340867863_Logins_-_Entry_Detail_-_Edit_-_Long_Password_-Light-
Zeplin
https://zpl.io/VkwEO1M
Long passwords: https://zpl.io/adrvOB7
Determine what it would take to pass through the autograph service and integrate with our build process.
Potentially involves switching from TravisCI to CircleCI.
When running the integration tests locally, I'm getting failures with this error:
JavascriptError: Error: resource://gre/modules/Services.jsm - Couldn't find target object for import.
Looks like the driver setup is tripping on this spot in the script loader. Maybe there's some flag we need to set for it to allow the test to load the script.
Related to #22.
switch from jpm
to web-ext
, update dependencies
This is just a placeholder, as @linuxwolf mentioned this functionality would also be included, as we already have create support in the code base.
The Web Address must contain a scheme (e.g., "https://") and a host (domain + port), and must not include a path.
If the URI is not well-formed, an error is displayed suggesting the user include "https://".
If the URI is well-formed but includes a path, the path can be stripped.
InVision
Helper: https://mozilla.invisionapp.com/share/ENOL84959AK#/339614514_Logins_-_New_Entry_-_Address_Focused_-Light-
Error: https://mozilla.invisionapp.com/share/ENOL84959AK#/339614519_Logins_-_New_Entry_-_Error_-_Address_-Light-
Zeplin
Helper: https://zpl.io/andLDWA
Error: https://zpl.io/aNKzXWk
A Sync API to function post Firefox 64 for the Lockbox add-on to access state information related to Firefox Sync.
true
).chrome.identity
; marked as "unsupported" within Firefox as of 65When onAdded
, onUpdated
events fire, the chrome://FirefoxAccounts
login isn't properly filtered out as it is when browser.experiments.logins.getAll
is called.
I've got a fix for this, working on tests for the event firing code.
Child of #38
As a user, I want to know that I am signed in with Firefox Account (FxA).
avatarURL
property is always set (using the default if the user has not uploaded one)displayName
if set, otherwise email
Zeplin
https://zpl.io/boK9ggk (current, may change depending on experiment)
When I have several Lockbox entries and I need to access an online account, I need to be able to quickly find an entry by website address, entry name, or username. Both in the doorhanger and the management interface.
Full View
Default (focused): https://zpl.io/boK9ggk
Searching: https://zpl.io/bldPRR5
Not Focused: https://zpl.io/am94zze
No Matching Results*: https://zpl.io/bzAOPkE
Doorhanger
Default(focused): https://zpl.io/2EPeOpy
Searching: https://zpl.io/25G8Jln
Not Focused: https://zpl.io/VQK46qW
No Matching Results*: https://zpl.io/agP3rj9
*Link for no matching results directs here: https://lockbox.firefox.com/faq.html#how-do-i-get-my-saved-logins-into-firefox-lockbox
refs #20
Was trying to take a look at the current code coverage, but ran into some errors trying to run npm run codecov
.
Looks like it just isn't generating any reports. Tried with both 2.7 and 3.5.2 aliased to python
Here is my output:
meandave@LAPTOP-NA0Q0G86:/mnt/c/Users/Dave Justice/Code/lockbox-addon$ npm run codecov
> [email protected] codecov /mnt/c/Users/Dave Justice/Code/lockbox-addon
> codecov
_____ _
/ ____| | |
| | ___ __| | ___ ___ _____ __
| | / _ \ / _` |/ _ \/ __/ _ \ \ / /
| |___| (_) | (_| | __/ (_| (_) \ V /
\_____\___/ \__,_|\___|\___\___/ \_/
v3.1.0
==> Detecting CI Provider
No CI Detected. Using git/mercurial
==> Configuration:
Endpoint: https://codecov.io
{ commit: '361f902277107c765707e2b9ab1ed873892f1091',
branch: 'specify-node-version',
package: 'node-v3.1.0' }
==> Building file structure
==> Generating gcov reports (skip via --disable=gcov)
$ find /mnt/c/Users/Dave Justice/Code/lockbox-addon -type f -name '*.gcno' -exec gcov {} +
find: ‘/mnt/c/Users/Dave’: No such file or directory
find: ‘Justice/Code/lockbox-addon’: No such file or directory
Failed to run gcov command.
==> Scanning for reports
find: ‘/mnt/c/Users/Dave’: No such file or directory
find: ‘Justice/Code/lockbox-addon’: No such file or directory
child_process.js:662
throw err;
^
Error: Command failed: find /mnt/c/Users/Dave Justice/Code/lockbox-addon -type f \( -name '*coverage.*' -or -name 'nosetests.xml' -or -name 'jacoco*.xml' -or -name 'clover.xml' -or -name 'report.xml' -or -name 'cobertura.xml' -or -name 'luacov.report.out' -or -name 'lcov.info' -or -name '*.lcov' -or -name 'gcov.info' -or -name '*.gcov' -or -name '*.lst' \) -not -name '*.sh' -not -name '*.data' -not -name '*.py' -not -name '*.class' -not -name '*.xcconfig' -not -name 'Coverage.profdata' -not -name 'phpunit-code-coverage.xml' -not -name 'coverage.serialized' -not -name '*.pyc' -not -name '*.cfg' -not -name '*.egg' -not -name '*.whl' -not -name '*.html' -not -name '*.js' -not -name '*.cpp' -not -name 'coverage.jade' -not -name 'include.lst' -not -name 'inputFiles.lst' -not -name 'createdFiles.lst' -not -name 'coverage.html' -not -name 'scoverage.measurements.*' -not -name 'test_*_coverage.txt' -not -path '*/vendor/*' -not -path '*/htmlcov/*' -not -path '*/home/cainus/*' -not -path '*/virtualenv/*' -not -path '*/js/generated/coverage/*' -not -path '*/.virtualenv/*' -not -path '*/virtualenvs/*' -not -path '*/.virtualenvs/*' -not -path '*/.env/*' -not -path '*/.envs/*' -not -path '*/env/*' -not -path '*/envs/*' -not -path '*/.venv/*' -not -path '*/.venvs/*' -not -path '*/venv/*' -not -path '*/venvs/*' -not -path '*/.git/*' -not -path '*/.hg/*' -not -path '*/.tox/*' -not -path '*/__pycache__/*' -not -path '*/.egg-info*' -not -path '*/$bower_components/*' -not -path '*/node_modules/*' -not -path '*/conftest_*.c.gcov'
find: ‘/mnt/c/Users/Dave’: No such file or directory
find: ‘Justice/Code/lockbox-addon’: No such file or directory
at checkExecSyncError (child_process.js:622:11)
at execSync (child_process.js:659:13)
at Object.upload (/mnt/c/Users/Dave Justice/Code/lockbox-addon/node_modules/codecov/lib/codecov.js:471:16)
at Object.<anonymous> (/mnt/c/Users/Dave Justice/Code/lockbox-addon/node_modules/codecov/bin/codecov:27:9)
at Module._compile (internal/modules/cjs/loader.js:721:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:732:10)
at Module.load (internal/modules/cjs/loader.js:620:32)
at tryModuleLoad (internal/modules/cjs/loader.js:560:12)
at Function.Module._load (internal/modules/cjs/loader.js:552:3)
at Function.Module.runMain (internal/modules/cjs/loader.js:774:12)
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! [email protected] codecov: `codecov`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the [email protected] codecov script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm ERR! A complete log of this run can be found in:
npm ERR! /home/meandave/.npm/_logs/2019-01-08T15_09_10_853Z-debug.log
Integration tests for:
Firefox may prompt the user to "save this login" while editing a login in the Lockbox management interface, which is confusing to the user and can present data storage issues (e.g., storing a loging not really intended for the hostname).
Instead, the prompts should be disabled while the management interface is the active tab.
TL;DR: The basic setup could work something like this:
More background:
The addon is composed of a background script, a panel UI, and a full-tab management UI. Currently, each of these pieces has its own data management code - the background has a datastore.js, and the two UI views have variant Redux stores.
A single Redux store module could be shared between all parts of the add-on. There, we could define one common set of actions and a data store modeled after the Logins API (ala #21). Redux actions map well to messages, which also reduces complexity between background and UI views.
Integration test of:
When viewing the entry list, I want to quickly scan the entry list by title (e.g., Facebook instead of https://www.facebook.com or even www.facebook.com), so I can quickly access my username and password for managing that record.
Requires #21
When I select an entry -- in either the management interface or the doorhanger -- I want to see its details and understand what actions I can take.
InVision
Full View: https://mozilla.invisionapp.com/share/ENOL84959AK#/338158445_Logins_-_Home_-Light-
Full View - Long passwords: https://mozilla.invisionapp.com/share/ENOL84959AK#/340867861_Logins_-_Entry_Detail_-_Long_Password_-Light-
Doorhanger: https://mozilla.invisionapp.com/share/ENOL84959AK#/338166659_Doorhanger_-_Entry_Detail_-Light-
Zeplin
Full View: https://zpl.io/boK9ggk
Full View - Long passwords: https://zpl.io/aMKJOzK
Doorhanger: https://zpl.io/2pnBL78
Update the integration and accessibility tests to properly function for the "nsILogins" addon experience.
The original tests assume the functionality that requires a separate Firefox Accounts login and passwords database (from that built into Firefox).
Assume starting with a clean slate:
Instead of using a custom data model, use the nsILoginInfo/MetaInfo model. This considerably simplifies the implementation.
As the product owner, I want to know how users engage with the app to help inform decisions for future effort, while making sure users have control over whether or not their usage data is submitted.
When I want to access an account on a different device, or copy/paste doesn’t work for me, I want to see the password so I can manually enter it to get into my account.
InVision
Zeplin
Password Hidden (default): https://zpl.io/boK9ggk
Password Shown: https://zpl.io/bzARAzX
Password - Long (read version): https://zpl.io/aMKJOzK
Password - Long (edit mode): https://zpl.io/adrvOB7 (field would be scrollable)
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.