* 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.