* Ensure AuthStatus Changes Before Exiting
* Do Not Display Account Without Name Or Email
* Fix Environment Selectors
* Add AccountService.clean to Web
* Update Emergency Access To Get Their Own Key
* Migrate Organization Keys To Get Their Own Key
* Remove Optional Parameters
* Update Abstraction Parameter Name to Match Implementation
* Add @throws Doc
* [PM-7810] Handle Multithread Decryption through Offscreen API
* [PM-7810] Handle Multithread Decryption through Offscreen API
* Use a service to track when to open and close offscreen document
There some strangeness around maintaining the offscreen document for more callbacks, that need not have the same reasons and justifications as the original.
We'd need to test, but perhaps the intent is something closer to maintaining a work queue ourselves and creating the offscreen page for only a single reason as it comes in, then waiting for that page to close before opening another.
* [PM-7810] Handle Multithread Decryption through Offscreen API
* [PM-7810] Handle Multithread Decryption through Offscreen API
* [PM-7810] Handle Multithread Decryption through Offscreen API
* [PM-7810] Handle Multithread Decryption through Offscreen API
* [PM-7810] Implementing jest tests for OffscreenDocument and BrowserMultithreadEncryptServiceImplementation
* [PM-7810] Separating out the process by which we get decrypted items from the web worker to ensure we do not do duplicate effort
* [PM-7810] Separating out the process by which we get decrypted items from the web worker to ensure we do not do duplicate effort
* Prefer builtin promise flattening
* [PM-7810] Introducing a fallback to the MultithreadEncryptServiceImplementation to ensure we can fallback to single thread decryption if necessary
* [PM-7810] Updating documentation
* [PM-7810] Fixing implementation to leverage the new OffscreenDocumentService
---------
Co-authored-by: Matt Gibson <mgibson@bitwarden.com>
* Match console method signatures in logService abstraction
* Add a few usages of improved signature
* Remove reality check test
* Improve electron logging
* Use account service to track accounts and active account
* Remove state service active account Observables.
* Add email verified to account service
* Do not store account info on logged out accounts
* Add account activity tracking to account service
* Use last account activity from account service
* migrate or replicate account service data
* Add `AccountActivityService` that handles storing account last active data
* Move active and next active user to account service
* Remove authenticated accounts from state object
* Fold account activity into account service
* Fix builds
* Fix desktop app switch
* Fix logging out non active user
* Expand helper to handle new authenticated accounts location
* Prefer view observable to tons of async pipes
* Fix `npm run test:types`
* Correct user activity sorting test
* Be more precise about log out messaging
* Fix dev compare errors
All stored values are serializable, the next step wasn't necessary and was erroring on some types that lack `toString`.
* If the account in unlocked on load of lock component, navigate away from lock screen
* Handle no users case for auth service statuses
* Specify account to switch to
* Filter active account out of inactive accounts
* Prefer constructor init
* Improve comparator
* Use helper methods internally
* Fixup component tests
* Clarify name
* Ensure accounts object has only valid userIds
* Capitalize const values
* Prefer descriptive, single-responsibility guards
* Update libs/common/src/state-migrations/migrate.ts
Co-authored-by: Justin Baur <19896123+justindbaur@users.noreply.github.com>
* Fix merge
* Add user Id validation
activity for undefined was being set, which was resulting in requests for the auth status of `"undefined"` (string) userId, due to key enumeration. These changes stop that at both locations, as well as account add for good measure.
---------
Co-authored-by: Justin Baur <19896123+justindbaur@users.noreply.github.com>
* PM-7811 - Refactor UserKeyInitService to UserAutoUnlockKeyService - remove active account listening logic as it introduced race conditions with user key memory retrieval happening before the user auto unlock key was set into memory.
* PM-7811 - CLI - (1) Fix deps (2) On CLI init (pre command execution), if there is an active account, then set the user key in memory from the user auto unlock key.
* PM-7811 - Browser Extension / desktop - (1) Update deps (2) Sets user key in memory if the auto unlock key is set on account switch and background init (must act on all accounts so that account switcher displays unlock status properly).
* PM-7811 - Web - (1) Update deps (2) Sets user key in memory if the auto unlock key is set on init
* PM-7811 - Fix account switcher service changes not being necessary.
Refactors the feature flags in ConfigService to be type safe. It also moves the default value to a centralized location rather than the caller defining it. This ensures consistency across the various places they are used.
* [PM-7710] Avoid re-indexing ciphers on current tab component and re-setting null storage values for popup components
* [PM-7710] Avoid re-indexing ciphers on current tab component and re-setting null storage values for popup components
* remove 2fa from main.background
* remove login strategy service from main.background
* move 2fa and login strategy service to popup, init in browser
* add state providers to 2fa service
- add deserializer helpers
* use key definitions for global state
* fix calls to 2fa service
* remove extra await
* add delay to wait for active account emission in popup
* add and fix tests
* fix cli
* really fix cli
* remove timeout and wait for active account
* verify expected user is active account
* fix tests
* address feedback
`safeGetString` takes a `string` or `EncString` and return the appropiate value based on it's type
Co-authored-by: Daniel James Smith <djsmith85@users.noreply.github.com>
* Implement a lazy value class
This will be used as a source for composing key-protected storage from a single key source.
* Simplify local-backed-session-storage
The new implementation stores each value to a unique location, prefixed with `session_` to help indicate the purpose.
I've also removed the complexity around session keys, favoring passing in a pre-defined value that is determined lazily once for the service worker. This is more in line with how I expect a key-protected storage would work.
* Remove decrypted session flag
This has been nothing but an annoyance. If it's ever added back, it needs to have some way to determine if the session key matches the one it was written with
* Remove unnecessary string interpolation
* Remove sync Lazy
This is better done as a separate class.
* Handle async through type
* prefer two factory calls to incorrect value on races.
* Fix type
* Remove log
* Update libs/common/src/platform/misc/lazy.ts
Co-authored-by: Justin Baur <19896123+justindbaur@users.noreply.github.com>
---------
Co-authored-by: Justin Baur <19896123+justindbaur@users.noreply.github.com>
* Introduce browser large object storage location.
This location is encrypted and serialized to disk in order to allow for storage of uncountable things like vault items that take a significant amount of time to prepare, but are not guaranteed to fit within session storage.
however, limit the need to write to disk is a big benefit, so _most_ things are written to storage.session instead, where things specifically flagged as large will be moved to disk-backed memory
* Store derived values in large object store for browser
* Fix AbstractMemoryStorageService implementation
* PM-6689 - Add security stamp to Token state
* PM-6689 - Remove Security Stamp from account and state service
* PM-6689 - Add security stamp get and set to token service + abstraction + tests
* PM-6689 - Add migration for security stamp, test it, and register it with migrator
* PM-6689 - Update sync service + deps to use token service.
* PM-6689 - Cleanup missed usages of account tokens which has been removed.
* PM-6689 - Per PR feedback, remove unnecessary data migration as the security stamp is only in memory and doesn't need to be migrated.
* PM-7235 - AuthSvc - Refactor getAuthStatus to simply use the cryptoService.hasUserKey check to determine the user's auth status.
* PM-7235 - CryptoSvc - getUserKey - remove setUserKey side effect if auto key is stored. Will move to app init
* PM-7235 - For each client init service, add setUserKeyInMemoryIfAutoUserKeySet logic
* PM-7235 - CryptoSvc tests - remove uncessary test.
* PM-7235 - Create UserKeyInitService and inject into all init services with new listening logic to support acct switching.
* PM-7235 - UserKeyInitSvc - minor refactor of setUserKeyInMemoryIfAutoUserKeySet
* PM-7235 - Add test suite for UserKeyInitService
* PM-7235 - Remove everBeenUnlocked as it is no longer needed
* PM-7235 - Fix tests
* PM-7235 - UserKeyInitSvc - per PR feedback, add error handling to protect observable stream from being cancelled in case of an error
* PM-7235 - Fix tests
* Update libs/common/src/platform/services/user-key-init.service.ts
Co-authored-by: Matt Gibson <mgibson@bitwarden.com>
* Update libs/common/src/platform/services/user-key-init.service.ts
Co-authored-by: Matt Gibson <mgibson@bitwarden.com>
* PM-7235 - AuthSvc - Per PR review, for getAuthStatus, only check user key existence in memory.
* PM-7235 - remove not useful test per PR feedback.
* PM-7235 - Per PR feedback, update cryptoService.hasUserKey to only check memory for the user key.
* PM-7235 - Per PR feedback, move user key init service listener to main.background instead of init service
* PM-7235 - UserKeyInitSvc tests - fix tests to plass
---------
Co-authored-by: Matt Gibson <mgibson@bitwarden.com>
State service held data in an encrypted pair, with potentially both
encrypted and decrypted values. We want the encrypted form for these
disk migrations (decrypted would always be empty on disk anyways).
* add navigation item for integrations and SDKs page
* Initial routing to Integrations & SDKs page
* Initial add of integrations component
* Initial add of SDKs component
* add secret manage integration images
* remove integration & sdk components in favor of a single component
* add integration & integration grid components
* add integrations & sdks
* rename page & components to integration after design discussion
* add external rel attribute for SDK links
* remove ts extension
* refactor: use pseudo element to cover as a link
* refactor: change secondaryText to linkText to align with usage
* update icon for integrations
* add new badge option for integration cards
* hardcode integration/sdk names
* add dark mode images for integrations and sdks
* update integration/sdk card with dark mode image when applicable
* refactor integration types to be an enum
* fix enum typings in integration grid test
---------
Co-authored-by: Robyn MacCallum <robyntmaccallum@gmail.com>
* Resolve updated values from updates
Uses the now returned updated values from cipher service to guarantee-return the updated cipher for CLI edits
* Use updated cipher for creation
* Use updated cipher for editing collections
* Await async methods
Cipher data more closely approximates server responses. TODO: this should really use actual response types
* [PM-5876] Adjust LP Fileless Importer to Suppress Download with DOM Append in Manifest v3
* [PM-5876] Incorporating jest tests for affected logic
* [PM-5876] Fixing jest test that leverages rxjs
* [PM-5876] Updating documentation within BrowserApi.executeScriptInTab
* [PM-5876] Implementing jest tests for the new LP suppress download content scripts
* [PM-5876] Adding a change to webpack to ensure we do not package the mv2 side script for `lp-suppress-import-download.mv2.ts` if building the extension for mv3
* [PM-5876] Implementing changes based on feedback during code review
* [PM-5876] Implementing changes based on feedback during code review
* [PM-5876] Implementing changes based on feedback during code review
* [PM-5876] Implementing changes based on feedback during code review
* [PM-5876] Implementing a configuration to feed the script injection of the Fileless Importer CSV download supression script
* [PM-5744] Adjust injection of `page-script.ts` within FIDO 2 implementation to ensure mv3 compatibility
* [PM-5744] Adjusting structure of manifest.json to clean up implementation and ensure consistency between mv2 and mv3
* [PM-5744] Reverting inclusion of the ConsoleLogService
* [PM-4791] Injected content scripts prevent proper XML file display and disrupt XML responses
* [PM-5744] Adjust FIDO2 content script injection methodology to be compatible with manifest v3
* [PM-5744] Adjusting references to Fido2Service to mirror change of name to Fido2Background
* [PM-5744] Migrating runtime background messages that are associated with Fido2 into Fido2Background
* [PM-5744] Fixing named reference within Fido2Background
* [PM-5744] Migrating all Fido2 messages from the runtime.background.ts script to the fido2.background.ts script
* [PM-5744] Removing unnecessary dependency from runtime background
* [PM-5744] Removing unnecessary dependency from runtime background
* [PM-5744] Reworking how we handle init of Fido2Background
* [PM-5744] Reworking page-script.ts to ensure that it can destory its global values on unload
* [PM-5744] Reworking page-script.ts to ensure that it can destory its global values on unload
* [PM-5744] Implementing separated injection methodology between manifest v2 and v3
* [PM-4791] Adjsuting reference for Fido2 script injection to ensure it only triggers on https protocol types
* [PM-5744] Removing unnecessary message and handling reload of content scripts based on updates on observable
* [PM-5744] Refactoring content-script implementation for fido2
* [PM-5744] Refactoring content-script implementation for fido2
* [PM-5744] Reworking implementation to avoid having multiple contenType checks within the FIDO2 content scripts
* [PM-5744] Re-implementing the messageWithResponse within runtime.background.ts
* [PM-5744] Reverting change to autofill.service.ts
* [PM-5744] Removing return value from runtime.background.ts process message call
* [PM-5744] Reworking how we handle injection of the fido2 page and content script elements
* [PM-5744] Adjusting how we override the navigator.credentials request/reponse structure
* [PM-5744] Working through jest tests for the fido2Background implementation
* [PM-5744] Finalizing jest tests for the Fido2Background implementation
* [PM-5744] Stubbing out jest tests for content-script and page-script
* [PM-5744] Implementing a methodology that allows us to dynamically set and unset content scripts
* [PM-5744] Applying cleanup to page-script.ts to lighten the footprint of the script
* [PM-5744] Further simplifying page-script implementation
* [PM-5744] Reworking Fido2Utils to remove references to the base Utils methods to allow the page-script.ts file to render at a lower file size
* [PM-5744] Reworking Fido2Utils to remove references to the base Utils methods to allow the page-script.ts file to render at a lower file size
* [PM-5744] Implementing the `RegisterContentScriptPolyfill` as a separately compiled file as opposed to an import
* [PM-5744] Implementing methodology to ensure that the RegisterContentScript polyfill is not built in cases where it is not needed
* [PM-5744] Implementing methodology to ensure that the RegisterContentScript polyfill is not built in cases where it is not needed
* [PM-5744] Reverting package-lock.json
* [PM-5744] Implementing a methodology to ensure we can instantiate the RegisterContentScript polyfill in a siloed manner
* [PM-5744] Migrating chrome extension api calls to the BrowserApi class
* [PM-5744] Implementing typing information within the RegisterContentScriptsPolyfill
* [PM-5744] Removing any eslint-disable references within the RegisterContentScriptsPolyfill
* [PM-5744] Refactoring polyfill implementation
* [PM-5744] Refactoring polyfill implementation
* [PM-5744] Fixing an issue where Safari was not resolving the await chrome proxy
* [PM-5744] Fixing jest tests for the page-script append method
* [PM-5744] Fixing an issue found where collection of page details can trigger a context invalidated message when the extension is refreshed
* [PM-5744] Implementing jest tests for the added BrowserApi methods
* [PM-5744] Refactoring Fido2Background implementation
* [PM-5744] Refactoring Fido2Background implementation
* [PM-5744] Adding enums to the implementation for the Fido2 Content Scripts and working through jest tests for the BrowserApi and Fido2Background classes
* [PM-5744] Adding comments to the FIDO2 content-script.ts file
* [PM-5744] Adding jest tests for the Fido2 content-script.ts
* [PM-5744] Adding jest tests for the Fido2 content-script.ts
* [PM-5744] Adding jest tests for the Fido2 page-script.ts
* [PM-5744] Working through an attempt to jest test the page-script.ts file
* [PM-5744] Finalizing jest tests for the page-script.ts implementation
* [PM-5744] Applying stricter type information for the passed params within fido2-testing-utils.ts
* [PM-5744] Adjusting documentation
* [PM-5744] Adjusting implementation of jest tests to use mock proxies
* [PM-5744] Adjusting jest tests to simply implementation
* [PM-5744] Adjust jest tests based on code review feedback
* [PM-5744] Adjust jest tests based on code review feedback
* [PM-5744] Adjust jest tests based on code review feedback
* [PM-5744] Adjusting jest tests to based on feedback
* [PM-5744] Adjusting jest tests to based on feedback
* [PM-5744] Adjusting jest tests to based on feedback
* [PM-5744] Adjusting conditional within page-script.ts
* [PM-5744] Removing unnecessary global reference to the messager
* [PM-5744] Updating jest tests
* [PM-5744] Updating jest tests
* [PM-5744] Updating jest tests
* [PM-5744] Updating jest tests
* [PM-5744] Updating how we export the Fido2Background class
* [PM-5744] Adding duplciate jest tests to fido2-utils.ts to ensure we maintain functionality for utils methods pulled from platform utils
* [PM-5189] Addressing code review feedback
* [PM-5744] Applying code review feedback, reworking obserable subscription within fido2 background
* [PM-5744] Reworking jest tests to avoid mocking `firstValueFrom`
* [PM-5744] Reworking jest tests to avoid usage of private methods
* [PM-5744] Reworking jest tests to avoid usage of private methods
* [PM-5744] Implementing jest tests for the ScriptInjectorService and updating references within the Browser Extension to use the new service
* [PM-5744] Converting ScriptInjectorService to a dependnecy instead of a static class
* [PM-5744] Reworking typing for the ScriptInjectorService
* [PM-5744] Adjusting implementation based on feedback provided during code review
* [PM-5744] Adjusting implementation based on feedback provided during code review
* [PM-5744] Adjusting implementation based on feedback provided during code review
* [PM-5744] Adjusting implementation based on feedback provided during code review
* [PM-5744] Adjusting how the ScriptInjectorService accepts the config to simplify the data structure
* [PM-5744] Updating jest tests to cover edge cases within ScriptInjectorService
* [PM-5744] Updating jest tests to reference the ScriptInjectorService directly rather than the underlying ExecuteScript api call
* [PM-5744] Updating jest tests to reflect provided feedback during code review
* [PM-5744] Updating jest tests to reflect provided feedback during code review
* [PM-5744] Updating documentation based on code review feedback
* [PM-5744] Updating how we extend the abstract ScriptInjectorService
* [PM-5744] Updating reference to the frame property on the ScriptInjectionConfig
* Refactoring
* Hide SM toggle on member invite and default to true for SM standalone org
* changed from hide sm checkbox to default and disable
* Removed errant addition from conflict resolution
* initial commit
* add changes from running prettier
* resolve the linx issue
* resolve the lint issue
* resolving lint error
* correct the redirect issue
* resolve pr commit
* Add a feature flag
* move the new component to adminconsole
* resolve some pr comments
* move the endpoint from ApiService to providerApiService
* move provider endpoints to the provider-api class
* change the header
* resolve some pr comments
* PM-7467 - Login Strategy bug - VaultTimeoutSettings will be undefined before the account is activated unless you pass in user ids to retrieve the data. This resulted in refresh tokens always being set into secure storage regardless of a user's vault timeout settings (logout should translate to memory)
* PM-7467 - TokenSvc - Fix bug in getRefreshToken which would retrieve the user's refresh token from secure storage even if the user had changed their vault timeout setting to log out which moved the refresh token into memory. Includes a migration to remove the no longer required REFRESH_TOKEN_MIGRATED_TO_SECURE_STORAGE state provider flag.
* PM-7467 - Per PR feedback, use IRREVERSIBLE for rollback.
Co-authored-by: Jake Fink <jfink@bitwarden.com>
* PM-7467 - fix tests
* PM-7467 - Fix migrator based on PR feedback.
* PM-7467 - Bump migration version
---------
Co-authored-by: Jake Fink <jfink@bitwarden.com>
Introduces a state manager that buffers data until an observed dependency signals it should
overwrite another state manager with the buffered data. It can be used to implement
migrations of encrypted data, edit-apply loops (such as used for save operations), and to
map between encryption keys/formats.
* OrgSvc - add new observable returning getAll$ method which accepts a required user id
* OrgSvc - make user id optional
* PolicySvc - getAll$ should use the new OrgSvc.getAll$ method so that it doesn't hang if there isn't an active user yet but a user id was passed in.
* Fix policy service tests
* remove active account unlocked from state service
* Remove status from account service `AccountInfo`
* Fixup lingering usages of status
Fixup missed factories
* Fixup account info usage
* fixup CLI build
* Fixup current account type
* Add helper for all auth statuses to auth service
* Fix tests
* Uncomment mistakenly commented code
* Rework logged out account exclusion tests
* Correct test description
* Avoid getters returning observables
* fixup type
* fixed issue with clearing search index state
* Decrease snap description character length to reach 128 limit (#8687)
* clear user index before account is totally cleaned up
* [AC-2436] Fix flashing unassigned items banner (#8689)
* Fix flashing banner for users who shouldn't see it
* Emit the right value the first time
* simplify further
* restore comment
* added logout clear on option
* removed redundant clear index from logout
---------
Co-authored-by: Joseph Flinn <58369717+joseph-flinn@users.noreply.github.com>
Co-authored-by: Thomas Rittson <31796059+eliykat@users.noreply.github.com>
* Boostrap basic banner, show for all admins
* Remove UI banner, fix method calls
* Invert showBanner -> hideBanner
* Add api call
* Minor tweaks and wording
* Change to active user state
* Add tests
* Fix mixed up names
* Simplify logic
* Add feature flag
* Do not clear on logout
* Update apps/web/src/locales/en/messages.json
---------
Co-authored-by: Addison Beck <github@addisonbeck.com>
* refactored injector of services on the browser service module
* refactored the search and popup serach service to use state provider
* renamed back to default
* removed token service that was readded during merge conflict
* Updated search service construction on the cli
* updated to use user key definition
* Reafctored all components that refernce issearchable
* removed commented variable
* added uncommited code to remove dependencies not needed anymore
* added uncommited code to remove dependencies not needed anymore
* create mp and kdf service
* update mp service interface to not rely on active user
* rename observable methods
* update crypto service with new MP service
* add master password service to login strategies
- make fake service for easier testing
- fix crypto service tests
* update auth service and finish strategies
* auth request refactors
* more service refactors and constructor updates
* setMasterKey refactors
* remove master key methods from crypto service
* remove master key and hash from state service
* missed fixes
* create migrations and fix references
* fix master key imports
* default force set password reason to none
* add password reset reason observable factory to service
* remove kdf changes and migrate only disk data
* update migration number
* fix sync service deps
* use disk for force set password state
* fix desktop migration
* fix sso test
* fix tests
* fix more tests
* fix even more tests
* fix even more tests
* fix cli
* remove kdf service abstraction
* add missing deps for browser
* fix merge conflicts
* clear reset password reason on lock or logout
* fix tests
* fix other tests
* add jsdocs to abstraction
* use state provider in crypto service
* inverse master password service factory
* add clearOn to master password service
* add parameter validation to master password service
* add component level userId
* add missed userId
* migrate key hash
* fix login strategy service
* delete crypto master key from account
* migrate master key encrypted user key
* rename key hash to master key hash
* use mp service for getMasterKeyEncryptedUserKey
* fix tests
* fix user key decryption logic
* add clear methods to mp service
* fix circular dep and encryption issue
* fix test
* remove extra account service call
* use EncString in state provider
* fix tests
* return to using encrypted string for serialization
* Use UserKeys in biometric state
* Remove global clear todo. Answer is never
* User UserKeys in crypto state
* Clear userkey on both lock and logout via User Key Definitions
* Use UserKeyDefinitions in environment service
* Rely on userKeyDefinition to clear org keys
* Rely on userKeyDefinition to clear provider keys
* Rely on userKeyDefinition to clear user keys
* Rely on userKeyDefinitions to clear user asym key pair
Remove old compile flags which should no longer be required, and may even cause issues. secretsManager: false hides the app switcher which is now used for more than just secrets manager.
* Replacing state service with state provider
* Documentation indicating the differences between the 2 states used.
* Creating key definition, updating comments, and modifying test cases
* Adding the key definitions tests
* Documenting the observables
* Fixing the test issue with the awaitAsync import
* Removing browser state service stuff for merge fix
* no need to redefine interface members
* Renaming to DefaultBrowserStateService
* Specify user clear events for event upload
* Specify generator clear events
* Specify clear events for user send data
* Specify generic clear on logout for encrypted secret state
* Allow `clearOn`event to be passed into secret state
* Match current data persistence rules
* Clear ui memory on lock + logout
Unit tests trim vertical pipes when appear in the data packer's JSON data, but electron is not as forgiving. It throws errors in this situation. This fixes the error by trimming the pipes before b64 decoding the result.
* create mp and kdf service
* update mp service interface to not rely on active user
* rename observable methods
* update crypto service with new MP service
* add master password service to login strategies
- make fake service for easier testing
- fix crypto service tests
* update auth service and finish strategies
* auth request refactors
* more service refactors and constructor updates
* setMasterKey refactors
* remove master key methods from crypto service
* remove master key and hash from state service
* missed fixes
* create migrations and fix references
* fix master key imports
* default force set password reason to none
* add password reset reason observable factory to service
* remove kdf changes and migrate only disk data
* update migration number
* fix sync service deps
* use disk for force set password state
* fix desktop migration
* fix sso test
* fix tests
* fix more tests
* fix even more tests
* fix even more tests
* fix cli
* remove kdf service abstraction
* add missing deps for browser
* fix merge conflicts
* clear reset password reason on lock or logout
* fix tests
* fix other tests
* add jsdocs to abstraction
* use state provider in crypto service
* inverse master password service factory
* add clearOn to master password service
* add parameter validation to master password service
* add component level userId
* add missed userId
* migrate key hash
* fix login strategy service
* delete crypto master key from account
* migrate master key encrypted user key
* rename key hash to master key hash
* use mp service for getMasterKeyEncryptedUserKey
* fix tests
In https://github.com/bitwarden/clients/pull/8133 the premium state changed to
be derived from observables, which means we can get rid of the `purchasePremium`
messages that are sent and instead rely directly on the observable to distribute
the state.
* introduce legacy generators
* introduce generator navigation service
* Introduce default options. These accept a userId so that they can be policy-defined
* replace `GeneratorOptions` with backwards compatible `GeneratorNavigation`
* Adding the key definitions and tests and initial send state service
* Adding the abstraction and implementing
* Planning comments
* Everything but fixing the send tests
* Moving send tests over to the state provider
* jslib needed name refactor
* removing get/set encrypted sends from web vault state service
* browser send state service factory
* Fixing conflicts
* Removing send service from services module and fixing send service observable
* Commenting the migrator to be clear on why only encrypted
* No need for service factories in browser
* browser send service is no longer needed
* Key def test cases to use toStrictEqual
* Running prettier
* Creating send test data to avoid code duplication
* Adding state provider and account service to send in cli
* Fixing the send service test cases
* Fixing state definition keys
* Moving to observables and implementing encryption service
* Fixing key def tests
* The cli was using the deprecated get method
* The observables init doesn't need to happen in constructor
* Missed commented out code
* If enc key is null get user key
* Service factory fix
* implementing the clients changes
* resolve pr comments on message.json
* moved the method to billing-api.service
* move the request and response files to billing folder
* remove the adding existing orgs
* resolve the routing issue
* resolving the pr comments
* code owner changes
* fix the assignedseat
* resolve the warning message
* resolve the error on update
* passing the right id
* resolve the unassign value
* removed unused logservice
* Adding the loader on submit button
* PM-5434 Initial work on migration
* PM-5434 Migration and tests
* PM-5434 Remove unnecessary comments
* PM-5434 Add unit tests
* PM-5434 Reverted last changes
* PM-5434 Added unit test for deserialize
* PM-5434 Minor changes
* PM-5434 Fix pr comments
* PM-5268 - Add DEVICE_TRUST_DISK to state definitions
* PM-5268 - DeviceTrustCryptoService - Get most of state provider refactor done - WIP - commented out stuff for now.
* PM-5268 - DeviceTrustCryptoServiceStateProviderMigrator - WIP - got first draft of migrator in place and working on tests. Rollback tests are failing for some reason TBD.
* PM-5268 - more WIP on device trust crypto service migrator tests
* PM-5268 - DeviceTrustCryptoServiceStateProviderMigrator - Refactor based on call with platform
* PM-5268 - DeviceTrustCryptoServiceStateProviderMigrator - tests passing
* PM-5268 - Update DeviceTrustCryptoService to convert over to state providers + update all service instantiations / dependencies to ensure state provider is passed in or injected.
* PM-5268 - Register new migration
* PM-5268 - Temporarily remove device trust crypto service from migrator to ease merge conflicts as there are 6 more migrators before I can apply mine in main.
* PM-5268 - Update migration numbers of DeviceTrustCryptoServiceStateProviderMigrator based on latest migrations from main.
* PM-5268 - (1) Export new KeyDefinitions from DeviceTrustCryptoService for use in test suite (2) Update DeviceTrustCryptoService test file to use state provider.
* PM-5268 - Fix DeviceTrustCryptoServiceStateProviderMigrator tests to use proper versions
* PM-5268 - Actually fix all instances of DeviceTrustCryptoServiceStateProviderMigrator test failures
* PM-5268 - Clean up state service, account, and login strategy of all migrated references
* PM-5268 - Account - finish cleaning up device key
* PM-5268 - StateService - clean up last reference to device key
* PM-5268 - Remove even more device key refs. *facepalm*
* PM-5268 - Finish resolving merge conflicts by incrementing migration version from 22 to 23
* PM-5268 - bump migration versions
* PM-5268 - DeviceTrustCryptoService - Implement secure storage functionality for getDeviceKey and setDeviceKey (to achieve feature parity with the ElectronStateService implementation prior to the state provider migration). Tests to follow shortly.
* PM-5268 - DeviceTrustCryptoService tests - getDeviceKey now tested with all new secure storage scenarios. SetDeviceKey tests to follow.
* PM-5268 - DeviceTrustCryptoService tests - test all setDeviceKey scenarios with state provider & secure storage
* PM-5268 - Update DeviceTrustCryptoService deps to actually use secure storage svc on platforms that support it.
* PM-5268 - Bump migration version due to merge conflicts.
* PM-5268 - Bump migration version
* PM-5268 - tweak jsdocs to be single line per PR feedback
* PM-5268 - DeviceTrustCryptoSvc - improve debuggability.
* PM-5268 - Remove state service as a dependency on the device trust crypto service (woo!)
* PM-5268 - Update migration test json to correctly reflect reality.
* PM-5268 - DeviceTrustCryptoSvc - getDeviceKey - add throw error for active user id missing.
* PM-5268 - Fix tests
* PM-5268 - WIP start on adding user id to every method on device trust crypto service.
* PM-5268 - Update lock comp dependencies across clients
* PM-5268 - Update login via auth request deps across clients to add acct service.
* PM-5268 - UserKeyRotationSvc - add acct service to get active acct id for call to rotateDevicesTrust and then update tests.
* PM-5268 - WIP on trying to fix device trust crypto svc tests.
* PM-5268 - More WIP device trust crypto svc tests passing
* PM-5268 - Device Trust crypto service - get all tests passing
* PM-5268 - DeviceTrustCryptoService.getDeviceKey - fix secure storage b64 to symmetric crypto key conversion
* PM-5268 - Add more tests and update test names
* PM-5268 - rename state to indicate it was disk local
* PM-5268 - DeviceTrustCryptoService - save symmetric key in JSON format
* PM-5268 - Fix lock comp tests by adding acct service dep
* PM-5268 - Update set device key tests to pass
* PM-5268 - Bump migration versions again
* PM-5268 - Fix user key rotation svc tests
* PM-5268 - Update web jest config to allow use of common spec in user-key-rotation-svc tests
* PM-5268 - Bump migration version
* PM-5268 - Per PR feedback, save off user id
* PM-5268 - bump migration version
* PM-5268 - Per PR feedback, remove unnecessary await.
* PM-5268 - Bump migration verson
* introduce `GeneratorHistoryService` abstraction
* implement generator history service with `LocalGeneratorHistoryService`
* cache decrypted data using `ReplaySubject` instead of `DerivedState`
* move Jsonification from `DataPacker` to `SecretClassifier` because the classifier
is the only component that has full type information. The data packer still handles
stringification.
We currently use a callback syntax for abstract services. This syntax isn't completely strict compliant and will fail the strictPropertyInitialization check. We also currently don't get any compile time errors if we forget to implement a function.
To that end this PR updates all platform owned services to use the appropriate abstract keyword for non implemented functions. I also updated the fields to be actual functions and not properties.
* PM-7092 - Fix CLI login via API key not working (it apparently receives an undefined refresh token which was rejected by setTokens)
* PM-7092 - Fix base login strategy tests
* PM-7092 - per discucssion with jake, refactor setTokens to accept optional refresh token instead of exposing setRefreshToken as public.
* Create tracker that can await until expected observables are received.
* Test dates are almost equal
* Remove unused class method
* Allow for updating active account in accout service fake
* Correct observable tracker behavior
Clarify documentation
* Transition config service to state provider
Updates the config fetching behavior to be lazy and ensure that any emitted value has been updated if older than a configurable value (statically compiled).
If desired, config fetching can be ensured fresh through an async.
* Update calls to config service in DI and bootstrapping
* Migrate account server configs
* Fix global config fetching
* Test migration rollback
* Adhere to implementation naming convention
* Adhere to abstract class naming convention
* Complete config abstraction rename
* Remove unnecessary cli config service
* Fix builds
* Validate observable does not complete
* Use token service to determine authed or unauthed config pull
* Remove superfluous factory config
* Name describe blocks after the thing they test
* Remove implementation documentation
Unfortunately the experience when linking to external documentation is quite poor. Instead of following the link and retrieving docs, you get a link that can be clicked to take you out of context to the docs. No link _does_ retrieve docs, but lacks indication in the implementation that documentation exists at all.
On the balance, removing the link is the better experience.
* Fix storybook
* PM-5263 - TokenSvc - WIP on access token secure storage refactor
* PM-5263 - Add key generation svc to token svc.
* PM-5263 - TokenSvc - more progress on encrypt access token work.
* PM-5263 - TokenSvc TODO cleanup
* PM-5263 - TokenSvc - rename
* PM-5263 - TokenSvc - decryptAccess token must return null as that is a valid case.
* PM-5263 - Add EncryptSvc dep to TokenSvc
* PM-5263 - Add secure storage to token service
* PM-5263 - TokenSvc - (1) Finish implementing accessTokenKey stored in secure storage + encrypted access token stored on disk (2) Remove no longer necessary migration flag as the presence of the accessTokenKey now serves the same purpose.
Co-authored-by: Jake Fink <jfink@bitwarden.com>
* PM-5263 - TokenSvc - (1) Tweak return structure of decryptAccessToken to be more debuggable (2) Add TODO to add more error handling.
* PM-5263 - TODO: update tests
* PM-5263 - add temp logs
* PM-5263 - TokenSvc - remove logs now that I don't need them.
* fix tests for access token
* PM-5263 - TokenSvc test cleanup - small tweaks / cleanup
* PM-5263 - TokenService - per PR feedback from Justin - add error message to error message if possible.
Co-authored-by: Justin Baur <19896123+justindbaur@users.noreply.github.com>
---------
Co-authored-by: Jake Fink <jfink@bitwarden.com>
Co-authored-by: Justin Baur <19896123+justindbaur@users.noreply.github.com>
* Fallback to Emitting `null` When No Active User
* Fix Tests
* Update Test Names to Follow Convention
Co-authored-by: Andreas Coroiu <acoroiu@bitwarden.com>
* Fix CLI Build
---------
Co-authored-by: Andreas Coroiu <acoroiu@bitwarden.com>
* PM-5263 - Update token svc state provider migration to avoid persisting secrets that shouldn't exist in local storage to state provider local storage using new migration helper type.
* PM-5263 - TokenSvc migration - tests TODO
* write tests for migration
* fix tests
---------
Co-authored-by: Jake Fink <jfink@bitwarden.com>
This enables it being shown as anm option with the language selector on the individual clients
Co-authored-by: Daniel James Smith <djsmith85@users.noreply.github.com>
* updated vault filter service to make use of collection service
* removed fix me
* reverted to use reload collections on org vault as collection admin service does not support state management yet
* fixed statement
* WIP: First Try at making DesktopSettingsService
Does not work, migrations are ran in renderer but the values are read in main.
* Update window$ retrieval
* Fix DesktopSettings
* Rename Migration
* Add Migration to Builder
* Cleanup
* Update Comments
* Update `migrate.ts`
* Catch Unawaited Promises
* Remove Comments
* Update Tests
* Rename Migration
* Add `alwaysOnTop`
* Make `init` async
* Fix Desktop Build
* Fix error on close due to context differences in background
Desktop background does not have active user information. Also, we want to delete _all_ prompt cancelled data, not just that for the active user. Storing this on global and manipulating observables to active achieves this without needing any user information in the background.
* Remove potentially orphaned data
* Throw nice error if prompt cancelled used without active user
* Register migration
* split prompt cancelled reset to user-specific and global
Refactor environment service to emit a single observable. This required significant changes to how the environment service behaves and tackles much of the tech debt planned for it.
* collections component shows disable readOnly collections in the org vault edit collections modal, and will check if org allows Owners up manage all collections in ciphers
Added a toggle for disabling/enabling hardware acceleration on Desktop client.
Resolves#2615
---------
Co-authored-by: Hinton <hinton@users.noreply.github.com>
* create new user decryption options service
* rename new service to user decryption options
* add hasMasterPassword to user decryption options service
* migrate device trust service to new user decryption options service
* add migration for user-decryption-options
* migrate sync service and calls to trust-device-service
* rename abstraction file
* migrate two factor component
* migrate two factor spec
* migrate sso component
* migrate set-password component
* migrate base login decryption component
* migrate organization options component
* fix component imports
* add missing imports
- remove state service calls
- add update user decryption options method
* remove acct decryption options from account
* lint
* fix tests and linting
* fix browser
* fix desktop
* add user decryption options service to cli
* remove default value from migration
* bump migration number
* fix merge conflict
* fix vault timeout settings
* fix cli
* more fixes
* add user decryption options service to deps of vault timeout settings service
* update login strategy service with user decryption options
* remove early return from sync bandaid for user decryption options
* move user decryption options service to lib/auth
* move user decryption options to libs/auth
* fix reference
* fix browser
* check user decryption options after 2fa check
* update migration and revert tsconfig changes
* add more documentation
* clear user decryption options on logout
* fix tests by creating helper for user decryption options
* fix tests
* pr feedback
* fix factory
* update migration
* add tests
* update missed migration num in test
* Fix a typo in the `StateDefinition` description
* Introduce `OrganizationManagementPreferencesService`
* Declare `OrganizationManagementPreferencesService` in DI
* Update `autoConfirmFingerPrints` logic in emergency access files
* Update `autoConfirmFingerPrints` logic in `people` files
* Remove `autoConfirmFingerPrints` from `StateService` and `Account`
* Migrate existing client data for `autoConfirmFingerPrints`
* Update apps/web/src/app/admin-console/organizations/manage/user-confirm.component.ts
Co-authored-by: Matt Gibson <mgibson@bitwarden.com>
* Update apps/web/src/app/admin-console/organizations/manage/user-confirm.component.ts
Co-authored-by: Matt Gibson <mgibson@bitwarden.com>
* Use `set` instead of `update` for function names
---------
Co-authored-by: Matt Gibson <mgibson@bitwarden.com>
* Fix minSpecial for pwd generation being set to 1 instead of zero
* Use less magic numbers
---------
Co-authored-by: Daniel James Smith <djsmith85@users.noreply.github.com>
* add showFavicons to domain settings
* replace usages of disableFavicon with showFavicons via the domain settings service and remove/replace settings service
* create migration for disableFavicon
* cleanup
* event upload and collection state provider migration
* cipher can be null when exporting org
* Addressing pr comments. Casting UserId from calling methods
* fixing userAuth observable in event collection service
* Adding more documentation for the changes.
* cli needed state provider and account services added
* Addressing pr comments on modifying should update
* No need to auth on event upload
* Simplifying the takeEvents for pulling user events
* Reverting shouldUpdate to previous state
* Removing redundant comment
* Removing account service for event upload
* Modifying the shouldUpdate to evaluate the logic outside of the observable
* Adding back in the auth for event upload service and adding event upload to the cli logout method
* Adding the browser service factories
* Updating the browser services away from get background
* Removing event collect and upload services from browser services
* Removing the audit service import
* Adding the event collection migration and migration test
* Event collection state needs to be stored on disk
* removing event collection from state service and abstraction
* removing event collection from the account data
* Saving the migrations themselves
* Added billing account profile state service
* Update usages after removing state service functions
* Added migrator
* Updated bw.ts and main.background.ts
* Removed comment
* Updated state service dependencies to include billing service
* Added missing mv3 factory and updated MainContextMenuHandler
* updated autofill service and tests
* Updated the remaining extensions usages
* Updated desktop
* Removed subjects where they weren't needed
* Refactored billing service to have a single setter to avoid unecessary emissions
* Refactored has premium guard to return an observable
* Renamed services to match ADR
f633f2cdd8/docs/architecture/clients/presentation/angular.md (abstract--default-implementations)
* Updated property names to be a smidgen more descriptive and added jsdocs
* Updated setting of canAccessPremium to automatically update when the underlying observable emits
* Fixed build error after merge conflicts
* Another build error from conflict
* Removed autofill unit test changes from conflict
* Updated login strategy to not set premium field using state service
* Updated CLI to use billing state provider
* Shortened names a bit
* Fixed build
* PM-5263 - Token Service state migration - (1) Got key and state definitions setup (2) Ported over core state service getTimeoutBasedStorageOptions method logic into local determineStorageLocation method (3) Updated majority of methods to use state provider state
* PM-5263 - StateSvc - add TODO to remove timeoutBasedStorageOptions + other state methods after migration code complete.
* PM-5263 - TokenSvc - ClearToken method - (1) Update signature to remove user id as it wasn't used and it simplifies the new state provider implementation (2) Convert away from state svc to state provider state.
* PM-5263 - TokenService - update deps - WIP on circular dep issues.
* PM-5263 - To resolve circular dep issues between VaultTimeoutSettingsSvc and TokenService: (1) For writes, require callers to pass in vault timeout data (2) For reads, we can just check both locations. This approach has 1 less state call than the previous implementation and is safe as long as the clear logic properly works and is executed anytime a user changes their vault timeout action (lock or log out) & vault timeout (numeric value)
* PM-5263 - VaultTimeoutSettingsSvc - Set token calls now updated to include vault timeout info.
* PM-5263 - Update API Service - add state service and look up vault timeout details and pass to token service when setting token info.
* PM-5263 - TokenService - update service dependencies.
* PM-5263 - TokenService - Add new getAccessTokenByUserId method for state service use case.
* PM-5263 - StateSvc - remove migrated methods and try to replace all usages of getAccessToken. WIP
* PM-5263 - TokenSvc Migration - start on migrator
* PM-5263 - (1) TokenSvc - Build new clearAccessTokenByUserId which is required by state service (2) TokenSvc - Update getToken to take an optional userId to handle another state service case (3) Add some documentation to TokenSvc abstraction.
* PM-5263 - StateService - finish updating all calls within the state service which accessed token service state directly with calls to the new token service methods instead.
* PM-5263 - TokenSvc Abstraction - Add more docs
* PM-5263 - TokenSvc abstraction - more doc tweaks
* PM-5263 - Web state service - add new token service dependency.
* PM-5263 - User API Key Login Strategy - Update to pull vault timeout action and vault timeout from state service in order to pass to new token service endpoints for setting API key client id and secret.
* PM-5263 - (1) Remove TokenSvc owned state from account (2) StateSvc - remove account scaffold logic for clearing removed account data. The same functionality will exist in the state provider framework via lifecycle hooks cleaning up this data and users getting initialized with null data by default.
* PM-5263 - Add token service dependency to state service (WIP - desktop deps not working)
* PM-5263 - Update services module on desktop and browser to add token svc dependency
* PM-5263 - API service factory - add state service factory dependency that I missed initially to get browser building.
* PM-5263 - TokenSvc - getToken/setToken/decodeToken --> getAccessToken/setAccessToken/decodeAccessToken
* PM-5263 - TokenSvc State Provider Migrator - WIP - update expected acct type to match actual account
* PM-5263 - TokenService - clearToken renamed to clearTokens
* PM-5263 - CLI - NodeApiService - add state service dep to get CLI building.
* PM-5263 - StateDefinitions - use unique state definition names
* PM-5263 - StateSvc - remove getTimeoutBasedStorageOptions as no longer used.
* PM-5263 - TokenSvc - Add TODO for figuring out how to store tokens in secure storage.
* PM-5263 - StateSvc - remove get/set 2FA token - references migrated later.
* PM-5263 - TODO: figure out if using same key definition names is an issue
* PM-5263 - TokenServiceStateProviderMigrator written
* PM-5263 - TokenServiceStateProviderMigrator - (1) Don't update legacy account if we only added a new state in state provider for 2FA token (2) Use for loop for easier debugging
* PM-5263 - TokenServiceStateProviderMigrator test - WIP - migration testing mostly complete and passing. Rollback logic TODO.
* PM-5263 - TokenServiceStateProviderMigrator - Add rollback logic to restore 2FA token from users to global.
* PM-5263 - TokenServiceStateProviderMigrator - Refactor rollback to only set account once as not necessary to set it every time.
* PM-5263 - TokenServiceStateProviderMigrator tests - test all rollback scenarios
* PM-5263 - Remove TODO as don't need unique key def names as long as state def keys are unique.
* PM-5263 - TokenSvc - update clearAccessTokenByUserId to use proper state provider helper method to set state.
* PM-5263 - Revert accidentally committing settings.json changes.
* PM-5263 - TokenSvc - update all 2FA token methods to require email so we can user specifically scope 2FA tokens while still storing them in global storage.
* PM-5263 - Update all token service 2FA set / get / clear methods to pass in email.
* PM-5263 - JslibServices module - add missed login service to login strategy svc deps.
* PM-5263 - VaultTimeoutSettingsService - setVaultTimeoutOptions - rename token to accesToken for clarity.
* PM-5263 - (1) TokenSvc - remove getAccessTokenByUserId and force consumers to use getAccessToken w/ optional user id to keep interface small (2) TokenSvc - attempt to implement secure storage on platforms that support it for access & refresh token storage (3) StateSvc - replace usage of getAccessTokenByUserId with getAccessToken
* PM-5263 - TokenSvc - add platform utils and secure storage svc deps
* PM-5263 - TODO: figure out what to do with broken migration
* PM-5263 - TODO: update tests in light of latest 2FA token changes.
* PM-5263 - TokenSvc - clean up TODO
* PM-5263 - We should have tests for the token service.
* PM-5263 - TokenSvc - setAccessToken - If platform supports secure storage and we are saving an access token, remove the access token from memory and disk to fully migrate to secure storage.
* PM-5263 - TokenSvc - getAccessToken - Update logic to look at memory and disk first always and secure storage last to support the secure storage migration
* PM-5263 - TokenSvc - setAccesToken - if user id null on a secure storage supporting platform, throw error.
* PM-5263 - TokenService - (1) Refresh token now stored in secure storage (2) Refresh token set now private as we require a user id to store it in secure storage and we can use the setTokens method to enforce always setting the access token and refresh token together in order to extract a user id from the refresh token. (3) setTokens clientIdClientSecret param now optional
* PM-5263 - TokenServiceStateProviderMigrator - update migration to take global but user scoped 2FA token storage changes into account.
* PM-5263 - Remove old migration as it references state we are removing. Bump min version.
Co-authored-by: Matt Gibson <git@mgibson.dev>
* PM-5263 - TokenService - 2FA token methods now backed by global state record which maps email to individual tokens.
* PM-5263 - WIP on Token Svc migrator and test updates based on new 2FA token storage changes.
* PM-5263 - TokenSvc - (1) Add jira tickets to clean up state migration (2) Add state to track secure storage migration to improve # of reads to get data
* PM-5263 - StateDef - consolidate name of token domain state defs per feedback from Justin + update migration tests
* PM-5263 - TokenSvc - fix error message and add TODO
* PM-5263 - Update token service migration + tests to pass after all 2FA token changes.
* PM-5263 - Fix all login strategy tests which were failing due to token state provider changes + the addition of the loginService as a dependency in the base login strategy.
* PM-5263 - Register TokenService state provider migration with migrator
* PM-5263 - TokenSvc state migration - set tokens after initializing account
* PM-5263 - TokenService changes - WIP - convert from ActiveUserStateProvider to just SingleUserStateProvider to avoid future circ dependency issues.
Co-authored-by: Jake Fink <jlf0dev@users.noreply.github.com>
* PM-5263 - TokenSvc - create getSecureStorageOptions for centralizing all logic for getting data out of SecureStorage.
* PM-5263 - TokenSvc - (1) Refactor determineStorageLocation to also determine secure storage - created a TokenStorageLocation string enum to remove magic strings (2) Refactor setAccessToken to use switch (3) Refactor clearAccessTokenByUserId to clear all locations and not early return on secure storage b/c we only use secure storage if disk is the location but I don't want to require vault timeout data for this method.
* PM-5263 - TokenSvc - getDataFromSecureStorage - Refactor to be more generic for easier re-use
* PM-5263 - TokenSvc - Convert refresh token methods to use single user state and require user ids
* PM-5263 - VaultTimeoutSettingsSvc - get user id and pass to access and refresh token methods.
* PM-5263 - TokenSvc - refactor save secure storage logic into private helper.
* PM-5263 - Base Login Strategy - per discussion with Justin, move save of tokens to before account initialization as we can always derive the user id from the access token. This will ensure that the account is initialized with the proper authN status.
* PM-5263 - TokenSvc - latest refactor - update all methods to accept optional userId now as we can read active user id from global state provider without using activeUserStateProvider (thus, avoiding a circular dep and having to have every method accept in a mandatory user id).
* PM-5263 - VaultTimeoutSettingsService - remove user id from token calls
* PM-5263 - TokenSvc - update all places we instantiate token service to properly pass in new deps.
* PM-5263 - TokenSvc migration is now 27th instead of 23rd.
* PM-5263 - Browser - MainContextMenuHandler - Update service options to include PlatformUtilsServiceInitOptions as the TokenService requires that and the TokenService is now injected on the StateService
* PM-5263 - TokenSvc migration test - update rollback tests to start with correct current version
* PM-5263 - Create token service test file - WIP
* PM-5263 - TokenSvc - tests WIP - instantiates working.
* PM-5263 - TokenSvc - set2FAToken - use null coalesce to ensure record is instantiated for new users before setting data on it.
* PM-5263 - TokenService tests - WIP - 2FA token tests.
* PM-5263 - Worked with Justin to resolve desktop circular dependency issue by adding SUPPORTS_SECURE_STORAGE injection token instead of injecting PlatformUtilsService directly into TokenService.
Co-authored-by: Justin Baur <19896123+justindbaur@users.noreply.github.com>
* PM-5263 - TokenSvc tests - WIP - (1) Update TokenSvc instantiation to use new supportsSecureStorage (2) Test TwoFactorToken methods
* PM-5263 - Fix SUPPORTS_SECURE_STORAGE injection token to properly call supportsSecureStorage message
* PM-5263 - Token state testing
* PM-5263 - TokenState fix name of describe
* PM-5263 - TokenService - export TokenStorageLocation for use in tests.
* PM-5263 - TokenSvc Tests WIP
* PM-5263 - TokenSvc tests - access token logic mostly completed.
* PM-5263 - TokenSvc Tests - more WIP - finish testing access token methods.
* PM-5263 - TokenSvc WIP - another clear access token test.
* PM-5263 - TokenSvc tests - WIP - SetTokens tested.
* PM-5263 - Tweak test name
* PM-5263 - TokenSvc tests - remove unnecessary describe around 2FA token methods.
* PM-5263 - TokenSvc.clearAccessTokenByUserId renamed to just clearAccessToken
* PM-5263 - TokenSvc - refactor clearTokens logic and implement individual clear logic which doesn't require vault timeout setting information.
* PM-5263 - TokenSvc - Replace all places we have vaultTimeout: number with vaultTimeout: number | null to be accurate.
* PM-5263 - TokenSvc.clearTokens - add check for user id; throw if not found
* PM-5263 - TokenService - test clearTokens
* PM-5263 - TokenSvc Tests - setRefreshToken tested
* PM-5263 - TokenSvc tests - getRefreshToken tested + added a new getAccessToken test
* PM-5263 - TokenSvc - ClearRefreshToken scenarios tested.
* PM-5263 - TokenSvc.clearRefreshToken tests - fix copy pasta
* PM-5263 - TokenSvc tests - (1) Fix mistakes in refresh token testing (2) Test setClientId for all scenarios
* PM-5263 - TokenSvc tests - (1) Add some getClientId tests (2) clarify lack of awaits
* PM-5263 - TokenSvc Tests - WIP - getClientId && clearClientId
* PM-5263 - TokenService - getClientSecret - fix error message
* PM-5263 - TokenService tests - test all client secret methods
* PM-5263 - Update TokenSvc migration to 30th migration
* PM-5263 - TokenService - update all tests to initialize data to undefined now that fake state provider supports faking data based on specific key definitions.
* PM-5263 - (1) TokenSvc.decodeAccessToken - update static method's error handling (2) TokenSvc tests - test all decodeAccessToken scenarios
* PM-5263 - TokenSvc - (1) Add DecodedAccessToken type (2) Refactor getTokenExpirationDate logic to use new type and make proper type checks for numbers for exp claim values.
* PM-5263 - TokenSvc tests - test getTokenExpirationDate method.
* PM-5263 - TokenSvc - (1) Update DecodedAccessToken docs (2) Tweak naming in tokenSecondsRemaining
* PM-5263 - TokenSvc abstraction - add jsdoc for tokenSecondsRemaining
* PM-5263 - TokenSvc tests - test tokenSecondsRemaining
* PM-5263 - TokenSvc - DecodedAccessToken type - update sstamp info
* PM-5263 - TokenService - fix flaky tokenSecondsRemaining tests by locking time
* PM-5263 - TokenSvc Tests - Test tokenNeedsRefresh
* PM-5263 - (1) TokenSvc - Refactor getUserId to add extra safety (2) TokenSvc tests - test getUserId
* PM-5263 - (1) TokenSvc - refactor getUserIdFromAccessToken to handle decoding errors (2) TokenSvc tests - test getUserIdFromAccessToken
* PM-5263 - (1) TokenSvc - Refactor getEmail to handle decoding errors + check for specific, expected type (2) TokenSvc tests - test getEmail
* PM-5263 - TokenSvc tests - clean up comment
* PM-5263 - (1) TokenSvc - getEmailVerified - refactor (2) TokenSvc tests - add getEmailVerified tests
* PM-5263 - (1) TokenSvc - refactor getName (2) TokenSvc tests - test getName
* PM-5263 - (1) TokenSvc - refactor getIssuer (2) TokenSvc tests - test getIssuer
* PM-5263 - TokenSvc - remove unnecessary "as type" statements now that we have a decoded access token type
* PM-5263 - (1) TokenSvc - refactor getIsExternal (2) TokenSvc Tests - test getIsExternal
* PM-5263 - TokenSvc abstraction - tune up rest of docs.
* PM-5263 - TokenSvc - clean up promise<any> and replace with promise<void>
* PM-5263 - TokenSvc abstraction - more docs.
* PM-5263 - Clean up TODO as I've tested every method in token svc.
* PM-5263 - (1) Extract JWT decode logic into auth owned utility function out of the token service (2) Update TokenService decode logic to use new utility function (3) Update LastPassDirectImportService + vault.ts to use new utility function and remove token service dependency. (4) Update tests + migrate tests to new utility test file.
* PM-5263 - Rename decodeJwtTokenToJson to decode-jwt-token-to-json to meet lint rules excluding capitals
* PM-5263 - TokenSvc + tests - fix all get methods to return undefined like they did before instead of throwing an error if a user id isn't provided.
* PM-5263 - Services.module - add missing token service dep
* PM-5263 - Update token svc migrations to be 32nd migration
* PM-5263 - Popup - Services.module - Remove token service as it no longer requires a background service due to the migration to state provider. The service definition in jslib-services module is enough.
* PM-5263 - BaseLoginStrategy - Extract email out of getTwoFactorToken method call for easier debugging.
* PM-5263 - Login Comp - Set email into memory on login service so that base login strategy can access user email for looking up 2FA token stored in global state.
* PM-5263 - (1) LoginComp - remove loginSvc.setEmail call as no longer necessary + introduced issues w/ popup and background in browser extension (2) AuthReq & Password login strategies now just pass in email to buildTwoFactor method.
* PM-5263 - SsoLoginSvc + abstraction - Add key definition and get/set methods for saving user email in session storage so it persists across the SSO redirect.
* PM-5263 - Base Login Strategy - BuildTwoFactor - only try to get 2FA token if we have an email to look up their token
* PM-5263 - Remove LoginService dependency from LoginStrategyService
* PM-5263 - (1) Save off user email when they click enterprise SSO on all clients in login comp (2) Retrieve it and pass it into login strategy in SSO comp
* PM-5263 - (1) TokenSvc - update 2FA token methods to be more safe in case user removes record from local storage (2) Add test cases + missing clearTwoFactorToken tests
* PM-5263 - Browser SSO login - save user email for browser SSO process
* PM-5263 - Finish removing login service from login strategy tests.
* PM-5263 - More removals of the login service from the login strategy tests.
* PM-5263 - Main.ts - platformUtilsSvc no longer used in TokenSvc so remove it from desktop main.ts
* PM-5263 - Fix failing login strategy service tests
* PM-5263 - Bump token svc migration values to migration 35 after merging in main
* PM-5263 - Bump token svc migration version
* PM-5263 - TokenService.clearTwoFactorToken - use delete instead of setting values to null per discussion with Justin
Co-authored-by: Justin Baur <19896123+justindbaur@users.noreply.github.com>
* PM-5263 - TokenSvc + decode JWT token tests - anonymize my information
Co-authored-by: Justin Baur <19896123+justindbaur@users.noreply.github.com>
* PM-5263 - TokenSvc tests - update clear token tests based on actual deletion
* PM-5263 - Add docs per PR feedback
* PM-5263 - (1) Move ownership of clearing two factor token on rejection from server to base login strategy (2) Each login strategy that supports remember 2FA logic now persists user entered email in its data (3) Base login strategy processTwoFactorResponse now clears 2FA token (4) Updated base login strategy tests to affirm the clearing of the 2FA token
* Update libs/auth/src/common/login-strategies/login.strategy.ts
Co-authored-by: Jake Fink <jfink@bitwarden.com>
* Update libs/auth/src/common/login-strategies/password-login.strategy.ts
Co-authored-by: Jake Fink <jfink@bitwarden.com>
* PM-5263 - Login Strategy - per PR feedback, add jsdoc comments to each method I've touched for this PR.
* PM-5263 - (1) TokenSvc - adjust setTokens, setAccessToken, setRefreshToken, and clearRefreshToken based on PR feedback to remove optional user ids where possible and improve public interface (2) TokenSvc Abstraction - update docs and abstractions based on removed user ids and changed logic (3) TokenSvc tests - update tests to add new test cases, remove no longer relevant ones, and update test names.
* PM-5263 - Bump migrations again
---------
Co-authored-by: Matt Gibson <git@mgibson.dev>
Co-authored-by: Jake Fink <jlf0dev@users.noreply.github.com>
Co-authored-by: Justin Baur <19896123+justindbaur@users.noreply.github.com>
Co-authored-by: Jake Fink <jfink@bitwarden.com>
* Fix error on close due to context differences in background
Desktop background does not have active user information. Also, we want to delete _all_ prompt cancelled data, not just that for the active user. Storing this on global and manipulating observables to active achieves this without needing any user information in the background.
* Remove potentially orphaned data
* Throw nice error if prompt cancelled used without active user
* Register migration
* If editing your own member modal, you cannot add new collections or groups
* Update forms to prevent this
* Add helper text
* Delete unused api method
* added showCards and Identities to vault settings and then added migration file
* added migration file and removed fields from domain
* fixed merge conflicts
* Require init in i18n service.
this is needed to load translations and set translation locale
* No longer need to cast i18n
* Expose user preferred locale in i18nService
This is for correctly displaying `default` when no locale has been set in preferences components. The `locale$` observable should always resolve to the currently locale currently being translated to.
* create domain settings state provider
* replace callsites for defaultUriMatch and neverDomains with DomainSettingsService equivalents
* replace callsites for equivalentDomains with DomainSettingsService equivalents and clean up unused AccountSettingsSettings
* add migrations for domain settings state
* do not use enum for URI match strategy constants and types
* add getUrlEquivalentDomains test
* PR suggestions/cleanup
* refactor getUrlEquivalentDomains to return an observable
Co-authored-by: Justin Baur <19896123+justindbaur@users.noreply.github.com>
Co-authored-by: ✨ Audrey ✨ <ajensen@bitwarden.com>
* update tests
* add UriMatchStrategy docs notes
* service class renames
* use service abstraction at callsites previously using service class directly
---------
Co-authored-by: Justin Baur <19896123+justindbaur@users.noreply.github.com>
Co-authored-by: ✨ Audrey ✨ <ajensen@bitwarden.com>
* add key definition and StrategyData classes
* use state providers for login strategies
* serialize login data for cache
* use state providers for auth request notification
* fix registrations
* add docs to abstraction
* fix sso strategy
* fix password login strategy tests
* fix base login strategy tests
* fix user api login strategy tests
* PM-3339 add tests for admin auth request in sso strategy
* fix auth request login strategy tests
* fix webauthn login strategy tests
* create login strategy state
* use barrel file in common/spec
* test login strategy cache deserialization
* use global state provider
* add test for login strategy service
* fix auth request storage
* add recursive prototype checking and json deserializers to nested objects
* fix CLI
* Create wrapper for login strategy cache
* use behavior subjects in strategies instead of global state
* rename userApi to userApiKey
* pr feedback
* fix tests
* fix deserialization tests
* fix tests
---------
Co-authored-by: rr-bw <102181210+rr-bw@users.noreply.github.com>
* Improve state documentation
* Add namespace for application id
* Spec out behavior of app id service
* Use state providers for app ids
* Migrate app Id
* Add reactive interface
* Use state provider to store preferred language
* migrate preferred language
* Use new i18n provider to get LOCAL_ID
* Fix preloaded english i18n
This is a mock service that forces english translations, it doesn't need the i18n interface that allows changing of locales.
* PR improvements
* Fixup merge
* add enableContextMenu to autofillSettings and migrate disableContextMenuItem
* replace usages of disableContextMenuItem with autofill settings service global enableContextMenu
* funnel rp name or id to the cipher name on save
* remove comment
* add rp name and id to addCipher function
---------
Co-authored-by: Merissa Weinstein <merissaweinstein@merissas-mbp-2.lan>
* Migrate existing provider data to StateProvider
Migrate existing provider data to StateProvider
* Rework the ProviderService to call StateProvider
* Unit test the ProviderService
* Update DI to reflect ProviderService's new args
* Add ProviderService to logout chains across products
* Remove provider related stateService methods
* Update libs/common/src/state-migrations/migrations/28-move-provider-state-to-state-provider.spec.ts
Co-authored-by: Justin Baur <19896123+justindbaur@users.noreply.github.com>
* Cover up a copy/paste job
* Compare equality over entire array in a test
---------
Co-authored-by: Justin Baur <19896123+justindbaur@users.noreply.github.com>
* create user notification settings state provider
* replace state service get/set disableAddLoginNotification and disableChangedPasswordNotification with user notification settings service equivalents
* migrate disableAddLoginNotification and disableChangedPasswordNotification global settings to user notification settings state provider
* add content script messaging the background for enableChangedPasswordPrompt setting
* Implementing feedback to provide on PR
* Implementing feedback to provide on PR
* PR suggestions cleanup
---------
Co-authored-by: Cesar Gonzalez <cgonzalez@bitwarden.com>
* Revert "[PM-5277] Migrate Sync Service to State Provider (#7680)"
This reverts commit 78008a9e1e.
Includes a noop migration builder that allows us to bridge over the deleted migration
* Prefer revert migrations to noop
this revert avoids the need to change behavior between released vs unreleased migrations and keeps some dangerous code out of the repo :success:
* Update ordering of badge settings migrator to be consistent with `rc`, which was cut with only up to version 25
* Fix missing type import
* Establish biometric unlock enabled in state providers
* Use biometric state service for biometric state values
* Migrate biometricUnlock
* Fixup Dependencies
* linter and import fixes
* Fix injection
* Fix merge
* Use boolean constructor as mapper
* Conform to documented test naming conventions
* Commit documentation suggestion
Co-authored-by: Andreas Coroiu <acoroiu@bitwarden.com>
* Fix merge commit
* Fix test names
---------
Co-authored-by: Andreas Coroiu <acoroiu@bitwarden.com>
* create badge settings state provider
* replace state service get/set disableBadgeCounter with badge settings service equivalent
* migrate disableBadgeCounter account setting to badge settings state provider
* cleanup and address PR suggestions
Matt provided a ton of help on getting the state interactions right. Both he
and Justin collaborated with me to write the core of of the secret classifier.
Co-authored-by: Matt Gibson <mgibson@bitwarden.com>
Co-authored-by: Justin Baur <19896123+justindbaur@users.noreply.github.com>
* Sent initiation path for organization and user signups
* Rename organizationQueryParameter > organizationTypeQueryParameter
* Jared's feedback
* Split PM & SM initiation path
* create auth request service
* copy methods from auth crypto service
* register new auth request service
* remove refs to auth request crypto service
* remove auth request crypto service
* remove passwordless login method from login strategy service
* add docs to auth request service
* migrate clearClipboard account setting to autofill settings state provider
* replace state service get/set clearClipboard with autofill settings service equivalents
* PR suggestions cleanup
* Create state definition
* Create SmOnboardingTaskService
* Replace usage of stateService value with state new state provider
* Migrate old state values to state provider
* Fix injection of SmOnboardingTasksService
* Remove smOnboardingTasks from state
* Fix state provider imports
* Fix migration after merge from main
* Move null handling to SMOnboardingTasksService
* [AC-2195] Update canEditAnyCipher permission to make an exception for Custom users with editAnyCollection permission
* [AC-2195] Update V1 FC flag check to include check for an organization's FC status
* [AC-2195] Remove redundant collection management setting check that was hiding the restricted access message for custom users with deleteAnyCollection
* [AC-2195] Ensure users with canEditAnyCollections can edit all collections
* WIP admin console layout
* Update icons
* Migrate more things
* Migrate the last pages
* Move header to web
* Fix story not working
* Convert header component to standalone
* Migrate org layout to standalone
* Enable org switcher
* Add AC to product switcher
* Migrate provider portal to vertical nav
* Migrate PM
* Prettier fixes
* Change AC and PP to use secondary variant layout & update logos
* Remove full width setting
* Remove commented code
* Add header to report pages
* Add provider portal banner
* Fix banner for billing pages
* Move vault title to header
* Prevent scrollbar jumping
* Move send button to header
* Replace search input with bit-search
* Remove unused files and css
* Add banner
* Tweak storage option
* Fix duplicate nav item after merge
* Migrate banner state to state provider framework
* [AC-2078] Fix device approvals header
* [PM-5861] Hide AC from product switcher for users that do not have access
* [PM-5860] Fix Vault and Send page headers
* [AC-2075] Fix missing link on reporting nav group
* [AC-2079] Hide Payment Method and Billing History pages for self-hosted instances
* [AC-2090] Hide reports/event log nav items for users that do not have permission
* [AC-2092] Fix missing provider portal option in product switcher on page load
* Add null check for organization in org layout component
* [AC-2094] Fix missing page header for new client orgs page
* [AC-2093] Update New client button styling
* Fix failing test after merge
* [PM-2087] Use disk-local for web layout banner
* [PM-6041] Update banner copy to read "web app"
* [PM-6094] Update banner link to marketing URL
* [PM-6114] add CL container component to VVR pages (#7802)
* create bit-container component
* add container to all page components
* Fix linting errors after merge with main
* Fix product switcher stories
* Fix web-header stories
* mock org state properly in product switcher stories (#7956)
* refactor: move web layout migration banner logic into a service (#7958)
* make CL codeowner of web header files
* move migration banner logic to service; update stories
* [PM-5862] Ensure a sync has run before hiding navigation links
* Remove leftover banner global state
* Re-add dropped selfHosted ngIf
* Add rel noreferrer
* Remove comment
---------
Co-authored-by: Shane Melton <smelton@bitwarden.com>
Co-authored-by: Will Martin <contact@willmartian.com>
* Fix nextMock arguments
* Add state for biometric prompts
* Use biometric state for prompts
* Migrate biometric prompt data
* wire up biometric state to logouts
* Add migrator to migrate list
* Remove usages of prompt automatically
Explicitly list non-nulled state as intentional
* `npm run prettier` 🤖
* Fix web lock component
* create key generation service
* replace old key generation service and add references
* use key generation service in key connector service
* use key generation service in send service
* user key generation service in access service
* use key generation service in device trust service
* fix tests
* fix browser
* add createKeyFromMaterial and tests
* create ephemeral key
* fix tests
* rename method and add returns docs
* ignore material in destructure
* modify test
* specify material as key material
* pull out magic strings to properties
* make salt optional and generate if not provided
* fix test
* fix parameters
* update docs to include link to HKDF rfc
* Move user key memory state to state providers
Note: state service observable change is because these updates are no longer internal to the class, but reporter directly to account service through crypto service on update of a user key
* remove decrypted user key state
Note, we're going to move the encrypted cryptoSymmetric key (and associated master key encrypted user keys) as part of the master key service creation. Crypto service will no longer be responsible for the encrypted forms of user key.
* Deprecate notices belong on abstraction
* Allow for single-direction status updates
This is necessary since we don't want to have to guarantee that the update to logged out occurs after the update to locked.
* Remove deprecated subject
It turns out the set for cryptoMasterKey was also unused 🎉
Since we only need it as a backup if accountVaultTimeoutAction is
null/undefined, there should be no need to call this function every time.
While the overhead may seem trivial at first glance, it can add up to a
massive increase in runtime when the function is called repeatedly in
quick succession (e.g. when running `bw list items` where it is executed
once for every item).
In my concrete case this change leads to a 20x speedup.
* [PM-4756] feat: set BE and BS flags
* [PM-4755] feat: add support for credProps.rk
* [PM-4755] feat: add extension support to page-script object mapping
* Create state for biometric client key halves
* Move enc string util to central utils
* Provide biometric state through service
* Use biometric state to track client key half
* Create migration for client key half
* Ensure client key half is removed on logout
* Remove account data for client key half
* Remove unnecessary key definition likes
* Remove moved state from account
* Fix null-conditional operator failure
* Simplify migration
* Remove lame test
* Fix test type
* Add migrator
* Remove state that is never read.
* Remove unnecessary biometric state
We don't need to determine platform in desktop background, it can be done in the UI at any time.
* Fix merge
* Use platform utils to identify OS desktop type
* update collection service to use new state provider framework, remove stateservice from collection service, update collections state provider with migrate file and unit test
* Create MigrationRunner
- Create MigrationRunner Service for running migrations in StateService
- Create web override so that migrations also run against `localStorage`
* Fix Web StateService
* Fix WebMigrationRunner
* Fix CLI
* Fix ElectronStateService
* Update Comment
* More Common Scenarios
* Removed passwordless-login feature flag
* Removed conditional on login component.
* Added back reference accidentally deleted.
* Fixed initialization of the service in tests.
* Removed unused private variable.
* Updated DI to remove configService
* Undid changes to workspace file.
* Undid all changes to workspace file
* Undid merge changes to collection dialog
* Linting
* Begin migration of autofill settings
Co-authored-by: Cesar Gonzalez <cagonzalezcs@users.noreply.github.com>
Co-authored-by: Thomas Avery <Thomas-Avery@users.noreply.github.com>
Co-authored-by: Jonathan Prusik <jprusik@users.noreply.github.com>
Co-authored-by: Colton Hurst <coltonhurst@users.noreply.github.com>
* add browser dependency for AutofillSettingsService
Co-authored-by: Matt Gibson <mgibson@bitwarden.com>
* update autofill settings service
* replace usages of stateService get/set autofillOnPageLoad with autofillSettingsService
* replace usages of stateService get/set autofillOnPageLoadDefault with autofillSettingsService
* replace usages of stateService get/set autoCopyTotp with autofillSettingsService
* replace usages of stateService get/set autoFillOnPageLoadCalloutIsDismissed with autofillSettingsService
* replace usages of stateService get/set activateAutoFillOnPageLoadFromPolicy with autofillSettingsService
* replace usages of get/set autoFillOverlayVisibility with autofillSettingsService
* inlineMenuVisibility should use global state
* add the AutofillSettingsService to background scripts
* fix typing
* replace additional usages of get/set autoFillOverlayVisibility and disableAutoTotpCopy with autofillSettingsService equivalents
* replace additional usages of get/set autofillOnPageLoadDefault with autofillSettingsService equivalent
* replace additional usages of get/set activateAutoFillOnPageLoadFromPolicy with autofillSettingsService equivalent
* remove additional deprecated and unused state service calls
* improve naming conventions and consistency
* fix missing mock for policy service test
* replace missing overlay background tests
* cleanup
* fix double inversion
* fix reference to wrong setter
* move handleActivateAutofillPolicy out of BrowserPolicyService
* create state migration script
* resolve linting issues
* remove migrated setting properties
* add AutofillSettingsSErvice to jslib-services
* handle conditional content script loading via autofillOnPageLoad check
* add deprecated note to getFromLocalStorage
* add jsdoc decorators to new autofill service methods
* handle undefined globalState
* move autofill settings out of BrowserPolicyService
* Move autofill settings code out of policyService
* fix tests
* fix typo in state definition
---------
Co-authored-by: Matt Gibson <mgibson@bitwarden.com>
Co-authored-by: Cesar Gonzalez <cagonzalezcs@users.noreply.github.com>
Co-authored-by: Thomas Avery <Thomas-Avery@users.noreply.github.com>
Co-authored-by: Colton Hurst <coltonhurst@users.noreply.github.com>
Co-authored-by: Thomas Rittson <trittson@bitwarden.com>
* Added missing get$ method on SendService
* Added distinctUntilChanged to the get$ method and added more tests
* Added more validations and tests to get$
* Added some more test cases to get$
* Refactored test cases from get$
* Change passphrase generator's default wordSeparator to the empty string ''
* Create DefaultPassphraseGenerationOptions
* Use DefaultPassphraseGenerationOptions.wordSeparator in passphrase generation
* Add `empty` separator option to passphrase generator CLI and an example
* Change DefaultPassphraseGenerationOptions numWords to 3
* Use `DefaultPassphraseGenerationOptions.numWords` in CLI passphrase gen
* [AC-1124] Add getManyFromApiForOrganization to cipher.service.ts
* [AC-1124] Use getManyFromApiForOrganization when a user does not have access to all ciphers
* [AC-1124] Vault changes
- Show new collection access restricted view
- Include unassigned ciphers for restricted admins
- Restrict collections when creating/cloning/editing ciphers
* [AC-1124] Update edit cipher on page navigation to check if user can access the cipher
* [AC-1124] Hide ciphers from restricted collections
* [AC-1124] Ensure providers are not shown collection access restricted view
* [AC-1124] Modify add-edit component to call the correct endpoint when a restricted admin attempts to add-edit a cipher
* [AC-1124] Fix bug after merge with main
* [AC-1124] Use private this._organization
* [AC-1124] Fix broken builds
* create sso service
* rename sso service to sso-login service
* rename service
* add references to sso login service and update state calls
* fix browser
* fix desktop
* return promises
* remove sso state from account and global objects
* more descriptive org sso identifier method names
* fix sso tests
* fix tests
* Disable node integration and enable context isolation
* Review comments
* Log in renderer through IPC
* Missed imports
* Mock electron API
* resourcesPath is undefined in the preload, but process.windowsStore works correctly
* Replace fromBufferToUtf8 conditional implementation for the `buffer` package
The current non-node implementation is different than the node implementation,
as the non-node would break when the contents can't be parsed as a URI component.
Replacing the impl by the `buffer` package makes the result match in both environments.
* Fix lint
* Add some more tests
* Remove buffer from devDependencies
* Wire up key definitions for OrganizationService
[`AC-2009`: Transition OrganizationService to use StateProvider](
https://bitwarden.atlassian.net/browse/AC-2009)
In order to support the new `StateProvider` APIs for managing
application state this commit modifies `OrganizationService` in the following
ways:
1. Adding a `KeyDefinition` object to `OrganizationService` to store the
`organization` record in `StateProvider`.
1. Injecting `StateProvider` and wiring up `OrganizationService` to read
from the `organizations` key definition for the active user account.
1. Expanding the capabilities of `OrganizationData` to be able to read
itself from a JSON string. Previously this was handled directly by
`StateService`.
1. Updating tests to include requirements for testing against
`StateProvider`.
1. Marking the existing `StateService`-backed `organizations`
`Observable` and `BehaviorSubject` as deprecated.
This is largely unimplemented code with no intended visible effects to
the system. Implementing getting & updating the `organizations` value
from `StateProvider` will the next step in this work.
* Rework null check on OrganizationData
* Remove deprecation signals for the time being
* Move key definition inline with its service
* Create date objects when deserialzing json from state
* added state definition and key definition
* created vault settings service
* created enable passkeys migrations
* created enable passkeys migrations
* renamed the state definition
* created vault settings service
* updated enable passkey key definition
* updated references with vault settings service
* renamed files to avoid conflict
* removed set and get enable passkeys from state service
* removed comment
* fixed comments
* added readonly keyword
* removed service registartion from service module
* removed readonly keyword from abstract class
* swicted to used optional chaining
* renamed files
* added disk-local argument for web
* [PM-5277] Introduce lastSync state via State Providers
* [PM-5277] Add migrator and tests
* [PM-5277] Use memory for web storage location
* [PM-5277] Remove lastSync methods from state service
* [PM-5277] Remove lastSync from AccountProfile
* [PM-5277] Use string instead of Date to fix serialization for chrome.storage API in Browser
* [PM-5277] Only set account if lastSync was deleted during migration
* [PM-5277] Fix spec file
* added state definitionand key definition for folder service
* added data migrations
* created folder to house key definitions
* deleted browser-folder-service and added state provider to the browser
* exposed decrypt function so it can be used by the key definition, updated folder service to use state provider
* removed memory since derived state is now used
* updated test cases
* updated test cases
* updated migrations after merge conflict fix
* added state provider to the folder service constructor
* renamed migration file
* updated comments
* updated comments
* removed service registartion from browser service module and removed unused set and get encrypted folders from state service
* renamed files
* added storage location overides and removed extra methods
* refactor login strategies into own service
* create login service factory
* replaces instances of authService with loginStrategyService
* replace more instances of authService
* move logout back to auth service
* add browser dependencies
* fix desktop dependencies
* fix cli dependencies
* fix lint and test files
* fix anonymous hub deps
* fix webauthn-login service deps
* add loginstrategyservice to bg
* move login strategy service and models to auth folder
* revert changes to tsconfig
* use alias for imports
* fix path
---------
Co-authored-by: rr-bw <102181210+rr-bw@users.noreply.github.com>
* Create state for biometric client key halves
* Move enc string util to central utils
* Provide biometric state through service
* Use biometric state to track client key half
* Create migration for client key half
* Ensure client key half is removed on logout
* Remove account data for client key half
* Remove unnecessary key definition likes
* Remove moved state from account
* Fix null-conditional operator failure
* Simplify migration
* Remove lame test
* Fix test type
* Add migrator
* Prefer userKey when legacy not needed
* Fix tests
* Provide RSA encryption in encrypt service
* Define state for provider keys
* Require cryptoService
This is temporary until cryptoService has an observable active user private key. We don't want promise-based values in derive functions
* Update crypto service provider keys to observables
* Remove provider keys from state service
* Migrate provider keys out of state account object
* Correct Provider key state types
* Prefix migration with current version number
* PM-5638 Bumped up msv for IVIE
* Updated version to 2024.2.0 for next release.
---------
Co-authored-by: Carlos Gonçalves <cgoncalves@bitwarden.com>
* Got trial page working without the form set up
* Set up the form to create SM subscription
* Add free SM trial page and sign up
* Conner's changes
* fixed imports
* Set isFromSecretsManagerTrial
* Fixed OrgKey location
* Add isFromSecretsManager prop to free org create
* Add LTO callout
* Switch LTO to background box
* Defect: AC-2081
* Fixed typo "Secrets Manger" to "Secrets Manager"
* Removed discount price logic for storage and secrets manager prices since they don't apply
---------
Co-authored-by: Conner Turnbull <133619638+cturnbull-bitwarden@users.noreply.github.com>
Co-authored-by: Conner Turnbull <cturnbull@bitwarden.com>
* Added logic to only return organisations where user has import permissions and collections that he manages on Import
* Changed the UnassignedCollections validation logic
* Added validation to check if the user is coming from AdminConsole on the import component
* Added import collection service abstraction to allow get admin collections
* Corrected feature flag reads on import component
* Refactor import component methods ngOnInit and performImport to improve codescene
Using FeatureFlag Observable
* Modified validation to allow import if user has organizations to import into
* Using the new organization flexiblecollections property on import
* Created collection-admin-import.service to return all the org collections to the import on Admin Console
* Small changes on import flexible collections
* Fix linting issues
* changed canAccessImport rules and deprecated canAccessImportExport
* Validating if user canAccessImportExport instead of admin before calling the handleOrganizationImportInit.
* AC-2095 - Corrected getAllAdminCollections from ImportCollectionAdminService to properly get all the collections on AdminConsole
* Reverting AC-2095
---------
Co-authored-by: Daniel James Smith <djsmith85@users.noreply.github.com>
* PM-5242 - First working draft of copying out web CL implementation of user verification form and dialog components into standalone libs/auth components which could be used in any client.
* PM-5242 - Rename UserVerificationFormComponent to UserVerificationFormInputComponent b/c it doesn't actually have a form and is meant to slot into a form as an input.
* PM-5242 - Update libs/auth angular index to take renamed component into account
* PM-5242 - Clean up UserVerificationDialogComponent as have much cleaner design approach now (maintain existing func while simply adding new requirements for client side validation for passkeys)
* PM-5242 - UserVerificationFormInput component - WIP draft of new client and server split of user verification logic
* PM-5242 - UserVerificationFormInput - WIP - Lots of progress on client side verification layout - more to do
* PM-5242 - UserVerificationFormInputComponent - Add hasMultipleVerificationMethods property so we can only show alternate methods if user has them.
* PM-5242 - UserVerificationFormInputComponent - rename hasMultipleVerificationMethods to hasMultipleClientVerificationOptions
* PM-5242 - Add new user verification biometrics fingerprint icon with proper secondary fill so it displays properly on all themes.
* PM-5242 - Create enum for tracking client user verification states
* PM-5242 - UserVerificationFormInputComponent - WIP - (1) Got biometrics layout working except for error state (2) Emitting active client verification option and biometrics result to dialog (3) Properly identifying if biometrics is enabled in a platform agnostic way (4) Translations TODO
* PM-5242 - UserVerificationDialogComponent - (1) Wire up new inputs and outputs for UserVerificationFormInput (2) Don't show submit button when clientside biometrics verification active
* PM-5242 - UserVerificationFormInputComponent - wired up biometrics failure and retry handling + re-arranged comp properties to put inputs & outputs at the top
* PM-5242 - UserVerificationFormInput component - Add logic to prevent currently active client verification method from being shown an option
* PM-5242 - UserVerificationFormInput - adjust margins
* PM-5242 - User verification dialog and form input comps - replace Verification with VerificationWithSecret type where applicable
* PM-5242 - UserVerificationFormComp - Default to server for backwards compatibility and to avoid requiring the input at all
* PM-5242 - UserVerificationFormInputComp - (1) Rename processChanges to processSecretChanges (2) Short circuit processSecretChanges when biometrics is active (3) Add new function for determining type of verification that has a secret.
* PM-5242 - UserVerificationDialog - Support custom, optional callout in dialog body.
* PM-5242 - UserVerificationDialogComp - support custom confirm button text and type.
* PM-5242 - UserVerificationDialog - Add user verification dialog result type to allow for handling all possible verification scenarios
* PM-5242 - UserVerificationFormInputComp - tweak comment
* PM-5242 - UserVerificationFormInput comp html - add placeholder text for no client verifications found scenario
* PM-5242 - UserVerificationDialogComponent - (1) Add confirm & cancel to dialog result (2) Add cancel method vs using bitDialogClose for specificity (3) Adjust naming of output property to properly specify that it is scoped to client verification (4) Adjust layout of dialog html to handle when no client side verification methods are found.
* PM-5242 - UserVerificationFormInput - Clean up test code
* PM-5242 - UserVerificationFormInput - For server verification, we don't need to check if the user has a local master key hash as we will generate a hash to send to the server for comparison.
* PM-5242 - UserVerificationFormInput html - Remove now unnecessary dev warning as I've provided a default
* PM-5242 - UserVerification Dialog & Form Input - add translations on all clients for all visible text.
* PM-5242 - UserVerificationFormInput html - remove no active client verification handling from form input comp as it is instead emitted upwards to parent dialog component to be handled there.
* PM-5242 - UserVerificationDialogComp - (1) Make UserVerificationDialogResult.noAvailableClientVerificationMethods optional because it isn't needed in cancel flows (thanks Will) (2) Modify static open to intercept closed observable event in order to always return a UserVerificationDialogResult as BitDialog returns empty string when the user clicks the x
* PM-5242 - UserVerificationDialogComp - Simplify dialog param names to remove redundant dialog
* PM-5242 - UserVerificationDialogParams - update comments to match new names
* PM-5242 - UserVerificationDialog Storybook - WIP first draft
* PM-5242 - UserVerificationDialogStoryComponent - WIP - try out having imports the same as the standalone component
* PM-5242 - UserVerificationDialogStoryComponent - more WIP - building now - some stuff displaying
* PM-5242 - UserVerificationDialogStoryComponent - some progress on providers setup
* PM-5242 - Not going to use storybook for user verification dialog
* PM-5242 - UserVerificationDialogComp - move types into own file + add docs
* PM-5242 - Update auth index to export user-verification-dialog.types
* PM-5242 - UserVerificationFormInput & UserVerificationService - Extract out getAvailableVerificationOptions logic into service
* PM-5242 -UserVerificationDialogComponent - Update close logic to handle escape key undefined scenario
* PM-5242 - UserVerificationFormInput - add getInvalidSecretErrorMessage for properly determining invalid secret translation
* PM-5242 - UserVerificationDialogComp - Refactor submit logic to handle different return methodologies in existing MP and OTP user verification service code vs new PIN flow (e.g., throwing an error instead of returning false)
* PM-5242 - PinCryptoService - change error logs to warnings per discussion with Justin
* PM-5242 - UserVerificationFormInput - Biometrics flow on desktop - remove accidentally added period in couldNotCompleteBiometrics translation key.
* PM-5242 - UserVerificationFormInput HTML - Re-arrange order of other client verification options to match design
* PM-5242 - UserVerificationFormInputComponent - Reset inputs as untouched on change of client verification method.
* PM-5242 - UserVerificationDialogComponent - Remove TODO as existing secret change logic turns invalidSecret false when biometrics is swapped to.
* PM-5242 - UserVerificationFormInputComponent - getInvalidSecretErrorMessage - fix PIN error message not being returned.
* PM-5242 - UserVerificationDialogComponent - Add documentation and examples to open method.
* PM-5242 - UserVerificationDialogComponent - tweak open docs
* PM-5242 - Remove accidental period from translation keys on browser & web
* PM-5242 - UserVerificationFormInputComponent - OTP flow needed button module to work
* PM-5242 - UserVerificationDialogParams - Add docs explaining that noAvailableClientVerificationMethods is only for desktop & browser.
* PM-5242 - User-verification-form-input - Adjust layout to meet new design requirements - (1) On load, send OTP without user clicking a button (2) Allow resending of the codes (3) show a code sent message for 3 seconds
* PM-5242 - Browser User Verification - Instantiate PinCryptoService and UserVerification service AFTER instantiating vaultTimeoutSettingsService so that it isn't undefined at run time.
* PM-5242 - JslibServices Module - UserVerificationService - add missing PlatformUtilsServiceAbstraction dependency.
* PM-5242 - Desktop Native Messaging Service - Wrap biometric getUserKeyFromStorage call in try catch because it throws an error if the user cancels the biometrics prompt and doesn't send a response to the browser extension when using the biometrics unlock bridge to the desktop app and OS.
* PM-5242 - Browser Extension - NativeMessagingBackground - if the desktop biometricUnlock command is executed with a canceled (not adjusting misspelling to keep side effects at a min) response, don't bother continuing.
* PM-5242 - BrowserCryptoService - When retrieving the user key via desktop biometrics, return null for user key if the user fails or cancels the biometrics prompt. Otherwise, if there is a user key in memory after unlock, biometrics user verification will always just return the user key from state regardless of if the user has successfully passed the biometrics prompt or not.
* PM-5242 - BrowserCryptoService - extra comments
* PM-5242 - Clean up translations - (1) Remove unused defaultUserVerificationDialogConfirmBtnText (2) Refactor name of defaultUserVerificationDialogTitle to just be verificationRequired which matches existing naming conventions.
* PM-5242 - CLI - fix order of service instantiations to ensure that vaultTimeoutSettingsService isn't undefined for PinCryptoService and UserVerificationService
* PM-5242 - Rename UserVerificationDialogParams to UserVerificationDialogOptions to match existing naming conventions of other CL comps.
* PM-5242 - UserVerificationDialogComponent - dialogParams renamed to dialogOptions
* PM-5242 - UserVerificationService Abstraction - Per PR feedback, use keyof for verificationType
* PM-5242 - UserVerificationBiometricsIcon - Per PR feedback, use https://jakearchibald.github.io/svgomg/ to optimize SVG by 50%.
* PM-5242 - Per PR feedback, clarify UserVerificationDialogOptions.clientSideOnlyVerification comment.
* PM-5242 - UserVerificationTypes - Add comments clarifying all text passed to the UserVerificationDialog are translation keys
* PM-5242 - UserVerificationDialogComp - fix extra new line per PR feedback
* PM-5242 - UserVerificationDialogTypes - per PR feedback and discussion with Will M., export ButtonType from CL so we (and consumers of the dialog) can properly import it via standard CL import.
* PM-5242 - BrowserCryptoService - Adjust comments per PR feedback.
* PM-5242 - UserVerificationDialogComponent - make ActiveClientVerificationOption readonly as it only for component html
* PM-5242 - UserVerificationDialogComp html - finish comment
* PM-5242 - BrowserCryptoService - add returns js doc per PR feedback.
* PM-5242 - UserVerificationDialogComponent - per PR feedback, add unexpected error toast.
* PM-5242 - UserVerificationService - getAvailableVerificationOptions - update params to use keyof like abstraction
* PM-5242 - Mark all existing client specific implemetations of user verification as deprecated.
* Add `disk-local` option for web
* Fix `web` DI
* Update libs/common/src/platform/state/state-definition.ts
Co-authored-by: Matt Gibson <mgibson@bitwarden.com>
* Rely On Default Implementation for Most of Cache Key
---------
Co-authored-by: Matt Gibson <mgibson@bitwarden.com>
* Validate checksum on decrypt of URI
* Add uri checksum to domain during encryption
* Move hash to stateless encrypt service
* Add checksum field to all the other models necessary for syncing with server
* Remove old test in favor of `describe` block
* PM-4185 Added a boolean to control checksum validation
* PM-4185 Fi unit tests
* [PM-4810][PM-4825][PM-4880] Fix encrypted import and add null check (#6935)
* PM-4810 Bumped up version
* PM-4880 Add null check
* PM-4825 Fix encrypted export
* PM-5462 Fix item saving with blank URI (#7640)
* PM-4185 Add back uriChecksum setting
---------
Co-authored-by: Carlos Gonçalves <cgoncalves@bitwarden.com>
Co-authored-by: Matt Bishop <mbishop@bitwarden.com>
Co-authored-by: gbubemismith <gsmithwalter@gmail.com>
Co-authored-by: bnagawiecki <107435978+bnagawiecki@users.noreply.github.com>
* Move org keys to state providers
* Create state for org keys and derive decrypted for use
* Make state readonly
* Remove org keys from state service
* Migrate user keys state
* Review feedback
* Correct test name
* Refix key types
* `npm run prettier` 🤖
* add flag to deter process reload if cancel is clicked on biometrics
* rename flag
* store biometrics cancelled to disk instead of integrating with process reload
* allow auto-prompt when opening app
* Remove unused feature flag
* Replace feature flag ref with org flag
* Remove deprecated feature flag to discourage use
* Add check to org.canCreateNewCollections
* Adjust init logic of components to avoid race conditions
* Make canCreateNewCollections logic more explicit
* Resolve merge conflicts with vault changes
* Update comments
* Remove uses of old feature flag
* Remove last of old feature flag
* Clean up feature flag
* Fix linting
* Fix linting
* PM-4596 - PinCryptoService first draft
* PM-4596 - PinCryptoService - Refactor pinKeyEncryptedKey retrievals out into own method getPinKeyEncryptedKeys
* PM-4596 - npm ci + npm run prettier to fix lint issues
* PM-4596 - PinCryptoService - Add kdf types
* PM-4596 - PinCryptoService - Refactor pin validation into own helper method.
* PM-4596 - Rename pin-crypto.service.ts to pin-crypto.service.implementation.ts
* PM-4596 - PinCryptoService - add additional logging for error states.
* PM-4596 - JslibServicesModule - register new PinCryptoService and PinCryptoServiceAbstraction
* PM-4596 - PinCryptoService - modify decryptUserKeyWithPin signature to not require email to match MP verification process in user verification service.
* PM-4596 - Lock components - use new PinCryptoService.decryptUserKeyWithPin(...) to get user key + refactor base comp unlock with pin method to improve
* PM-4596 - Lock component - if too many invalid attempts, added toast explaining that we were logging the user out due to excess PIN entry attempts
* PM-4596 - UserVerificationService - (1) Refactor verifyUser(...) to use switch + separate methods for a cleaner parent method + better extensibility for PIN & biometrics which are TBD (2) Add PIN support to validateInput(...)
* PM-4596 - UserVerificationService - add PIN and biometrics functions to verifyUser(...)
* PM-4596 - PinCryptoService Spec - start test file - instantiates properly
* PM-4596 - PinCryptoService tests - WIP
* PM-4596 - PinCryptoService tests - WIP - got success cases working
* PM-4596 - pin-crypto.service.implementation.spec.ts renamed to pin-crypto.service.spec.ts
* PM-4596 - PinCryptoService.getPinKeyEncryptedKeys(...) - add comment + var name change for clarity
* PM-4596 - PinCryptoService tests - test invalid, null return scenarios
* PM-4596 - CLI - bw.ts - update UserVerificationService instantiation to include new pinCryptoService
* PM-4596 - PinCryptoService - import VaultTimeoutSettingsServiceAbstraction instead of implementation for factory creation to get browser building
* PM-4596 - (1) Create pinCryptoServiceFactory for browser background (2) Add it to the existing userVerificationServiceFactory
* PM-4596 - Browser - Main.background.ts - Add pinCryptoService and add to userVerificationService dependencies
* PM-4596 - UserVerificationService - per PR feedback simplify returns of verifyUserByPIN(...) and verifyUserByBiometrics(...)
* PM-4596 - Messages.json on desktop & browser - per PR feedback, adjust tooManyInvalidPinEntryAttemptsLoggingOut translation text to remove "you"
* PM-4596 - VerificationType enum - fix line copy mistake and give BIOMETRICS own, unique value.
* PM-4596 - VerificationType - rename BIOMETRICS to Biometrics to match existing MasterPassword value case.
* PM-4596 - Update verification type to consider whether or not a secret exists as we have added a new verification which doesn't have a type. Add new server and client side verification types. Update all relevant code to pass compilation checks.
* PM-4596 - More verification type tweaking
* PM-4596 - Verification - verificationHasSecret - tweak logic to be more dynamic and flexible for future verification types
* PM-4596 - UpdateTempPasswordComp - use new MasterPasswordVerification
* PM-4596 - Desktop - DeleteAcctComp - use VerificationWithSecret to solve compile error w/ accessing secret
* PM-4596 - Per discussions with Andreas & Will, move new Pin Crypto services into libs/auth + added @bitwarden/auth path to CLI tsconfig + added new, required index.ts files for exporting service abstractions & implementations
* PM-4596 - Fixed missed import fixes for lock components across clients for pin crypto service after moving into @bitwarden/auth
* PM-4596 - More PinCryptoService import fixes to get browser & desktop building
* PM-4596 - Update desktop lock comp tests to pass by providing new pin crypto service.
* PM-4596 - User verification service -update todo
* PM-4596 - PinCryptoService - per PR feedback, fix auto import wrong paths.
* PM-4596 - PinCryptoService tests - fix imports per PR feedback
* PM-4596 - UserVerificationSvc - rename method to validateSecretInput per PR feedback
* Fix imports
* PM-4596 - PinCryptoService - Refactor naming for clarity and move test cases into describes per PR feedback
* reorg libs/auth; expose only libs/auth/core to cli app
* PM-4596 - UserVerification - Resolve import issue with importing from libs/auth. Can't use @bitwarden/auth for whatever reason.
* PM-4596 - Fix desktop build by fixing import
* PM-4596 - Provide PinCryptoService to UserVerificationService
* PM-4596 - PinCryptoServiceFactory - you cannot import services from @bitwarden/auth in the background b/c it brings along the libs/auth/components and introduces angular into the background context which doesn't have access to angular which causes random test failures. So, we must separate out the core services just like the CLI to only bring along the angular agnostic services from core.
* PM-4596 - Refactor libs/auth to have angular / common + update all imports per discussion with Matt & Will. Introduced circular dep between PinCryptoService + VaultTimeoutSettingsService + UserVerificationService
* PM-4596 - VaultTimeoutSettingsService - Refactor UserVerificationService out of the service and update all service instantiations and tests. The use of the UserVerificationService.hasMasterPassword method no longer needs to be used for backwards compatibility. This resolves the circular dependency between the PinCryptoService, the UserVerificationService, and the VaultTimeoutSettingsService. We will likely refactor the hasMasterPassword method out of the UserVerificationService in the future.
* PM-4596 - Update CL tsconfig.libs.json to add new auth/common and auth/angular paths for jslib-services.module imports of pin crypto service to work and for test code coverage to run successfully.
* PM-4596 - Address PR feedback
* PM-4596 - Update root tsconfig (only used by storybook) to add new libs/auth paths to fix chromatic build pipeline.
* PM-4596 - Actually update tsconfig with proper routes to fix storybook
* PM-4596 - UserVerificationService - verifyUserByBiometrics - add error handling logic to convert failed or cancelled biometrics verification to a usable boolean
* PM-4596 - Add missing await
* PM-4596 - (1) Add log service and log to user verification service biometric flow to ensure errors are at least revealed to the console (2) Fix factory missing PinCryptoServiceInitOptions
* PM-4596 - Use the correct log service abstraction
* PM-4596 - Remove unused types per PR review
---------
Co-authored-by: William Martin <contact@willmartian.com>
* PoC disallow changing masked values in edit mode and mask TOTP with password
* toggle totp seed visibility independently from password visibility in edit mode
* cleanup
* add fallback value for when a cipher returns a null value for maskedPassword
* toggle masks off for maskable login properties with no value on load
* do not show mask toggle for password or totp if no value is present
* Global State Rewrite
* Apply suggestions from code review
Co-authored-by: Matt Gibson <mgibson@bitwarden.com>
* Prettier
---------
Co-authored-by: Matt Gibson <mgibson@bitwarden.com>
* Migrate ever had user key
* Add DI for state providers
* Add state for everHadUserKey
* Use ever had user key migrator
Co-authored-by: SmithThe4th <gsmithwalter@gmail.com>
Co-authored-by: Carlos Gonçalves <LRNcardozoWDF@users.noreply.github.com>
Co-authored-by: Jason Ng <Jcory.ng@gmail.com>
* Fix test from merge
* Prefer stored observables to getters
getters create a new observable every time they're called, whereas one set in the constructor is created only once.
* Fix another merge issue
* Fix cli background build
---------
Co-authored-by: SmithThe4th <gsmithwalter@gmail.com>
Co-authored-by: Carlos Gonçalves <LRNcardozoWDF@users.noreply.github.com>
Co-authored-by: Jason Ng <Jcory.ng@gmail.com>
* Expand state provider fakes
- default null initial value for fake states
- Easier mocking of key definitions through just the use of key names
- allows for not exporting KeyDefinition as long as the key doesn't collide
- mock of fake state provider to verify `get` calls
- `nextMock` for use of the fn mock matchers on emissions of `state$`
- `FakeAccountService` which allows for easy initialization and working with account switching
* Small bug fix for cache key collision on key definitions unique by only storage location
* Fix initial value for test
#7290 introduced these types, but during development we switched over to specifying dependencies in type parameters instead of an object. This change meant we no longer needed these `Type` or `ShapeToInstance` types, greatly simplifying the types related to derived state.
* Remove derived state from state classes
* Create provider for derived state
Derived state is automatically stored to memory storage, but can be derived from any observable.
* Fixup state provider method definitions
* Test `DefaultDerivedState`
* remove implementation notes
* Write docs for derived state
* fixup derived state provider types
* Implement buffered delayUntil operator
* Move state types to a common module
* Move mock ports to centra location
* Alias DerivedStateDependency type
* Add dependencies to browser
* Prefer internal rxjs operators for ref counting
* WIP
* Ensure complete on subjects
* Foreground/background messaging for browser
Defers work for browser to the background
* Test foreground port behaviors
* Inject foreground and background derived state services
* remove unnecessary class field
* Adhere to required options
* Add dderived state to CLI
* Prefer type definition in type parameters to options
* Prefer instance method
* Implements factory methods for common uses
* Remove nothing test
* Remove share subject reference
Share manages connector subjects internally and will reuse them until
refcount is 0 and the cleanup time has passed. Saving our own reference
just risks memory leaks without real testability benefits.
* Fix interaction state
* PM-3859 - Desktop App Comp - Build lock mechanism for update app menu which doesn't try to update the menu for users who are being logged out which was causing errors (primary scenario was triggered by logging in on desktop with a TDE user w/out a MP, triggering a sync, then hitting the command to lock the vault right after which would trigger a log out while the sync was still in process. Then, while the log out was in process, the sync would try and trigger an update to the app menu but it would error as some of the user's state had already been cleaned up)
* PM-3859 - App comp - remove use of promise.all to prevent any race conditions from causing intermittent logout errors with state being cleared and then values trying to be set on the cleared state (I observed setMasterKey get called after state account.keys was cleared - received error when attempting to set value on undefined).
* PM-3859 - Desktop Vault Items Component - on log out, if you were on the vault screen, the loss of focus on the vault search text box would trigger a search 200 ms after log out had been triggered. This would eventually attempt to set an undefined master key (VaultItemsComponent.doSearch() --> cipherService.getAllDecrypted() --> cryptoService.getUserKeyWithLegacySupport() --> cryptoService.getMasterKey() --> cryptoService.setMasterKey()). However, at this point, the account had been cleared as part of the log out process and an error would be thrown in the state service for trying to set account.keys.masterKey to undefined when the account and account.keys were undefined. These changes prevent the search from firing until the value changes and also prevents setMasterKey from being called if it is undefined.
* feat: add missing tests for `isFido2FeatureEnabled`
* feat: add user logged in check
* chore: rewrite with cartesian product
* chore: remove test
The test was more complex than the actual function, removing.
* feat: add domain exclusion
* feat: add origin equal vault case
* chore: clean up the old code from `content-secript`
* feat: return early to avoid making api calls
* fix: prettier linting
* fix: incorrect logic inversion
---------
Co-authored-by: bnagawiecki <107435978+bnagawiecki@users.noreply.github.com>
Co-authored-by: SmithThe4th <gsmith@bitwarden.com>
* Hide account switcher in addEdit generator
* Handle AddEditCipher deserialization
* Opaque types are not serializable
* Better handle jsonification of login uris
* Ensure we don't overwrite original with clone
* Ensure cipherView prototype is always restored if it exists
* [PM-5347] feat: add tests
* fixed miscalculated lengths for R and S components by not by prepending an extra byte when the MSB of the first byte in a component is greater than or equal to 0x80
* renamed to correct format
* fixed issue when there is a leading zero and a negative
* removed comment
* Made test cases clearer and more informative, renamed joseToDer, removed alg parameter and defaulted to use ES256 algorithm
---------
Co-authored-by: Andreas Coroiu <andreas.coroiu@gmail.com>
## Type of change
<!-- (mark with an `X`) -->
```
- [ ] Bug fix
- [ ] New feature development
- [x] Tech debt (refactoring, code cleanup, dependency upgrades, etc)
- [ ] Build/deploy pipeline (DevOps)
- [ ] Other
```
## Objective
<!--Describe what the purpose of this PR is. For example: what bug you're fixing or what new feature you're adding-->
Final Client changes for Key Rotation Improvements.
- Introduces a new `KeyRotationService` that is responsible for owning rotation process.
- Moves `Send` re-encryption to the `SendService` (`KeyRotationService` shouldn't have knowledge about how domains are encrypted).
- Moves `EmergencyAccess` re-encryption to the `EmergencyAccessService`.
- Renames `AccountRecoveryService` to `OrganizationUserResetPasswordService` after feedback from Admin Console
## Code changes
<!--Explain the changes you've made to each file or major component. This should help the reviewer understand your changes-->
<!--Also refer to any related changes or PRs in other repositories-->
Auth
- **emergency-access-update.request.ts:** New request model for domain updates that includes Id
- **emergency-access.service.ts:** Moved `EmergencyAccess` re-encryption to the `EmergencyAccessService`. Add deprecated method for legacy key rotations if feature flag is off
- **key-rotation.service/api/spec/module:** New key rotation service for owning the rotation process. Added api service, module, and spec file.
- **update-key.request.ts:** Moved to Auth ownership. Also added new properties for including other domains.
- **migrate-legacy-encryption.component.ts:** Use new key rotation service instead of old component specific service. Delete old service.
- **change-password.component.ts:** Use new key rotation service.
- **settings.module.ts:** Import key rotation module.
Admin Console
- **organization-user-reset-password.service.ts/spec:** Responsible for re-encryption of reset password keys during key rotation. Added tests.
- **organization-user-reset-password-enrollment.request.ts:** New request model for key rotations
- **reset-password.component.ts:** Update `AccountRecoveryService` to `OrganizationUserResetPasswordService`
- **enroll-master-password-reset.component.ts:** Update `AccountRecoveryService` to `OrganizationUserResetPasswordService`
Tools
- **send.service/spec.ts:** Responsible only for re-encryption of sends during key rotation. Added tests.
Other
- **api.service.ts:** Move `postAccountKey` to `KeyRotationApiService`
- **feature-flag.enum.ts:** add new feature flag
## Screenshots
<!--Required for any UI changes. Delete if not applicable-->
## Before you submit
- Please add **unit tests** where it makes sense to do so (encouraged but not required)
- If this change requires a **documentation update** - notify the documentation team
- If this change has particular **deployment requirements** - notify the DevOps team
- Ensure that all UI additions follow [WCAG AA requirements](https://contributing.bitwarden.com/contributing/accessibility/)
* Add a small default time to limit timing failures
* Handle subscription race conditions
* Add Symbols to tracked emission types
This is a bit of a cheat, but Symbols can't be cloned, so
we need to nudge them to something we can handle.
They are rare enough that anyone hitting this is likely to
expect some special handling.
* Ref count state listeners to minimize storage activity
* Ensure statuses are updated
* Remove notes
* Use `test` when gramatically more proper
* Copy race and subscription improvements to single user
* Simplify observer initialization
* Correct parameter names
* Simplify update promises
test we don't accidentally deadlock along the `getFromState` path
* Fix save mock
* WIP: most tests working
* Avoid infinite update loop
* Avoid potential deadlocks with awaiting assigned promises
We were awaiting a promise assigned in a thenable. It turns out that
assignment occurs before all thenables are concatenated, which can cause
deadlocks. Likely, these were not showing up in tests because we're
using very quick memory storage.
* Fix update deadlock test
* Add user update tests
* Assert no double emit for multiple observers
* Add use intent to method name
* Ensure new subscriptions receive only newest data
TODO: is this worth doing for active user state?
* Remove unnecessary design requirement
We don't need to await an executing update promise, we
can support two emissions as long as the observable is
guaranteed to get the new data.
* Cleanup await spam
* test cleanup option behavior
* Remove unnecessary typecast
* Throw over coerce for definition options
* Fix state$ observable durability on cleanup
* decompose password generator policy enforcement
* integrate new logic with UI
* improve UX of minimum password length
* improve password generator policy options documentation
* initialize min length to default minimum length boundary
* reset form value on input to prevent UI desync from model
---------
Co-authored-by: Thomas Rittson <31796059+eliykat@users.noreply.github.com>
* Add a small default time to limit timing failures
* Handle subscription race conditions
* Add Symbols to tracked emission types
This is a bit of a cheat, but Symbols can't be cloned, so
we need to nudge them to something we can handle.
They are rare enough that anyone hitting this is likely to
expect some special handling.
* Ref count state listeners to minimize storage activity
* Ensure statuses are updated
* Remove notes
* Use `test` when gramatically more proper
* Copy race and subscription improvements to single user
* Simplify observer initialization
* Correct parameter names
* Simplify update promises
test we don't accidentally deadlock along the `getFromState` path
* Fix save mock
* WIP: most tests working
* Avoid infinite update loop
* Avoid potential deadlocks with awaiting assigned promises
We were awaiting a promise assigned in a thenable. It turns out that
assignment occurs before all thenables are concatenated, which can cause
deadlocks. Likely, these were not showing up in tests because we're
using very quick memory storage.
* Fix update deadlock test
* Add user update tests
* Assert no double emit for multiple observers
* Add use intent to method name
* Ensure new subscriptions receive only newest data
TODO: is this worth doing for active user state?
* Remove unnecessary design requirement
We don't need to await an executing update promise, we
can support two emissions as long as the observable is
guaranteed to get the new data.
* Cleanup await spam
* test cleanup option behavior
* Remove unnecessary typecast
* Throw over coerce for definition options
* [AC-1139] Add new layout for MemberDialogComponent when FC feature flag is enabled
* [AC-1139] Deprecated Organization canEditAssignedCollections, canDeleteAssignedCollections, canViewAssignedCollections
* [AC-1139] Checking if FC feature flag is enabled when using canDeleteAssignedCollections or canViewAssignedCollections
* [AC-1139] Added missing parameter to customRedirect
* [AC-1139] Fixed canEdit permission
* [AC-1139] Fixed CanDelete logic
* [AC-1139] Changed canAccessVaultTab function to receive configService
* Override deprecated values on sync
* [AC-1139] Reverted change that introduced ConfigService as a parameter to canAccessVaultTab
* [AC-1139] Fixed circular dependency
* [AC-1139] Moved overriding of deprecated values to syncService
* Revert "[AC-1139] Fixed circular dependency"
This reverts commit 6484420976.
* Revert "Override deprecated values on sync"
This reverts commit f0c25a6996.
* [AC-1139] Added back the deprecation of methods canEditAssignedCollections, canDeleteAssignedCollections, canViewAssignedCollections
* [AC-1139] Reverted change on syncService
* [AC-1139] Override deprecated values on sync
* [AC-1139] Fix canDelete logic in
collection-dialog.component.ts and
bulk-delete-dialog.component.ts
* [AC-1139] Moved override logic from syncService to organizationService
* [AC-1139] Add ability to have titlecase titles on nested-checkbox.component checkboxes; use on member-dialog.component
* Revert "[AC-1139] Add ability to have titlecase titles on nested-checkbox.component checkboxes; use on member-dialog.component"
This reverts commit 9ede0fc5ac.
* [AC-1139] Fix bulk delete functionality
* [AC-1139] Refactor canEdit and canDelete to use ternary operator
* [AC-1139] Fix canDelete condition in VaultComponent
---------
Co-authored-by: Thomas Rittson <trittson@bitwarden.com>
Co-authored-by: Thomas Rittson <31796059+eliykat@users.noreply.github.com>
* Provide helpers to build keys from KeyDefinitions
* Move usage comments to the helper class
* `npm run prettier` 🤖
* Prefer setters and getters to key builders
* Add documentation to migration helper methods
* Fix migration helper tests
* Prefer defined types to ad hoc
* `npm run prettier` 🤖
* Handle switch messaging
TODO: handle loading state for account switcher
* Async updates required for state
* Fallback to email for current account avatar
* Await un-awaited promises
* Remove unnecessary Prune
Prune was getting confused in browser and deleting memory in browser on
account switch. This method isn't needed since logout already removes
memory data, which is the condition for pruning
* Fix temp password in browser
* Use direct memory access until data is serializable
Safari uses a different message object extraction than firefox/chrome
and is removing `UInt8Array`s. Until all data passed into StorageService
is guaranteed serializable, we need to use direct access in state
service
* Reload badge and context menu on switch
* Gracefully switch account as they log out.
* Maintain location on account switch
* Remove unused state definitions
* Prefer null for state
undefined can be misinterpreted to indicate a value has not been set.
* Hack: structured clone in memory storage
We are currently getting dead objects on account switch due to updating
the object in the foreground state service. However, the storage service
is owned by the background. This structured clone hack ensures that all
objects stored in memory are owned by the appropriate context
* Null check nullable values
active account can be null, so we should include null safety in the
equality
* Correct background->foreground switch command
* Already providing background memory storage
* Handle connection and clipboard on switch account
* Prefer strict equal
* Ensure structuredClone is available to jsdom
This is a deficiency in jsdom --
https://github.com/jsdom/jsdom/issues/3363 -- structured clone is well
supported.
* Fixup types in faker class
* add avatar and simple navigation to header
* add options buttons
* add app-header to necessary pages
* add back button and adjust avatar sizes
* add helper text when account limit reached
* convert magic number to constant
* add clarifying comment
* adjust homepage header styles
* navigate to previousp page upon avatar click when already on '/account-switcher'
* move account UI to own component
* add i18n
* show correct auth status
* add aria-hidden to icons
* use listbox role
* add screen reader accessibility to account component
* more SR a11y updates to account component
* add hover and focus states to avatar
* refactor hover and focus states for avatar
* add screen reader text for avatar
* add slide-down animation on account switcher close
* remove comment
* setup account component story
* add all stories
* move navigation call to account component
* implement account lock
* add button hover effect
* implement account logout
* implement lockAll accounts functionality
* replace 'any' with custom type
* add account switcher button to /home login page
* use <main> tag (enables scrolling)
* change temp server filler name
* temporarily remove server arg from account story
* don't show avatar on /home if no accounts, and don't show 'lock'/'logout' buttons if no currentAccount
* add translation and a11y to /home avatar
* add correct server url to account component
* add 'server' to AccountOption type
* Enabled account switching client-side feature flag.
* add slide-in transition to /account-switcher page
* change capitalization to reflect figma design
* make screen reader read active account email, address more capitalization
* fix web avatar misalignment
* make avatar color based on user settings and in sync with other clients
* make property private
* change accountOptions to availableAccounts for clarity
* refactor to remove 'else' template ref
* remove empty scss rule
* use tailwind instead of scss
* rename isSelected to isActive
* add 'isButton' to /home page avatar
* move files to services folder
* update import
* Remove duplicate active account button
* Move no account button to current-account component
* Always complete logging out
Fixes PM-4866
* make screenreader read off email, not name
* refactor avatar for button case
* Do not next object updates
StateService's init was calling `updateState` at multiple layers,
once overall and then again for each account updated. Because
we were not maintaining a single state object through the
process, it was ending up in a consistent, but incomplete state.
Fixed by returning the updated state everywhere. This very well
may not be all the bugs associated with this
* Treat null switch account as no active user
* Listen for switchAccountFinish before routing (#6950)
* adjust avatar style when wrapped in a button
* show alt text for favicon setting
* move stories to browser
* Send Finish Message on null
* Dynamically set active user when locking all
This is required because some user lock states are not recoverable after
process reload (those with logout timeout). This waits until reload is
occurring, then sets the next user appropriately
* Move Finished Message to Finally Block
Fix tests
* Drop problematic key migration
Fixes PM-4933. This was an instance of foreground/background collision
when writing state. We have several other fallbacks of clearing
these deprecated keys.
* Prefer location to homebrew router service
* Initialize account disk cache from background
Uses the `isRecoveredSession` bool to re-initialize foreground caches
from a background message. This avoids a lengthy first-read for
foregrounds
* PM-4865 - Browser Acct Switcher - only show lock btn for lockable accounts (#6991)
* Lock of active account first, when locking multiple.
Fixes PM-4996
* Fix linter
* Hide lock now for locked users (#7020)
* Hide lock now for locked users
* Prefer disabling button to removing
* Add tooltip to TDE without unlock method
* Load all auth states on state init (#7027)
This is a temporary fix until the owning services can update state
themselves. It uses the presence of an auto key to surmise unlocked
state on init. This is safe since it's run only once on extension start.
* Ps/pm 5004/add load to account switcher (#7032)
* Add load spinner to account switcher
* Remove ul list icons
* Properly size account switcher in popout
* [PM-5005] Prevent Double Navigation (#7035)
* Delete Overriden Method
* Add Lock Transition
* truncate email and server name
* remove account.stories.ts (will add in separate PR)
* Do not switch user at reload if no user is active
* fix prettier issues
---------
Co-authored-by: Matt Gibson <mgibson@bitwarden.com>
Co-authored-by: Todd Martin <tmartin@bitwarden.com>
Co-authored-by: Justin Baur <19896123+justindbaur@users.noreply.github.com>
Co-authored-by: Jared Snider <116684653+JaredSnider-Bitwarden@users.noreply.github.com>
Co-authored-by: bnagawiecki <107435978+bnagawiecki@users.noreply.github.com>
* Specify state provider for currently active user
* Split active and single user States
UserStateProvider is still the mechanism to build each State object.
The SingleUserState is basically a repeat of GlobalState, but with
additional scoping.
* Fixup global state cache
* fix fakers to new interface
* Make userId available in single user state
* Split providers by dependency requirements
This allows usage of the single state provider in contexts that would
otherwise form circular dependencies.
* Offer convenience wrapper classes for common use
* Import for docs
* Bind wrapped methods
* Handle switch messaging
TODO: handle loading state for account switcher
* Async updates required for state
* Fallback to email for current account avatar
* Await un-awaited promises
* Remove unnecessary Prune
Prune was getting confused in browser and deleting memory in browser on
account switch. This method isn't needed since logout already removes
memory data, which is the condition for pruning
* Fix temp password in browser
* Use direct memory access until data is serializable
Safari uses a different message object extraction than firefox/chrome
and is removing `UInt8Array`s. Until all data passed into StorageService
is guaranteed serializable, we need to use direct access in state
service
* Reload badge and context menu on switch
* Gracefully switch account as they log out.
* Maintain location on account switch
* Remove unused state definitions
* Prefer null for state
undefined can be misinterpreted to indicate a value has not been set.
* Hack: structured clone in memory storage
We are currently getting dead objects on account switch due to updating
the object in the foreground state service. However, the storage service
is owned by the background. This structured clone hack ensures that all
objects stored in memory are owned by the appropriate context
* Null check nullable values
active account can be null, so we should include null safety in the
equality
* Correct background->foreground switch command
* Already providing background memory storage
* Handle connection and clipboard on switch account
* Prefer strict equal
* Ensure structuredClone is available to jsdom
This is a deficiency in jsdom --
https://github.com/jsdom/jsdom/issues/3363 -- structured clone is well
supported.
* Fixup types in faker class
* Add Tests to VaultTimeoutService
* Fix Bug
Get availableTimeoutActions for the user actually locking
instead of getting the timeout actions for the active user.
Assign ownership to many of the remaining libs/common files.
Criteria for ownership:
* Files used by a single team, is now owned by that team.
* Files related to a domain owned by a team is now owned by that team.
* Where ownership is unclear the "lowest level" service takes ownership.
* use passkeys setting
* check state service on isFido2FeatureEnabled
* fix broken json
* update description text
* make setting global
* invert logic to positive state
* fix and add to fido2 client service tests
* PM-2041 - (1) Bring over WebauthnApiService + required models from existing #5493 PR (2) Per discussion with Andreas, remove unnecessary methods from WebauthnApiService
* PM-2041 - Rename responses folder to response to match rest of codebase
* PM-2041 - Recreate BaseLoginViaWebAuthnComponent and then web implementation of it.
* PM-2041 - Web routing module - add LoginViaWebAuthnComponent and associated route "login-with-passkey"
* PM-2041 - InjectionTokens - add new navigator credentials injection token which provides the CredentialsContainer interface of the Credential Management API and exposes methods to request credentials and notify the user agent when events such as successful sign in or sign out happen
* PM-2041 - Rename WebauthnApiService & abstraction to WebAuthnLoginApiService
* PM-2041 - Rename WebauthnLoginApiService to WebAuthnAdminApiService
* PM-2041 - Bring over first draft of webauthn-login.service + abstraction; register on jslib-services.module.
* PM-2041 - Bring over web & base login component changes to add login with passkey button if feature flag enabled.
* PM-2041 - WebAuthnAdminApi - update list of TODOs based on conversation with Andreas
* PM-2041 - Login.module - cleanup todo after conversation w/ Andreas
* PM-2041 - Move utils out of web and into common auth/utils and renamed to webauthn-utils
* PM-2041 - Update userDecryptionOptions to support new webauthn prf decryption option
* PM-2041 - (1) Recreate webauthn-login service with updated logic (2) Move files from webauthn to webauthn-login (3) Recreate webauthn-login.strategy with updated logic
* PM-2041 - Remove completed TODO
* PM-2041 - Fix login-via-webauthn component imports + fix name (missing n)
* PM-2041 - Missed this change when renaming LoginViaWebAuthComponent to LoginViaWebAuthnComponent
* PM-2041 - Add WebAuthnLoginApiService to jslib-services.module
* PM-2041 - Remove unused param from WebAuthnLoginApiServiceAbstraction as we aren't supporting non-discoverable passkeys for MVP
* PM-2041 - WebAuthnLoginApiService - remove email and target correct endpoint for getCredentialAssertionOptions(...) call
* PM-2041 - WebAuthnLoginStrategy - (1) Remove unused dep (2) Add safeguard checks to setUserKey(...) logic similar to SSO login strategy
* PM-2041 - BaseLoginViaWebAuthnComponent - Rewrite authenticate logic to use new methods on webAuthnLoginService
* PM-2041 - UserDecryptionOptionsResponse - update naming of webAuthn options object to match server response
* PM-2041 - WebAuthnLoginAssertionResponseRequest - (1) clean up TODO (2) Fix response property name to match server
* PM-2041 - WebAuthnTokenRequest - must stringify device response b/c sending as form data
* PM-2041 - AuthService - Add WebAuthnLoginCredentials and WebAuthnLoginStrategy support to auth service
* PM-2041 - WIP tests for WebAuthnLoginService
* PM-2041 - UserDecryptionOptions - Rename WebAuthnPrfOptions to singular WebAuthnPrfOption to match server
* PM-2041 - Add TODO in login comp
* PM-2041 - (1) Update WebAuthnLoginService.assertCredential(...) to add a check to ensure we cannot leak PRF credentials to the BW server by mistake (2) Add credential to view names for clarity (3) Add JS doc style comments to WebAuthnLoginServiceAbstraction
* PM-2041 - Login.component.html - (1) Center passkey login button (2) Use correct user passkey icon
* PM-2041 - Utils + tests - (1) Add new hexStringToArrayBuffer(...) method (2) Add tests for existing fromBufferToHex(...) (3) Add tests for new hexStringToArrayBuffer(...) method
* PM-2041 - Fix broken import
* PM-2041 - WebAuthnLoginResponseRequest - Adjust warning to be correct
* PM-2041 - Webauthn-utils - createSymmetricKeyFromPrf(...) - add return type
* PM-2041 - WebAuthnLoginService spec file - good progress on figuring out how to test passkey assertion process. Tests are passing, but need to add more setup logic around the MockAuthenticatorAssertionResponse in order to be able to confirm the output is correct.
* PM-2041 - Utils + Utils Spec file changes - (1) Add new fromB64ToArrayBuffer(...) method (2) Add tests for existing fromBufferToB64(...) (3) Add tests for new fromB64ToArrayBuffer(...) method (4) Add round trip conversion tests in both directions
* PM-2041 - Utils.spec - update round trip conversion tests between hex string and array buffer.
* PM-2041 - WebAuthnLoginService.spec - assertCredential(...) happy path test passing
* PM-2041 - WebAuthnLoginAssertionResponseRequest - Add interface
* PM-2041 - WebAuthnLoginAssertionResponseRequest data should be UrlB64 strings per discussion w/ Andreas
* PM-2041 - WebAuthnLoginService Spec file - Per feedback, reverse approaches to generating test data (go from array buffer to b64 strings vs the reverse) to avoid using math.random which can introduce test inconsistency
* PM-2041 - Finish testing assertCredential(...)
* PM-2041 - WebAuthnLoginService tests completed - tested logIn method
* PM-2041 - Login html - add "or" between standard email login and passkey login
* PM-2041 - WebAuthnLoginStrategy test start
* PM-2041 - After rebase - BaseLoginViaWebAuthnComponent - Must rename ForceResetPasswordReason to ForceSetPasswordReason + refactor post login routing logic to match other auth owned flows.
* PM-2401 - Desktop - login comp - fix desktop build
* PM-2041 - Browser - login comp - fix build issue
* PM-2401 - WIP on webauthn-login.strategy testing
* PM-2401 - Finish testing webauthn login strategy
* PM-2041 - WebAuthnAdminApiService renamed to WebAuthnLoginAdminApiService
* PM-2041 - Remove unnecessary comment
* PM-2041 - Per PR feedback, remove noMargin and just add mb-3
* PM-2041 - Per PR feedback, remove unused 2FA and remember email logic (2FA isn't supported right now and we aren't using non-discoverable credentials so we aren't using a user entered email)
* PM-2401 - BaseLoginViaWebAuthnComponent - improve error handling to allow users to retry w/ another passkey
* PM-2401 - Per PR feedback, provide translated message to cover all invalid passkey scenarios.
* PM-2401 - WebAuthnLoginService - per PR feedback, remove unnecessary from
* PM-2041 - WebAuthnLoginCredentialAssertionView - per PR feedback, use actual key type
* PM-2401 - Per PR feedback, remove WebAuthnLoginStrategy constructor as it is identical to its super class constructor
* PM-2041 - WebAuthnLoginService tests - use first value from to improve tests
* PM-2401 - Fix WebAuthnLoginService build issue after changing SymmetricCryptoKey to PrfKey
* PM-2041 - WebAuthnLoginServiceAbstraction remove incorrect undefined from getCredentialAssertionOptions() abstraction
* PM-2041 - Refacor WebAuthn login service tests based on PR feedback
* PM-2041 - Per PR feedback, remove NAVIGATOR_CREDENTIALS injection token and just use WINDOW directly for WebAuthnLoginService
* PM-2041 - WebAuthnLoginServiceAbstraction - per PR feedback, improve assertCredential jsdocs with return info
* PM-2041 - Per PR feedback, update WebAuthnLoginStrategy logInTwoFactor(...) to return an exception if attempted to be called.
* PM-2041 - WebAuthnLoginResponseRequest - per PR feedback, replace fromBufferToB64(...) with fromBufferToUrlB64(...)
* PM-2041 - AssertionOptionsResponse - use doc comment per PR feedback
* PM-2041 - Per PR feedback, adjust location of helpers and mocks in WebAuthnLoginStrategy test file
* PM-2041 - Adjust WebAuthnLoginService tests to take the WebAuthnLoginResponseRequest change to use fromBufferToUrlB64(...) into account to get tests to pass again
* PM-2041 - WebAuthnLoginStrategy - adjust test name to match convention per PR feedback
* PM-2041 - More test tweaks - (1) Rename method (2) Support strict
* PM-2041 - Per PR feedback, AssertionOptionsResponse constructor should null check allowCredentials b/c it is optional
* PM-2041 - Per PR Feedback, remove duplicated fromB64ToArrayBuffer(...) from utils and update tests.
* PM-2041 - Per PR feedback, rename WebAuthnTokenRequest to WebAuthnLoginTokenRequest
* PM-2041 - Per discussion with product and Andreas, add 2FA transition handling just in case we add server support in the future.
* feat: stretch PRF key (#6927)
* feat: stretch PRF key
includes necessary utils -> service refactors
* feat: add tests
* [PM-2041] feat: assertion-options `POST` -> `GET`
* [PM-2041] chore: remove unused properties
* [PM-2041] fix: set private key
* [PM-2041] feat: remove all 2FA related fields
* [PM-2041] chore: clean up 2FA comments
* [PM-2041] chore: document `webauthn-login-prf-crypto.service.abstraction.ts`
* [PM-2041] chore: document webauthn login services
---------
Co-authored-by: Andreas Coroiu <acoroiu@bitwarden.com>
Co-authored-by: Andreas Coroiu <andreas.coroiu@gmail.com>
* added previous-url to global-state
* updated storage of previousUrl for SSO/MFA flows
* revert file changes
* added post login routing
* Clear PreviousUrl from storage on new Login
* Components do not call StateService anymore
* removed needed query params
* refactored components to use RouterService
* fixed build error
* fixed mfa component
* updated logic for previous Url
* removed unneeded base implementation
* Added state call for Redirect Guard
* Fixed test cases
* Remove routing service calls
* renamed global field, changed routing to guard
* reverting constructor changes and git lint issue
* fixing constructor ordering
* fixing diffs to be clearer on actual cahnges.
* addressing accepting emergency access case
* refactor and add locked state logic
* refactor name of guard to be more clear
* Added comments and tests
* comments + support lock page deep linking + code ownership
* readability updates
* Combined guards and specs updated routing
* Update oss-routing.module.ts
* fixed stroybook build
* Allow for update logic in state update callbacks
* Prefer reading updates to sending in stream
* Inform state providers when they must deserialize
* Update DefaultGlobalState to act more like DefaultUserState
* Fully Implement AbstractStorageService
* Add KeyDefinitionOptions
* Address PR feedback
* Prefer testing interactions for ports
* Synced memory storage for browser
* Fix port handling
* Do not stringify port message data
* Use messaging storage
* Initialize new foreground memory storage services
This will need to be rethought for short-lived background pages, but for
now the background is the source of truth for memory storage
* Use global state for account service
* Use BrowserApi listener to avoid safari memory leaks
* Fix build errors: debugging and missed impls
* Prefer bound arrow functions
* JSON Stringify Messages
* Prefer `useClass`
* Use noop services
* extract storage observable to new interface
This also reverts changes for the existing services to use
foreground/background services. Those are now used only in state
providers
* Fix web DI
* Prefer initializing observable in constructor
* Do not use jsonify as equality operator
* Remove port listener to avoid memory leaks
* Fix logic and type issues
---------
Co-authored-by: Justin Baur <19896123+justindbaur@users.noreply.github.com>
* [PM-3914] Refactor Browser Extension Popouts
* [PM-3914] Refactor Browser Extension Popouts
* [PM-3914] Refactor Browser Extension Popouts
* [PM-3914] Adding enums for the browser popout type
* [PM-3914] Making the methods for getting a window in a targeted manner public
* [PM-3914] Refactoing implementation
* [PM-3914] Updating deprecated api call
* [PM-3914] Fixing issues found when testing behavior
* [PM-3914] Reimplementing behavior based on feedback from platform team
* [PM-3914] Adding method of ensuring previously opened single action window is force closed for vault item password reprompts
* [PM-3914] Taking into consideration feedback regarding the browser popup utils service and implementating requested changes
* [PM-3914] Removing unnecesssary class dependencies
* [PM-3914] Adding method for uniquely setting up password reprompt windows
* [PM-3914] Modifying method
* [PM-3914] Adding jest tests and documentation for AuthPopoutWindow util
* [PM-3914] Adding jest tests and documentation for VaultPopoutWindow
* [PM-3914] Adding jest tests for the debouncing method within autofill service
* [PM-3914] Adding jest tests for the new BrowserApi methods
* [PM-3914] Adding jest tests to the BrowserPopupUtils class
* [PM-3914] Updating inPrivateMode reference
* [PM-3914] Updating inPrivateMode reference
* [PM-3914] Modifying comment
* [PM-3914] Moviing implementation for openCurrentPagePopout to the BrowserPopupUtils
* [PM-3914] Applying feedback
* [PM-3914] Applying feedback
* [PM-3914] Applying feedback
* [PM-3983] Refactoring implementation of `setContentScrollY` to facilitate having a potential delay
* [PM-3914] Applying feedback regarding setContentScrollY to the implementation
* [PM-3914] Modifying early return within the run method of the ContextMenuClickedHandler
* [PM-3914] Adding test for VaultPopoutWindow
* [PM-4229] Autofill Overlay MVP
* [PM-2855] Add Settings to Enable Autofill Overlay (#6509)
* [PM-2855] Add Settings to Enable Autofill Overlay
* [PM-2855] Removing unnecessary key
* [PM-3914] Applying work done within PM-4366 to facilitate opening the popout window as a popup rather than a normal window
* [PM-3914] Updating the BrowserApi.removeTab method to leverage a callback structure for the promise rather than an async away structure
* [PM-3036] Adding jest tests for added passkeys popout windows
* [PM-3914] Adjsuting logic for turning off the warning when FIDO2 credentials are saved
* [PM-3914] Fixing height to design
* [PM-3914] Fixing call to Fido2 Popout
* [PM-3914] Fixing add/edit from fido2 popout
* [PM-3914] Fixing add/edit from fido2 popout
* [PM-3914] Fixing jest tests for updated elements
* [PM-3914] Reverting how context menu actions are passed to the view component
* [PM-3914] Reverting re-instantiation of config service within main.background.ts
* [PM-3914] Adding jest test for BrowserAPI removeTab method
* [PM-3914] Adding method to handle parsing the popout url path
* [PM-3914] Removing JSDOC comment elements
* [PM-3914] Removing await from method call
* [PM-3914] Simplifying implementation on add/edit
* [PM-3032] Adding more direct reference to view item action in context menus
* [PM-3034] Modify Autofill Callout to Consider Autofill Overlay Visibility (#6510)
* [PM-2855] Add Settings to Enable Autofill Overlay
* [PM-2855] Removing unnecessary key
* [PM-3034] Modify Autofill Callout to Consider Autofill Overlay Visibility
* [PM-3034] Adding translated strings
* [PM-3034] Updating boolean logic for showing the callout to remove unnecessary negation of boolean statement
* [PM-3914] Adjusting routing on Fido2 component to pass the singleActionPopout param to the route when opening the add-edit component
* [PM-3914] Adding singleActionPopout param to the fido2 component routing
* [PM-3914] Updating implementation details for how we build the extension url path
* [PM-3914] Reworking implementation for isSingleActionPopoutOpen to clean up iterative logic
* [PM-3914] Merging work from master and fixing merge conflicts
* [PM-3914] Fixing merge conflict introduced from master
* [PM-3914] Reworking closure of single action popouts to ensure they close the window instead of attempting to close the tab
* [PM-3036] Implement Autofill Overlay Unlock State (#6514)
* [PM-2855] Add Settings to Enable Autofill Overlay
* [PM-2855] Removing unnecessary key
* [PM-3034] Modify Autofill Callout to Consider Autofill Overlay Visibility
* [PM-3034] Adding translated strings
* [PM-3034] Add Autofill Overlay Vault Locked State
* [PM-3036] Bootstrap Autofill Overlay implementation and add locked vault state
* [PM-3032] Removing add/edit cipher message
* [PM-3036] Fixing lint error found within overlay background
* [PM-3036] Setting properties within the autofill component method to be protected
* [PM-3034] Updating boolean logic for showing the callout to remove unnecessary negation of boolean statement
* [PM-3036] Applying feedback from browser popout refactor PR
* [PM-3036] Adding ownership over the website icon service file to the autofill team
* [PM-3036] Updating the `autoFillOverlayVisibility` setting to be a client-scoped setting rather than account-scoped
* [PM-3036] Reworking jest setup implementation to facilitate approach recommended within code review
* [PM-3036] Updating WebsiteIconService to act as a single function reference and moving it to be under the vault team as codeowners
* [PM-3032] Show Matching Logins When User Interacts with Field (#6516)
* [PM-3032] Show Matching Logins When User Interacts with Field
* [PM-3032] Fixing issue found when changing pages
* [PM-3032] Addressing feedback within PR
* [PM-3032] Addressing feedback within PR
* [PM-3033] Allow User to Fill Matching Logins within Overlay (#6517)
* [PM-3033] Allow User to Fill Matching Logins within Overlay
* [PM-3035] Allow adding new items when no ciphers found in overlay (#6518)
* [PM-2319] Refactoring implementation to leverage styles within the encapsulated custom elements rather than inline on those elements
* [PM-2319] Leveraging globalThis to avoid potential DOM clobbering within implementation
* [PM-2319] Fixing issue where styles can override visibility of overlay icon and list
* [PM-2319] Fixing issue where styles can override visibility of overlay icon and list
* [PM-2319] Implementing more secure method for ensuring overlay is visible
* [PM-2319] Optimizing implementation of mutation observers on elements that need to enforce CSS styling
* [PM-2319] Refactoring how we handle mutation observers to allow for a more streamlined implementation approach
* [PM-2319] Implementing view cipher item initial workflow
* [PM-2319] Implementing obfruscation of username within login ciphers
* [PM-2747] Fixing logic error incorporated when merging in master
* [PM-2130] Fixing issue with autofill service unit tests
* [PM-2130] Fixing issue with autofill service unit tests
* [PM-2747] Fixing issue present with notification bar merge
* [PM-2130] Fixing test test for when we need to handle a password reprompt
* [PM-2319] Fixing issue present with context menu handler
* [PM-2319] Implementing fixes for password reprompt when autofilling from overlay
* [PM-2319] Working through accessibility and focus order on overlay elements
* [PM-2319] Finishing out focus redirection approach for focus out of overlay list
* [PM-2319] Working through screen reader accessibility including aria attributes
* [PM-2319] Adding guard to usage of extension privacy api
* [PM-2319] Adding guard to usage of extension privacy api
* [PM-2319] Adding aria description for fill cipher elements
* [PM-2319] Refactoring implementation
* [PM-2319] Working through implementation of view cipher tirggers when overlay set to view an element
* [PM-2319] Refining implementation for viewing vault item from overlay
* [PM-2319] Applying fix for context menu ciphers
* [PM-2319] Modifying namespace for overlay icon to overlay button
* [PM-2319] Refactoring OverlayButton
* [PM-2319] Refactoring OverlayButton
* [PM-2319] Adding translations for overlay content
* [PM-2319] Refactoring OverlayBackground class
* [PM-2319] Refactoring OverlayBackground class to more optimially store and retrieve cipher data for the overlay elements
* [PM-2319] Refactoring OverlayBackground class
* [PM-2319] Refactoring AutofillOverlayList class structure
* [PM-2319] Implementing randomization of custom element names for elements injected into tab
* [PM-2319] Updating how we handle referencing port messages within the OverlayIframe service
* [PM-3465] Optimization of CollectPageDetails Message within Autofill
* [PM-3465] Implementing caching for CollectPage details call
* [PM-3465] Implementing caching for CollectPage details call
* [PM-3465] Implementing method for ensuring that getPageDetails is not called when no fields appear within a frame
* [PM-3465] Implementing Mutation Observer to handle updating autofill fields when DOM updates
* [PM-2747] Fixing wording for webpack script
* [PM-2130] - Audit, Modularize, and Refactor Core autofill.js File (#5453)
* split up autofill.ts, first pass
* remove modification tracking comments
* lessen and localize eslint disables
* additional typing and formatting
* update autofill v2 with PR #5364 changes (update/i18n confirm dialogs)
* update autofill v2 with PR #4155 changes (add autofill support for textarea)
Co-Authored-By: Manuel <mr-manuel@outlook.it>
* move commonly used string values to constants
* ts cleanup
* [PM-2130] Starting work to re-architect autofillv2.ts
* [PM-2130] Starting work to re-architect autofillv2.ts
* [PM-2130] Working through autofill collect method
* [PM-2130] Marking Removal of documentUUID as dead code
* [PM-2130] Refining the implementation of collect and moving broken out utils back into class implementation
* [PM-2130] Applying small refactors to AutofillCollect
* [PM-2130] Refining the implementation of getAutofillFieldLabelTag to help with readability of the method
* [PM-2130] Implementing jest tests for AutofillCollect methods
* [PM-2130] Refining implementation for AutofillCollect
* [PM-2200] Unit tests for autofill content script utilities with slight refactors (#5544)
* add unit tests for urlNotSecure
* add test coverage command
* add unit tests for canSeeElementToStyle
* canSeeElementToStyle should not return true if `animateTheFilling` or `currentEl` is false
* add tests for selectAllFromDoc and getElementByOpId
* clean up getElementByOpId
* address some typing issues
* add tests for setValueForElementByEvent, setValueForElement, and doSimpleSetByQuery
* clean up setValueForElement and setValueForElementByEvent
* more typescript cleanup
* add tests for doClickByOpId and touchAllPasswordFields
* add tests for doFocusByOpId and doClickByQuery
* misc fill cleanup
* move functions between collect and fill utils and replace getElementForOPID for duplicate getElementByOpId
* add tests for isKnownTag and isElementVisible
* rename addProp and remove redundant focusElement in favor of doFocusElement
* cleanup
* fix checkNodeType
* add tests for shiftForLeftLabel
* clean up and rename checkNodeType, isKnownTag, and shiftForLeftLabel
* add tests for getFormElements
* clean up getFormElements
* add tests for getElementAttrValue, getElementValue, getSelectElementOptions, getLabelTop, and queryDoc
* clean up and rename queryDoc to queryDocument
* misc cleanup and rename getElementAttrValue to getPropertyOrAttribute
* rebase cleanup
* prettier formatting
* [PM-2130] Fixing linting issues
* [PM-2130] Fixing linting issues
* [PM-2130] Migrating implementation for collect methods and tests for those methods into AutofillCollect context
* [PM-2130] Migrating getPropertyOrAttribute method from utils to AutofillCollect
* [PM-2130] Continuing migration of methods from collect utils into AutofillCollect
* [PM-2130] Rework of isViewable method to better handle behavior for how we identify if an element is currently within the viewport
* [PM-2130] Filling out implementation of autofill-insert
* [PM-2130] Refining AutofillInsert
* [PM-2130] Implementing jest tests for AutofillCollect methods and breaking out visibility related logic to a separate service
* [PM-2130] Fixing jest tests for AutofillCollect
* [PM-2130] Fixing jest tests for AutofillInit
* [PM-2130] Adjusting how the AutofillFieldVisibilityService class is used in AutofillCollect
* [PM-2130] Working through AutofillInsert implementation
* [PM-2130] Migrating methods from fill.ts to AutofillInsert
* [PM-2130] Migrating methods from fill.ts to AutofillInsert
* [PM-2130] Applying fix for IntersectionObserver when triggering behavior in Safari and fixing issue with how we trigger an input event shortly after filling in a field
* [PM-2130] Refactoring AutofillCollect to service CollectAutofillContentService
* [PM-2130] Refactoring AutofillInsert to service InsertAutofillContentService
* [PM-2130] Further organization of implementation
* [PM-2130] Filling out missing jest test for AutofillInit.fillForm method
* [PM-2130] Migrating the last of the collect jest tests to InsertAutofillContentService
* [PM-2130] Further refactoring of elements including typing information
* [PM-2130] Implementing jest tests for InsertAutofillContentService
* [PM-2130] Implementing jest tests for InsertAutofillContentService
* [PM-2130] Organization and refactoring of methods within InsertAutofillContent
* [PM-2130] Implementation of jest tests for InsertAutofillContentService
* [PM-2130] Implementation of Jest Test for IntertAutofillContentService
* [PM-2130] Finalizing migration of methods and jest tests from util files into Autofill serivces
* [PM-2130] Cleaning up dead code comments
* [PM-2130] Removing unnecessary constants
* [PM-2130] Finalizing jest tests for InsertAutofillContentService
* [PM-2130] Refactoring FieldVisibiltyService to DomElementVisibilityService to allow service to act in a more general manner
* [PM-2130] Implementing jest tests for DomElementVisibilityService
* [PM-2130] Implementing jest tests for DomElementVisibilityService
* [PM-2130] Implementing jest tests for DomElementVisibilityService
* [PM-2130] Implementing jest tests for DomElementVisibilityService
* [PM-2130] Breaking out the callback method used to resolve the IntersectionObserver promise
* [PM-2130] Adding a comment explaining a fix for Safari
* [PM-2130] Adding a comment explaining a fix for Safari
* [PM-2130] Applying changes required for PM-2762 to implementation, and ensuring jest tests exist to validate the behavior
* [PM-2130] Removing usage of IntersectionObserver when identifying element visibility due to broken interactions with React Components
* [PM-2130] Fixing issue found when attempting to capture the elementAtCenterPoint in determining file visibility
* [PM-2100] Create Unit Test Suite for autofill.service.ts (#5371)
* [PM-2100] Create Unit Test Suite for Autofill.service.ts
* [PM-2100] Finishing out tests for the getFormsWithPasswordFields method
* [PM-2100] Implementing tests for the doAutofill method within the autofill service
* [PM-2100] Working through implementation of doAutofill method
* [PM-2100] Working through implementation of doAutofill method
* [PM-2100] Finishing implementatino of isUntrustedIframe method within autofill service
* [PM-2100] Finishing implementation of doAutoFill method within autofill service
* [PM-2100] Finishing implementation of doAutoFillOnTab method within autofill service
* [PM-2100] Working through tests for generateFillScript
* [PM-2100] Finalizing generateFillScript method testing
* [PM-2100] Starting implementation of generateLoginFillScript
* [PM-2100] Working through tests for generateLoginFillScript
* [PM-2100] Finalizing generateLoginFillScript method testing
* [PM-2100] Removing unnecessary jest config file
* [PM-2100] Fixing jest tests based on changes implemented within PM-2130
* [PM-2100] Fixing autofill mocks
* [PM-2100] Fixing AutofillService jest tests
* [PM-2100] Handling missing tests within coverage of AutofillService
* [PM-2100] Handling missing tests within coverage of AutofillService.generateLoginFillScript
* [PM-2100] Writing tests for AutofillService.generateCardFillScript
* [PM-2100] Finalizing tests for AutofillService.generateCardFillScript
* [PM-2100] Adding additional tests to cover changes introduced by TOTOP autofill PR
* [PM-2100] Adding jest tests for Autofill.generateIdentityFillScript
* [PM-2100] Finalizing tests for AutofillService.generateIdentityFillScript
* [PM-2100] Implementing tests for AutofillService
* [PM-2100] Implementing tests for AutofillService.loadPasswordFields
* [PM-2100] Implementing tests for AutofillService.findUsernameField
* [PM-2100] Implementing tests for AutofillService.findTotpField
* [PM-2100] Implementing tests for AutofillService.fieldPropertyIsPrefixMatch
* [PM-2100] Finalizing tests for AutofillService
* [PM-2100] Modyfing placement of autofill-mocks
* [PM-2100] Modyfing placement of autofill-mocks
* [PM-2100] Removal of jest transform declaration
* [PM-2130] Fixing issue with autofill service unit tests
* [PM-2130] Fixing issue with autofill service unit tests
* [PM-2130] Fixing test test for when we need to handle a password reprompt
---------
Co-authored-by: Manuel <mr-manuel@outlook.it>
Co-authored-by: Cesar Gonzalez <cgonzalez@bitwarden.com>
Co-authored-by: Cesar Gonzalez <cesar.a.gonzalezcs@gmail.com>
* [PM-2747] Finanlizing implementation of attribute updates on cached values
* [PM-2319] Refactoring implementation to reposition OverlayIframe classes
* [PM-3465] Finalizing implementation of mutation observer behavior and CollectPageDetails optimization
* [PM-3465] Adding jest tests for introduced functionality
* [PM-3465] Finalizing jest tests and comments within implementation
* [PM-3465] Removing a TODO by incorrporating a method for deep querying for a password field element
* [PM-3465] Removing a TODO by incorrporating a method for deep querying for a password field element
* [PM-3285] Migrating Changes from PM-1407 into autofill v2 refactor implementation
* [PM-2747] Addressing stylistic changes requested from code review
* [PM-2319] Refactoring implementation
* [PM-2747] Add Support for Feature Flag of Autofill Version (#5695)
* [PM-2100] Create Unit Test Suite for Autofill.service.ts
* [PM-2100] Finishing out tests for the getFormsWithPasswordFields method
* [PM-2100] Implementing tests for the doAutofill method within the autofill service
* [PM-2100] Working through implementation of doAutofill method
* [PM-2100] Working through implementation of doAutofill method
* [PM-2100] Finishing implementatino of isUntrustedIframe method within autofill service
* [PM-2100] Finishing implementation of doAutoFill method within autofill service
* [PM-2100] Finishing implementation of doAutoFillOnTab method within autofill service
* [PM-2100] Working through tests for generateFillScript
* split up autofill.ts, first pass
* remove modification tracking comments
* lessen and localize eslint disables
* additional typing and formatting
* update autofill v2 with PR #5364 changes (update/i18n confirm dialogs)
* update autofill v2 with PR #4155 changes (add autofill support for textarea)
Co-Authored-By: Manuel <mr-manuel@outlook.it>
* move commonly used string values to constants
* ts cleanup
* [PM-2100] Finalizing generateFillScript method testing
* [PM-2100] Starting implementation of generateLoginFillScript
* [PM-2100] Working through tests for generateLoginFillScript
* [PM-2100] Finalizing generateLoginFillScript method testing
* [PM-2130] Starting work to re-architect autofillv2.ts
* [PM-2130] Starting work to re-architect autofillv2.ts
* [PM-2130] Working through autofill collect method
* [PM-2130] Marking Removal of documentUUID as dead code
* [PM-2130] Refining the implementation of collect and moving broken out utils back into class implementation
* [PM-2130] Applying small refactors to AutofillCollect
* [PM-2130] Refining the implementation of getAutofillFieldLabelTag to help with readability of the method
* [PM-2130] Implementing jest tests for AutofillCollect methods
* [PM-2130] Refining implementation for AutofillCollect
* [PM-2200] Unit tests for autofill content script utilities with slight refactors (#5544)
* add unit tests for urlNotSecure
* add test coverage command
* add unit tests for canSeeElementToStyle
* canSeeElementToStyle should not return true if `animateTheFilling` or `currentEl` is false
* add tests for selectAllFromDoc and getElementByOpId
* clean up getElementByOpId
* address some typing issues
* add tests for setValueForElementByEvent, setValueForElement, and doSimpleSetByQuery
* clean up setValueForElement and setValueForElementByEvent
* more typescript cleanup
* add tests for doClickByOpId and touchAllPasswordFields
* add tests for doFocusByOpId and doClickByQuery
* misc fill cleanup
* move functions between collect and fill utils and replace getElementForOPID for duplicate getElementByOpId
* add tests for isKnownTag and isElementVisible
* rename addProp and remove redundant focusElement in favor of doFocusElement
* cleanup
* fix checkNodeType
* add tests for shiftForLeftLabel
* clean up and rename checkNodeType, isKnownTag, and shiftForLeftLabel
* add tests for getFormElements
* clean up getFormElements
* add tests for getElementAttrValue, getElementValue, getSelectElementOptions, getLabelTop, and queryDoc
* clean up and rename queryDoc to queryDocument
* misc cleanup and rename getElementAttrValue to getPropertyOrAttribute
* rebase cleanup
* prettier formatting
* [PM-2130] Fixing linting issues
* [PM-2130] Fixing linting issues
* [PM-2130] Migrating implementation for collect methods and tests for those methods into AutofillCollect context
* [PM-2130] Migrating getPropertyOrAttribute method from utils to AutofillCollect
* [PM-2130] Continuing migration of methods from collect utils into AutofillCollect
* [PM-2130] Rework of isViewable method to better handle behavior for how we identify if an element is currently within the viewport
* [PM-2130] Filling out implementation of autofill-insert
* [PM-2130] Refining AutofillInsert
* [PM-2130] Implementing jest tests for AutofillCollect methods and breaking out visibility related logic to a separate service
* [PM-2130] Fixing jest tests for AutofillCollect
* [PM-2130] Fixing jest tests for AutofillInit
* [PM-2130] Adjusting how the AutofillFieldVisibilityService class is used in AutofillCollect
* [PM-2130] Working through AutofillInsert implementation
* [PM-2130] Migrating methods from fill.ts to AutofillInsert
* [PM-2130] Migrating methods from fill.ts to AutofillInsert
* [PM-2130] Applying fix for IntersectionObserver when triggering behavior in Safari and fixing issue with how we trigger an input event shortly after filling in a field
* [PM-2130] Refactoring AutofillCollect to service CollectAutofillContentService
* [PM-2130] Refactoring AutofillInsert to service InsertAutofillContentService
* [PM-2130] Further organization of implementation
* [PM-2130] Filling out missing jest test for AutofillInit.fillForm method
* [PM-2130] Migrating the last of the collect jest tests to InsertAutofillContentService
* [PM-2130] Further refactoring of elements including typing information
* [PM-2130] Implementing jest tests for InsertAutofillContentService
* [PM-2130] Implementing jest tests for InsertAutofillContentService
* [PM-2130] Organization and refactoring of methods within InsertAutofillContent
* [PM-2130] Implementation of jest tests for InsertAutofillContentService
* [PM-2130] Implementation of Jest Test for IntertAutofillContentService
* [PM-2130] Finalizing migration of methods and jest tests from util files into Autofill serivces
* [PM-2130] Cleaning up dead code comments
* [PM-2130] Removing unnecessary constants
* [PM-2130] Finalizing jest tests for InsertAutofillContentService
* [PM-2130] Refactoring FieldVisibiltyService to DomElementVisibilityService to allow service to act in a more general manner
* [PM-2130] Implementing jest tests for DomElementVisibilityService
* [PM-2130] Implementing jest tests for DomElementVisibilityService
* [PM-2130] Implementing jest tests for DomElementVisibilityService
* [PM-2130] Implementing jest tests for DomElementVisibilityService
* [PM-2130] Breaking out the callback method used to resolve the IntersectionObserver promise
* [PM-2100] Removing unnecessary jest config file
* [PM-2100] Fixing jest tests based on changes implemented within PM-2130
* [PM-2100] Fixing autofill mocks
* [PM-2100] Fixing AutofillService jest tests
* [PM-2100] Handling missing tests within coverage of AutofillService
* [PM-2100] Handling missing tests within coverage of AutofillService.generateLoginFillScript
* [PM-2100] Writing tests for AutofillService.generateCardFillScript
* [PM-2100] Finalizing tests for AutofillService.generateCardFillScript
* [PM-2100] Adding additional tests to cover changes introduced by TOTOP autofill PR
* [PM-2100] Adding jest tests for Autofill.generateIdentityFillScript
* [PM-2100] Finalizing tests for AutofillService.generateIdentityFillScript
* [PM-2100] Implementing tests for AutofillService
* [PM-2130] Adding a comment explaining a fix for Safari
* [PM-2130] Adding a comment explaining a fix for Safari
* [PM-2100] Implementing tests for AutofillService.loadPasswordFields
* [PM-2100] Implementing tests for AutofillService.findUsernameField
* [PM-2100] Implementing tests for AutofillService.findTotpField
* [PM-2100] Implementing tests for AutofillService.fieldPropertyIsPrefixMatch
* [PM-2100] Finalizing tests for AutofillService
* [PM-2747] Add Support for Feature Flag of Autofill Version
* [PM-2747] Adding Support for Manifest v3 within the implementation
* [PM-2747] Modifying how the feature flag for autofill is named
* [PM-2747] Modifying main.background.ts to load the ConfigApiService correctly
* [PM-2747] Refactoring trigger of autofill scripts to be a simple immediately invoked function
* [PM-2100] Modyfing placement of autofill-mocks
* [PM-2100] Modyfing placement of autofill-mocks
* [PM-2100] Removal of jest transform declaration
* [PM-2130] Applying changes required for PM-2762 to implementation, and ensuring jest tests exist to validate the behavior
* [PM-2747] Modifying how we inject the autofill scripts to ensure we are injecting into all frames within a page
* [PM-2130] Removing usage of IntersectionObserver when identifying element visibility due to broken interactions with React Components
* [PM-2130] Fixing issue found when attempting to capture the elementAtCenterPoint in determining file visibility
* [PM-2100] Create Unit Test Suite for autofill.service.ts (#5371)
* [PM-2100] Create Unit Test Suite for Autofill.service.ts
* [PM-2100] Finishing out tests for the getFormsWithPasswordFields method
* [PM-2100] Implementing tests for the doAutofill method within the autofill service
* [PM-2100] Working through implementation of doAutofill method
* [PM-2100] Working through implementation of doAutofill method
* [PM-2100] Finishing implementatino of isUntrustedIframe method within autofill service
* [PM-2100] Finishing implementation of doAutoFill method within autofill service
* [PM-2100] Finishing implementation of doAutoFillOnTab method within autofill service
* [PM-2100] Working through tests for generateFillScript
* [PM-2100] Finalizing generateFillScript method testing
* [PM-2100] Starting implementation of generateLoginFillScript
* [PM-2100] Working through tests for generateLoginFillScript
* [PM-2100] Finalizing generateLoginFillScript method testing
* [PM-2100] Removing unnecessary jest config file
* [PM-2100] Fixing jest tests based on changes implemented within PM-2130
* [PM-2100] Fixing autofill mocks
* [PM-2100] Fixing AutofillService jest tests
* [PM-2100] Handling missing tests within coverage of AutofillService
* [PM-2100] Handling missing tests within coverage of AutofillService.generateLoginFillScript
* [PM-2100] Writing tests for AutofillService.generateCardFillScript
* [PM-2100] Finalizing tests for AutofillService.generateCardFillScript
* [PM-2100] Adding additional tests to cover changes introduced by TOTOP autofill PR
* [PM-2100] Adding jest tests for Autofill.generateIdentityFillScript
* [PM-2100] Finalizing tests for AutofillService.generateIdentityFillScript
* [PM-2100] Implementing tests for AutofillService
* [PM-2100] Implementing tests for AutofillService.loadPasswordFields
* [PM-2100] Implementing tests for AutofillService.findUsernameField
* [PM-2100] Implementing tests for AutofillService.findTotpField
* [PM-2100] Implementing tests for AutofillService.fieldPropertyIsPrefixMatch
* [PM-2100] Finalizing tests for AutofillService
* [PM-2100] Modyfing placement of autofill-mocks
* [PM-2100] Modyfing placement of autofill-mocks
* [PM-2100] Removal of jest transform declaration
* [PM-2747] Applying a fix for a race condition that can occur when loading the notification bar and autofiller script login
* [PM-2747] Reverting removal of autofill npm action. Now this will force usage of autofill-v2 regardless of whether a feature flag is set or not
* [PM-2747] Fixing logic error incorporated when merging in master
* [PM-2130] Fixing issue with autofill service unit tests
* [PM-2130] Fixing issue with autofill service unit tests
* [PM-2747] Fixing issue present with notification bar merge
* [PM-2130] Fixing test test for when we need to handle a password reprompt
* [PM-2747] Fixing wording for webpack script
* [PM-2747] Addressing stylistic changes requested from code review
* [PM-2747] Addressing stylistic changes requested from code review
---------
Co-authored-by: Jonathan Prusik <jprusik@classynemesis.com>
Co-authored-by: Manuel <mr-manuel@outlook.it>
Co-authored-by: Jonathan Prusik <jprusik@users.noreply.github.com>
* [PM-3285] Applying stylistic changes suggested by code review for the feature flag implementation
* [PM-3285] Adding temporary console log to validate which version is being used
* [PM-2319] Adjusting translation content
* [PM-3465] Implementing a methodology for sorting the autofill field elements after awaiting the results of each element
* [PM-3465] Implementing a methodology for sorting the autofill field elements after awaiting the results of each element
* [PM-3465] Implementing a methodology for using cached field values when requerying DOM for elements
* [PM-2319] Adjusting translation content
* [PM-2319] Adding typing information for OverlayBackground
* [PM-2319] Removing unnecesssary methods within OverlayBackground and AutofillOverlayContentService
* [PM-2319] Refactoring implementation and incorpoarting BrowserApi class more effectively
* [PM-2319] Fixing issue found with opening overaly element during reprompt of vault item
* [PM-2319] Fixing issue found with auth status not updating when overlay is initializing
* [PM-2319] Implementing a method for initializing the overlay with the user auth status
* [PM-2319] Fixing issue where shadowRoot elements might not initialize overlay on setup
* [PM-2319] Implementing await for runFillScriptAction
* [PM-2319] Implementing methodology for having list of elements hide after user starts inputting within field
* [PM-2319] Removing unnecesssary methods within OverlayBackground and AutofillOverlayContentService
* [PM-2319] Fixing tab focus issue
* [PM-2319] Fixing issue where page details would unload sooner than desired
* [PM-2319] Fixing tab focus issues present on page details
* [PM-2319] Adjusting how we iterate over cipher data
* [PM-2319] Refactoring overlay background
* [PM-2319] Adding typing information for OverlayBackground
* [PM-2319] Adding typing information for OverlayBackground
* [PM-2319] Refactoring and optimizing for loops
* [PM-2319] Refactoring and optimizing how we listen for overlay element ports
* [PM-2319] Implementing method for ensuring overlay removes itself if user scrolls focused input element out of viewport
* [PM-2319] Replacing usage of foreach for a regular for loop
* [PM-2319] Replacing usage of foreach for a regular for loop
* [PM-2319] Refactoring forEach loops within CollectAutofillContent and moving autofill utils to a top level
* [PM-2319] Refactoring getRandomCustomElementName util method
* [PM-2319] Refactoring implementation
* [PM-2319] Refactoring implementation
* [PM-2319] Replacing hardcoded values for events with constant enum
* [PM-2319] Adding reduced animation declaration for fill
* [PM-2319] Adjusting implementation of mutation observer to better handle insertion of elements around overlay
* [PM-2319] Fixing jest test
* [PM-2319] Implementing method for ensuring tab focus from the overlay button can move to the correct place
* [PM-2319] Refactoring implementation
* [PM-3285] Removing temporary console log indicating which version of autofill the user is currently loading
* [PM-3465] Adding scripting api reference to the manifest v3 json file
* [PM-2319] Splitting shared logic within the overlay page implementations to act as a parent class for the overlay button and list pages
* [PM-2319] Updating file names for page scripts
* [PM-2319] Updating file names for page scripts
* [PM-2319] Fixing issues present with overlay background when updating auth status
* [PM-2319] Refactoring implementation
* [PM-2319] Fixing cache invalidation issues present with the collect page details optimization
* [PM-3465] Updating implementation to deal with cache invalidation issues
* [PM-3465] Implementing jest tests for added collect autofill content class elements
* [PM-3465] Removing scripting API permissiong within manifest v3 json file
* [PM-2319] Adding scripting api to manifest v3
* [PM-2319] Fixing issue present with non visible fields having an overlay element
* [PM-3465] Implementing method for removing cached page details if the window location has updated
* [PM-3465] Fixing issue found with query selector generated while collecting page details
* [PM-2319] Commenting out code that overrides default browser autofill behavior in chrome
* [PM-3465] Fixing jest tests
* [PM-3465] Fixing jest tests
* [PM-2319] Adding typing information for OverlayBackground
* [PM-2319] Updating typing information for the Overlay Background
* [PM-2319] Adding typing information for notification changes
* [PM-2319] Finalizing OverlayBackground typing info and removing browser autofill override method
* [PM-2319] Refining typing information within different service classes
* [PM-2319] Finalizing typing information within implementation
* [PM-2319] Further refinement and fixes for icon element
* [PM-2319] Fixing issue where submission of form and presentation of notification bar can offset the overlay element
* [PM-2319] Fixing issues present with keyboard focus and determining when to open the overlay upon user interaction
* [PM-2319] Adding in change to fix issue where autofill is occurring when iframes exist
* [PM-2319] Implementing lazy load of UI elements
* [PM-2319] Fixing issue present with lazy loading of cipher elements
* [PM-2319] Fixing issue present with lazy loading of cipher elements
* [PM-2319] Modifying offset for the ciphers list container
* [PM-2319] Fixing issue encountered with autofilling using keyboard
* [PM-2319] Modifying initialization of iframe element
* [PM-2319] Fixing an issue where login ciphers that do not contain a user name will not display within the overlay list
* [PM-2855] [PM-3034] Add Setting to Enable Autofill Overlay (#6194)
* [PM-2855] Add Settings to Enable Autofil Overlay
* [PM-2855] Adding feature flag for overlay
* [PM-2855] Implementing autofill overlay setting within browser extension
* [PM-2855] Implementing autofill overlay appearance setting
* [PM-2855] Implementing behavior within autofill overlay to conditionally display either the icon or the full list on focus of an element
* [PM-2855] Implementing a fix for when focus changes with the form field visible
* [PM-2855] Modifying rules for how the callout appears within the current-tab component
* [PM-2855] Modifying enum for autofill overlay appearance
* [PM-2855] Implementing check to ensure autofill overlay setting is not visible if the feature flag is not set
* [PM-2855] Fixing jest tests within implementation
* [PM-2855] Modifying how we pull the overlay appearance information for the end user
* [PM-2855] Applying changes to the structure for how the overlay settings are identified and verified
* [PM-2855] Applying changes to the structure for how the overlay settings are identified and verified
* [PM-2855] Adding translations content
* [PM-2855] Modifying implementation for how autofill settings populate and present themselves
* [PM-2855] Modifying implementation for how autofill settings populate and present themselves
* [PM-2855] Adding the ability to override autofill permissions within Chrome as an opt-in
* [PM-2855] Modifying message sent when vault item reprompt popout is opened
* [PM-2855] Fixing issue encountered with how we handle lazy loading vaul items
* [PM-2855] Fixing issue present when iframe is updating position when the window focus changes
* [PM-3982] Implement Autofill Overlay unit tests (#6337)
* [PM-2319] Jest Tests for Autofill Overlay MVP
* [PM-2319] Jest test stubs for OverlayBackground
* add tests and cleanup (#6341)
* [PM-3983] Implementing test for `updateAutofillOverlayCiphers`
* [PM-3983] Implementing test for `updateAutofillOverlayCiphers`
* [PM-3983] Working through jest tests for overlay background
* [PM-3983] Adding jest tests for OverlayBackground
* [PM-3983] Adding jest tests for OverlayBackground;
* [PM-3983] Adding jest tests for getAuthStatus
* [PM-3983] Adding jest tests for getAuthStatus
* [PM-3983] Adding jest tests for getTranslations
* [PM-3983] Finalizing jest tests for OverlayBackground
* [PM-3983] Finalizing jest tests for OverlayBackground
* [PM-3982] Updating unit tests within AutofillInit
* [PM-3982] Adding jest tests for AutofillOverlayIframeElement, AutofillOverlayButtonIframe, and AutofillOverlayListIframe
* [PM-3982] Adding jest tests for the AutofillOverlayIframeService class
* [PM-3992] AutofillOverlayContentService class unit tests
* [PM-3992] AutofillOverlayContentService class unit tests
* [PM-3992] AutofillOverlayContentService class unit tests
* [PM-3992] AutofillOverlayContentService class unit tests
* [PM-3992] AutofillOverlayContentService class unit tests
* [PM-3992] AutofillOverlayContentService class unit tests
* [PM-3992] AutofillOverlayContentService class unit tests
* [PM-3992] AutofillOverlayContentService class unit tests
* [PM-3992] AutofillOverlayContentService class unit tests
* [PM-3992] AutofillOverlayContentService class unit tests
* [PM-3992] AutofillOverlayContentService class unit tests
* [PM-3992] AutofillOverlayContentService class unit tests
* [PM-3992] AutofillOverlayContentService class unit tests
* [PM-3992] AutofillOverlayContentService class unit tests
* [PM-3982] Filling out unit tests for the AutofillService class
* [PM-3982] Implementing unit tests for the AutofillOverlayPageElement custom element class
* [PM-3982] Updating elements to better allow for testing of the AutofillOverlayList and AutofillOverlayButton classes
* [PM-3982] Adding jest tests for AutofillOverlayList custom element class
* [PM-3982] Adding jest tests for AutofillOverlayList custom element class
* [PM-3982] Adding jest tests for the AutofillOverlayButton custom element class
* [PM-3982] Adding jest tests for the AutofillOverlayButton custom element class
* [PM-3982] Updating obsolete snapshot
* add tests for AutofillOverlayIframeService
* [PM-3982] Refactoring
* [PM-3982] Refactoring
---------
Co-authored-by: Jonathan Prusik <jprusik@users.noreply.github.com>
Co-authored-by: Jonathan Prusik <jprusik@classynemesis.com>
---------
Co-authored-by: Jonathan Prusik <jprusik@users.noreply.github.com>
Co-authored-by: Jonathan Prusik <jprusik@classynemesis.com>
* [PM-2319] Adjusting implementation for how we open the unlock popout to facilitate skipping the notification
* [PM-2319] Adjusting typing information within the OverlayBackground class and fixing issue found within the AutofillOverlayList implementation
* [PM-2319] Adjusting JSDOC comment within NotificationBackground
* [PM-2319] Refactoring OverlayBackground tests
* [PM-2319] Refactoring OverlayBackground tests
* [PM-2319] Refactoring JSDOC comments
* [PM-2319] Adding jest tests to modified TabsBackground class
* [PM-2319] Refactoring jest tests for AutofillInit
* [PM-2319] Refactoring AutofillInit JSDOC messages
* [PM-2319] Applying refactors to AutofillInit
* [PM-2319] Applying refactors to fying info for the AutofillOverlayIframeService
* [PM-2319] Adding the ability to apply the extension theme to the overlay elements
* [PM-2319] Adjusting background offset on darker themes
* [PM-2319] Adjusting background offset on darker themes
* [PM-2319] Adding JSDOC comments to the overlay iframe service
* [PM-2319] Cleaning up implementation
* [PM-2319] Cleaning up implementation
* [PM-2319] Adding removal of unknown manifest key, `sandbox`, from the Firefox manifest
* [PM-2319] Updating manifest v3 implementation to facilitate presentation of the overlay page elements
* [PM-2319] Adding documentation to the changes to BrowserApi
* [PM-2855] Removing unnecessary key
* [PM-2319] Removing unnecesssary abstraction file
* [PM-3035] Reverting changes to package-lock.json
* [PM-3035] Reverting changes to package-lock.json
* [PM-3035] Reverting added logs
---------
Co-authored-by: Jonathan Prusik <jprusik@users.noreply.github.com>
Co-authored-by: Manuel <mr-manuel@outlook.it>
Co-authored-by: Jonathan Prusik <jprusik@classynemesis.com>
---------
Co-authored-by: Jonathan Prusik <jprusik@users.noreply.github.com>
Co-authored-by: Manuel <mr-manuel@outlook.it>
Co-authored-by: Jonathan Prusik <jprusik@classynemesis.com>
* [PM-3032] Fixing issue with flashing background on overlay iframe list element
* [PM-3032] Modifying how we determine the size of the overlay button element to facilitate smaller scaling on larger sized input elements
* [PM-3032] Modifying how load actions are handled within the browser view component to clarify the triggered logic.
* [PM-3032] Adjusting implementation to how we trigger copy actions
* [PM-3032] Setting copyActions to be a static member of the view component class
* [PM-3032] Merging in changes
---------
Co-authored-by: Jonathan Prusik <jprusik@users.noreply.github.com>
Co-authored-by: Manuel <mr-manuel@outlook.it>
Co-authored-by: Jonathan Prusik <jprusik@classynemesis.com>
---------
Co-authored-by: Jonathan Prusik <jprusik@users.noreply.github.com>
Co-authored-by: Manuel <mr-manuel@outlook.it>
Co-authored-by: Jonathan Prusik <jprusik@classynemesis.com>
* [PM-3914] Fixing issue within Opera where lock and login routes can persist if user opens the extension popout in a new window before locking or logging out
* [PM-3914] Setting the extensionUrls that are cheked as a variable outside of the scope fo the openUlockPopout method to ensure it does not have to be rebuilt each time the method is called
* [PM-4744] Page Details that Update after Mutation Observer has Triggered Do Not Update within Overlay Background (#6848)
* [PM-4743] Windows Chromium Browser is Not Updating Overlay Ciphers on Tab Update (#6863)
* [PM-4763] Fixing Issues with the Overlay UI Positioning and Presentation (#6864)
* [PM-4763] Fixing overlay UI issues
* [PM-4736] Implementing a method to ensure that the overlay is refreshed anytime the overlay has lost visibility
* [PM-4763] Implementing a fix for a delayed opening of the overlay element where elements in the documentElement could potentially overlay our own UI element
* [PM-4763] Implementing a fix for when the visibility of the dom changes to facilitate removing the overlay element if necessary
* [PM-4763] Fixing jest tests
* [PM-4763] Fixing global references
* [PM-4790] Overlay not resetting on scroll of websites that do not scroll body element (#6877)
* [PM-4790] Overlay not resetting on scroll of websites that do not scrollt he body element
* [PM-4790] Setting up the scroll event to capture rather than setting mousewheel and touchmove events
* [PM-4790] Setting up constants for referenced events
* [PM-4229] Fixing issue found when collecting page details
* [PM-4229] Implementing optimization to ensure we only rebuild the autofill item if the overlay needs to set the listeners on the field
* [PM-4229] Adjusting copy for autofill callout message
---------
Co-authored-by: Jonathan Prusik <jprusik@users.noreply.github.com>
Co-authored-by: Manuel <mr-manuel@outlook.it>
Co-authored-by: Jonathan Prusik <jprusik@classynemesis.com>
* Move Account Settings
* Add Another Test
* Refactor Tests
* Update Notification Bar to Get Value From Global
* Also Migrate Disable Context Menu
* Add Explanation