* PM-1049 - Create first display draft of login-decryption-options base and web components (no data loading or user actions wired up yet; WIP)
* PM-1049 - Update DeviceResponse to match latest properties on backend
* PM-1049 - Add getDevices call to retrieve all user devices to API service
* PM-1049 - WIP on figuring out login decryption options component requirements
* PM-1049 - Add empty login decryption options to desktop
* PM-1049 - Desktop - Update "Log in initiated" translation to be "Login Initiated" per figma and product request
* PM-1049 - Desktop - login decryption options component html done
* PM-1049 - Move login-decryption-options in web into own folder
* PM-1049 - Browser - created html for login-decryption-options component
* PM-1049 - Move newly created getDevices() method out of api.service into proper place in new devices-api.service.
* PM-1049 -Comment cleanup and TODO added
* PM-1049 - Comment cleanup and dependency cleanup across all login-decryption-options comps
* PM-1049 - WIP of building out needed response and regular models for saving new UserDecryptionOptions on the Account in state.
* PM-1049 - Update all User Decryption Options response and state models in light of the back end changes from a list to an object. Web building now with decryption options stored on state under the account successfully. Must now build out state service methods for retrieving / setting account decryption options for use elsewhere.
* PM-1049 - State Service - setup setters / getters for UserDecryptionOptions off the account
* PM-1049 - StateService - replace User with Acct for decryption options
* PM-1049 - Create domain models vs using response models as response models have a response property w/ the full response nested underneath which we don't need to persist for the user decryption options stored on the account.
* PM-1049 - AcctDecryptionOptions now persist across page refreshes of the login-initiated page to act similarly to refreshes on the lock screen. Accomplished via persisting AcctDecryptionOptions in local storage -- still cleared on logout.
* PM-1049 - IdTokenResponse - only userDecryptionOptions if they exist on the response from the server; I saw a few instances where it did not. Wasn't able to replicate consistently, but I put this check here to be safe.
* PM-1049 - Login Initiated route can only be accessed if user is AuthN w/ locked vault + TDE feature flag is on.
* PM-1049 - LoginDecryptionOptions - (1) Wire up loading logic (2) Retrieve User Acct Decryption options to determine whether or not to show request admin approval btn and approve w/ MP (3) Write up future logic for requestAdminApproval (4) approveWithMasterPassword takes you to the lock screen to login.
* PM-1049 - Apply same guards as in web to login-decryption-options in desktop & browser.
* PM-1049 - (1) Updated dependencies in parent BaseLoginDecryptionOptionsComponent class + child components (2) Retrieve userEmail b/c needed for displaying which email the user is logging in with (3) Add log out functionality (4) Add comments regarding future implementation details for each login approval flow.
* PM-1049 - Web/Browser/Desktop LoginDecryptionOptions - (1) Wire up approval buttons (2) Add conditional margins (3) Loading spinner added (4) Display userEmail + "not you" logout link
* PM-1049 - Add TODOs for future changes needed as part of the Login Approval flows for TDE
* PM-1049 - TODO: replace base component with business service
* add new storage to replace MasterKey with UserSymKey
* add storage for master key encrypted user symmetric key
* Begin refactor of crypto service to support new key structure
* remove provided key from getKeyForUserEncryption
* add decryption with MasterKey method to crypto service
* update makeKeyPair on crypto service to be generic
* add type to parameter of setUserKey in abstraction of crypto service
* add setUserSymKeyMasterKey so we can set the encrypted user sym key from server
* update cli with new crypto service methods
- decrypt user sym key and set when unlocking
* separate the user key in memory from user keys in storage
* add new memory concept to crypto service calls in cli
* update auth service to use new crypto service
* update register component in lib to use new crypto service
* update register component again with more crypto service
* update sync service to use new crypto service methods
* update send service to use new crypto service methods
* update folder service to use new crypto service methods
* update cipher service to use new crypto service
* update password generation service to use new crypto service
* update vault timeout service with new crypto service
* update collection service to use new crypto service
* update emergency access components to use new crypto service methods
* migrate login strategies to new key model
- decrypt and set user symmetric key if Master Key is available
- rename keys where applicable
- update unit tests
* migrate pin to use user's symmetric key instead of master key
- set up new state
- migrate on lock component
- use new crypto service methods
* update pin key when the user symmetric key is set
- always set the protected pin so we can recreate pin key from user symmetric key
- stop using EncryptionPair in account
- use EncString for both pin key storage
- update migration from old strategy on lock component
* set user symmetric key on lock component
- add missed key suffix types to crypto service methods
* migrate auto key
- add helper to internal crypto service method to migrate
* remove additional keys in state service clean
* clean up the old pin keys in more flows
- in the case that the app is updated while logged in and the user changes their pin, this will clear the old pin keys
* finish migrate auto key if needed
- migrate whenever retrieved from storage
- add back the user symmetric key toggle
* migrate biometrics key
- migrate only on retrieval
* fix crypto calls for key connector and vault timeout settings
* update change password components with new crypto service
* update assortment of leftover old crypto service calls
* update device-crypto service with new crypto service
* remove old EncKey methods from crypto service
* remove clearEncKey from crypto service
* move crypto service jsdoc to abstraction
* add org key type and new method to build a data enc key for orgs
* fix typing of bulk confirm component
* fix EncString serialization issues & various fixes
Co-authored-by: Matt Gibson <MGibson1@users.noreply.github.com>
* update account model with new keys serialization
* migrate native messaging for biometrics to use new key model
- support backwards compatibility
- update safari web extension to send user key
- add error handling
* add early exit to native messaging flow for errors
* improve error strings in crypto service
* disable disk cache for browser due to bg script/popup race conditions
* clear bio key when pin is migrated as bio is refreshed
* share disk cache to fix syncing issues between contexts
* check for ephemeral pin before process reload
* remove state no longer needed and add JSDOC
* fix linter
* add new types to tests
* remove cryptoMasterKeyB64 from account
* fix tests imports
* use master key for device approvals still
* cleanup old TODOs, add missing crypto service parameters
* fix cli crypto service calls
* share disk cache between contexts on browser
* Revert "share disk cache between contexts on browser"
This reverts commit 56a590c491.
* use user sym key for account changing unlock verification
* add tests to crypto service
* rename 'user symmetric key' with 'user key'
* remove userId from browser crypto service
* updated EncKey to UserKey where applicable
* jsdoc deprecate account properties
* use encrypt service in crypto service
* use encrypt service in crypto service
* require key in validateUserKey
* check storage for user key if missing in memory
* change isPinLockSet to union type
* move biometric check to electron crypto service
* add secondary fallback name for bio key for safari
* migrate master key if found
* pass key to encrypt service
* rename pinLock to pinEnabled
* use org key or user key for encrypting attachments
* refactor makeShareKey to be more clear its for orgs
* rename retrieveUserKeyFromStorage
* clear deprecated keys when setting new user key
* fix cipher service test
* options is nullable while setting user key
* more crypto service refactors
- check for auto key when getting user key
- consolidate getUserKeyFromMemory and FromStorage methods
- move bio key references out of base crypto service
- update either pin key when setting user key instead of lock component
- group deprecated methods
- rename key legacy method
* Feature/PM-1049 - TDEFflow 3 login decryption options - PR feedback changes (#5642)
* PM-1049 - PR Feedback change - Browser - replace incorrect use of routerlink with manual attribute styling to keep anchor styling + tab focus while not having a router action race condition for the log out action to complete.
* PM-1049 - PR Feedback - State Service changes - rename get/setAcctDecryptionOptions to get/setAccountDecryptionOptions
* PM-1049 - PR Feedback changes - LoginDecryptionOptionsComp - Remove unncessary appA11yTitle directives as title / aria text would be identical to the displayed inner button text.
* DeviceType - Create sets of device types which other components can reference to avoid having to manually define groups of device types.
* PM-1049 - PR Feedback Changes - Update base-login-decryption-options component to leverage async piped observables per best practices. Updated all client templates to leverage new data streams.
* PM-1049 - BaseLoginDecryptionOptionsComp - Add validation service for generic error handling
* PM-1049 - DeviceResponse mistakenly had name as a number instead of a string
* PM-1049 - First draft of creating observable based data store service for Devices so that the base login comp can leverage it instead of calling the devices API service directly (as it will be moved into the SDK in the future).
* PM-1049 - Register new DevicesService on jslib-services module for use in components.
* PM-1049 - Add new hasDevicesOfTypes call to devices data store svc + devices API service.
* PM-1049 - BaseLoginDecryptionOptionsComp - wire up call to devicesService.hasDevicesOfTypes to replace getDevices() to avoid bringing down all trusted device information unnecessarily.
* PM-1049 - LoginDecryptionOptionsComp - Web HTML - clean up loading state so it displays spinner centered properly.
* PM-1049 - LoginDecryptionOptionsComp - Desktop HTML - Don't show login initiated title while page is loading to match other clients behavior.
* PM-1049 - Devices Services - Update naming of hasDevicesOfTypes to match new name on back end + route change to getDevicesExistenseByTypes
* PM-1049 - Device Response & View models - remove keys which are going to be deprecated on the base model
* PM-1049 - DevicesService - devicesBSubject --> devicesSubject rename per PR feedback
* PM-1049 - Devices Services - correct spelling of existence (*facepalm*)
* PM-1049 - Update comment for clarity per PR feedback
* PM-1049 - DevicesSvc - UserSymKey --> UserKey rename
* PM-1049 - BaseLoginDecryptionOptions - replace user email source - get from stateService vs tokenService.
* PM-1049 - BaseLoginDecryptionOptions - Remove uncessary check for userEmail as we will always have it here otherwise everything in the app is broken.
* PM-1049 - BaseLoginDecryptionOptions - Finish cleaning up removal of user email from showReqAdminApprovalBtn$ stream
* PM-1049 - LoginDecryptionOptionsComp - HTML revisions in web & browser to better space out buttons using tailwind or top margin to avoid need for multiple async pipes and shareReplay.
* PM-1049 - DevicesService - of course all observables should have $ suffix. Facepalm.
* PM-1049 - BaseLoginDecryptionOptionsComp - Update verbiage and style of destroy observable used for hooking into ngOnDestroy lifecycle to clean up all observables
* PM-1049 - BaseLoginDecryptionOptions - PR feedback changes - refactor user email to have an underlying bSubject stream to ensure subscription/promise execution separately from the template async pipe subscribing to the stream.
* PM-1049 - DevicesApiService - getDevicesExistenceByTypes - PR feedback - explicitly convert result to boolean instead of casting.
* PM-1049 - BaseLoginDecryptionOptionsComp - Add ShareReplay for getAccountDecryptionOptions + context per PR feedback
* PM-1049 - LoginDecryptionOptionsComp - Completely back away from template async pipe reactive approach as it caused massively increased complexity for little gain. Instead, just focus on reactively pulling asynchronously retrieved data and setting page loading state simply. This just works and is so much less overhead. + Add comments re flows of the component to be done later
* PM-1049- Revert DevicesService implementation from smart data store cache service giant mess into simple, clean data passthrough service to avoid complexity and keep moving forward. YAGNI
Co-authored-by: Andreas Coroiu <andreas@andreascoroiu.com>
* PM-1049 - DeviceCryptoService - Add decryptUserKey method (WIP)
* PM-1049 - AccountDecryptionOptions - add get helpers for checking for trusted device / key connector decryption option existence.
* PM-1049 - SSO Login Strategy - added comments in setUserKey method for where we will probably be consuming device keys and determining if the device is trusted or not (i.e., if we can get a decrypted user sym key in memory)
* PM-1049 - DeviceCryptoSvc.decryptUserKey - Update method to properly use state service device key retrieval + add TODO to figure out what to do if user has previously had a device key and has cleared their local cache (which will result in the device being untrusted now)
* PM-1049 - SSO Login Strategy - add comment re future passkey login strategy support
* PM-2759 - SSO & 2FA components updated with v0 of navigation logic to send users to LoginDecryptionOptions
* PM-1049 - Account > AccountDecryptionOptions - can't create getter helper methods for determining if user has decryption options b/c of issues w/ account deserialization. Moving past b/c I can just easily check if the given options are not undefined.
* PM-2759 - Add TODOs for deprecation of id token response resetMasterPassword logic and replacement with use of accountDecryptionOptions
---------
Co-authored-by: Andreas Coroiu <andreas@andreascoroiu.com>
* revert sharing disk cache between contexts
* fix tests
* add better tests to crypto service
* add hack to get around duplicate instances of disk cache on browser
* prevent duplicate cache deletes in browser
* fix browser state service tests
* Feature/PM-1212 - TDE - Approve with master password flow (#5706)
* PM-1212 - StateSvc - Add getUserDeviceTrustChoice && setUserDeviceTrustChoice to persist user's choice in local storage in case of refresh on login approval screens (ex: lock)
* PM-1212 - DeviceCryptoSvc - Add getUserDeviceTrustChoice && setUserDeviceTrustChoice as state service is lower level service for caching
* PM-1212 - LoginDecryptionOptionsComp - Save result of rememberEmail checkbox into local storage via deviceCryptoService.setUserDeviceTrustChoice
* PM-1212 - Lock component - after user key is set, check if user chose to establish trust, and if they did, then establish trust and reset choice.
* PM-1212 - Update naming of methods per discussion with Jake + add comment explaining intended single use retrieval and need for resetting the value.
* DeviceCryptoService - Refactor - decryptUserKey --> decryptUserKeyWithDeviceKey to match crypto service refactor naming convention
* PM-1212 - Refactor State Service per PR feedback to store trustDeviceChoiceForDecryption on Account.settings b/c the temp setting is scoped to a user.
* PM-2759 - SSO & 2FA Navigation to TDE Comp - Needs more work - Found scenarios on web with 2FA in which the expected navigation doesn't work. Adding TODO to assist in fixing
* (1) Add Trust to DeviceCryptoService name
(2) Move DeviceTrustCryptoService under auth folder
* PM-1212 - Add tests for new getUserTrustDeviceChoiceForDecryption and setUserTrustDeviceChoiceForDecryption methods + TODOs for future tests.
* PM-1212- Renaming / moving DeviceTrustCryptoService broke all the things - fixed all the client builds.
* PM-1212- Copy doc comment to abstraction per PR feedback
* PM-1212 - BaseLoginDecryptionOptions comp - remove unncessary cast to form control as apparently reactive forms now properly derives types.
* [PM-1203] Replace MP confirmation with verification code (#5656)
* [PM-1203] feat: ask for OTP if user does not have MP
* [PM-1203] feat: add backwards compatibility for accounts/servers without decryption options
* [PM-1203] feat: move hasMasterPassword to user-verification.service
* [PM-1203] fix: remove duplicate implementation from crypto service
* [PM-1203] fix: cli build
* Tweak device trust crypto service implementation to match mobile late… (#5744)
* Tweak device trust crypto service implementation to match mobile latest which results in more single responsibility methods
* Update tests to match device trust crypto service implementation changes
* update comment about state service
* update pinLockType states and add jsdocs
* add missed pinLockType changes
* [PM-1033] Org invite user creation flow 1 (#5611)
* [PM-1033] feat: basic redirection to login initiated
* [PM-1033] feat: add ui for TDE enrollment
* [PM-1033] feat: implement auto-enroll
* [PM-1033] chore: add todo
* [PM-1033] feat: add support in browser
* [PM-1033] feat: add support for desktop
* [PM-1033] feat: improve key check hack to allow regular accounts
* [PM-1033] feat: init asymmetric account keys
* [PM-1033] chore: temporary fix bug from merge
* [PM-1033] feat: properly check if user can go ahead an auto-enroll
* [PM-1033] feat: simplify approval required
* [PM-1033] feat: rewrite using discrete states
* [PM-1033] fix: clean-up and fix merge artifacts
* [PM-1033] chore: clean up empty ng-container
* [PM-1033] fix: new user identification logic
* [PM-1033] feat: optimize data fetching
* [PM-1033] feat: split user creating and reset enrollment
* [PM-1033] fix: add missing loading false statement
* [PM-1033] fix: navigation logic in sso component
* [PM-1033] fix: add missing query param
* [PM-1033] chore: rename to `ExistingUserUntrustedDevice`
* PM-1033 - fix component templates to reference `ExistingUserUntrustedDevice` so clients can build
---------
Co-authored-by: Jared Snider <jsnider@bitwarden.com>
* remove extra partial key
* set master key on lock component
* rename key hash to password hash on crypto service
* fix cli
* rename enc user key setter in crypto service
* Adds Events & Human Readable Messages (#5746)
* [PM-1202] Hide the Master Password tab on Settings / Security (#5649)
* [PM-1203] feat: ask for OTP if user does not have MP
* [PM-1203] feat: get master password status from decryption options
* [PM-1203] feat: add backwards compatibility for accounts/servers without decryption options
* [PM-1203] feat: move hasMasterPassword to user-verification.service
* fix merge issues
* Change getUserTrustDeviceChoiceForDecryption / setUserTrustDeviceChoiceForDecryption to getShouldTrustDevice / setShouldTrustDevice (#5795)
* Auth/[PM-1260] - Existing User - Login with Trusted Device (Flow 2) (#5775)
* PM-1378 - Refactor - StateSvc.getDeviceKey() must actually convert JSON obj into instance of SymmetricCryptoKey
* TODO: BaseLoginDecryptionOptionsComponent - verify new user check doesn't improperly pick up key connector users
* PM-1260 - Add new encrypted keys to TrustedDeviceUserDecryptionOptionResponse
* PM-1260 - DeviceTrustCryptoSvc - decryptUserKeyWithDeviceKey: (1) update method to optionally accept deviceKey (2) Return null user key when no device key exists (3) decryption of user key now works in the happy path
* PM-1260 - LoginStrategy - SaveAcctInfo - Must persist device key on new account entity created from IdTokenResponse for TDE to work
* PM-1260 - SSO Login Strategy - setUserKey refactor - (1) Refactor existing logic into trySetUserKeyForKeyConnector + setUserKeyMasterKey call and (2) new trySetUserKeyWithDeviceKey method for TDE
* PM-1260 - Refactor DeviceTrustCryptoService.decryptUserKeyWithDeviceKey(...) - Add try catch around decryption attempts which removes device key (and trust) on decryption failure + warn.
* PM-1260 - Account - Add deviceKey to fromJSON
* TODO: add device key tests to account keys
* TODO: figure out state service issues with getDeviceKey or if they are an issue w/ the account deserialization as a whole
* PM-1260 - Add test suite for decryptUserKeyWithDeviceKey
* PM-1260 - Add interfaces for server responses for UserDecryptionOptions to make testing easier without having to use the dreaded any type.
* PM-1260 - SSOLoginStrategy - SetUserKey - Add check looking for key connector url on user decryption options + comment about future deprecation of tokenResponse.keyConnectorUrl
* PM-1260 - SSO Login Strategy Spec file - Add test suite for TDE set user key logic
* PM-1260 - BaseLoginStrategy - add test to verify device key persists on login
* PM-1260 - StateService - verified that settings persist properly post SSO and it's just device keys we must manually instantiate into SymmetricCryptoKeys
* PM-1260 - Remove comment about being unable to feature flag auth service / login strategy code due to circ deps as we don't need to worry about it b/c of the way we've written the new logic to be additive.
* PM-1260 - DevicesApiServiceImplementation - Update constructor to properly use abstraction for API service
* PM-1260 - Browser - AuthService - (1) Add new, required service factories for auth svc and (2) Update auth svc creation in main.background with new deps
* PM-1260 - CLI - Update AuthSvc deps
* PM-1260 - Address PR feedback to add clarity / match conventions
* PM-1260 - Resolving more minor PR feedback
* PM-1260 - DeviceTrustCryptoService - remove debug warn
* PM-1378 - DeviceTrustCryptoSvc - TrustDevice - Fix bug where we only partially encrypted the user key with the device public key b/c I incorrectly passed userKey.encKey (32 bytes) instead of userKey.key (64 bytes) to the rsaEncrypt function which lead to an encryption type mismatch when decrypting the user's private key with the 32 byte decrypted user key obtained after TDE login. (Updated happy path test to prevent this from happening again)
* PM-1260 - AccountKeys tests - add tests for deviceKey persistence and deserialization
* PM-1260 - DeviceTrustCryptoSvc Test - tweak verbiage per feedback
* PM-1260 - DeviceTrustCryptoSvc - Test verbiage tweak part 2
* Update apps/browser/src/background/service-factories/devices-api-service.factory.ts
per PR feedback
Co-authored-by: Justin Baur <19896123+justindbaur@users.noreply.github.com>
---------
Co-authored-by: Justin Baur <19896123+justindbaur@users.noreply.github.com>
* Defect - LockComp - After setting user key, must AWAIT retrieval of user's previous choice to have trusted the device or not. (#5804)
* [PM-2928] [PM-2929] [PM-2930] Fixes for: [PM-1203] Replace MP confirmation with verification code (#5798)
* [PM-2928] feat: hide change email if user doen't have MP
* [PM-2929] feat: hide KDF settings if user doesn't have MP
* [PM-2930] feat: remove MP copy
* Removed self-hosted check from TDE SSO config. (#5837)
* [PM-2998] Move Approving Device Check (#5822)
* Switch to retrieving approving device from token response
- Remove exist-by-types API call
- Define `HasApprovingDevices` on TDE options
* Update Naming
* Update Test
* Update Missing Names
* [PM-2908] feat: show account created toast (#5810)
* fix bug where we weren't passing MP on Restart to migrate method in lock
* fix: buffer null error (#5856)
* Auth/[pm-2759] - TDE - SSO and 2FA routing logic (#5829)
* PM-2759 - SsoComp - (1) Temp remove all TDE routing logic (2) Refactor existing navigation logic via new component utility function navigateViaCallbackOrRoute
* PM-2759 - SSO Component - Create test suite for logIn logic
* PM-2759 - SsoComp Tests - add disclaimer regarding testing private methods and props
* PM-1259 - SSO Comp - Refactor LogIn method to use functions for each navigation case for improved readability
* PM-1259 - SSO Comp Tests - Add tests for error case during login + test for new handleLoginError logic
* PM-2759 - SsoComp - Deprecate resetMasterPassword and replace with AccountDecryptionOptions logic + update tests
* PM-2759 - SsoComp + tests - Add trusted device encryption first draft handling which has login success and force password reset handling
* PM-2759 - Minor SsoComp comment and method name tweaks
* PM-2759 - BaseTwoFactorComp - (1) Comment out TDE stuff for now (2) Add test suite (3) Replace global window in base comp constructor with angular injection token for window which follows best practices and allows for mocking so the comp can be unit tested
* PM-2759 - Update child 2FA components to use angular injection token for window like base comp
* PM-2759 - TwoFactorComp - Finish testing all logic in doSubmit
* PM-2759 - TwoFactorComponent - Refactor DoSubmit method logic into multiple simple functions to make logic easier to follow
* PM-2759 - Add newtrustedDeviceOption.hasManageResetPasswordPermission property to match server changes
* PM-2759 - Flag AuthResult.resetMasterPassword property as deprecated
* PM-2759 - SSO comp - TDE routing logic - User without MP and ResetPassword permission must set a MP
* PM-2759 - Update Sso Comp tests to reflect additionally added TDE > MP set required logic (when user has no MP but they can reset other user passwords)
* PM-2759 - SsoComp - Add comment explaining the happy paths better for TDE success navigation
* PM-2759 - SsoComp - Refactor isTrustedDeviceEncEnabled logic into own method
* PM-2759 - SsoComp - As the 2FA comp passes the org id through to each route, going to standardize on doing so across the board for now to avoid any tricky scenarios down the line where it is needed and it's not present
* PM-2759 - SsoComp - Finish renaming orgIdFromState to orgIdentifier
* PM-2759 - SsoComp - update tests for forcePasswordReset flows now passing orgIdentifier as query param
* PM-2759 - SsoComp Tests - Export mockAcctDecryptionOpts permutations so we can share them across SsoComp and TwoFactorComp tests
* PM-2759 - Refactor 2FA comp post login redirect logic to match SSO component + add TDE logic
* PM-2759 - SsoComp - Refactor tests a bit for improved re-use
* PM-2759 - Sso Comp tests - can't export consts from a spec file or the other spec files that import them will re-execute the whole test suite as a nested test suite. TIL.
* PM-2759 - TwoFactorComp tests - All existing navigation scenarios + new TDE scenarios should now be tested.
* PM-2759 - Web - 2FA comp - Fix build error b/c of renamed base comp prop (identifier --> orgIdentifier)
* PM-2759 - Fix SsoLogin strategy tests b/c they were broken w/ the addition of the HasManageResetPasswordPermission prop to the TrustedDeviceOption interface
* PM-2759 - Web TwoFactorComp - goAfterLogIn method must be an arrow function to inherit the parent base component scope so that important things like angular services can be defined. Web 2FA flow does not work without this being an arrow func.
* PM-2759 - Fix typo
* PM-2759 - SsoComp and TwoFactorComp tests - move service and other mocks into the top level before each to better ensure no crossover between test states per PR feedback
* PM-2759 - SsoComp - add clarity by refactoring unclear comment
* PM-2759 - SsoComp - Per excellent PR feedback, refactor if else statements to guard statements for better readability / design
* PM-2759 - TwoFactorComp - Replace ifs with guard statements
* PM-2759 - TwoFactorComp - add clarity to comment per PR feedback
* PM-2759 - Replace use of jest.Mocked with MockProxy per PR feedback
* PM-2759 - Use unknown over any per PR feedback
* Bypass Master Password Reprompt if a user does not have a MP set (#5600)
* Add a check for a master password in PasswordRepromptService.enabled()
* Add tests for enabled()
* Update state service method call
* Use UserVerificationService to determine if a user has a master password
* rename password hash to master key hash
* fix cli build from key hash renaming
* [PM-1339] Allow Rotating Device Keys (#5806)
* Merge remote-tracking branch 'origin/feature/trusted-device-encryption' into Auth/pm-1339/rotate-device-keys
* Implement Rotation of Current Device Keys
- Detects if you are on a trusted device
- Will rotate your keys of only this device
- Allows you to still log in through SSO and decrypt your vault because the device is still trusted
* Address PR Feedback
* Move Files to Auth Ownership
* fix: getOrgKeys returning null
* [PM-3143] Trusted device encryption: Refactor reset enroll service (#5869)
* create new reset enrollment service
* refactor: login decryption options according to TODO
* feat: add tests
* PM-3143 - Add override to overriden methods
---------
Co-authored-by: Jared Snider <jsnider@bitwarden.com>
* generate a master key from master password if needed (#5870)
* [PM-3120] fix: device key not being saved properly (#5882)
* Auth/pm 1050/pm 1051/remaining tde approval flows (#5864)
* fix: remove `Unauth guard` from `/login-with-device`
* [PM-3101] Fix autofill items not working for users without a master password (#5885)
* Add service factories for user verification services
* Update autofill service to check for existence of master password for autofill
* Update the context menu to check for existence of master password for autofill
* context menu test fixes
* [PM-3210] fix: use back navigation (#5907)
* Removed buttons (#5935)
* PM-2759 - Fix broken backwards compatibility for authResult.resetMast… (#5940)
* PM-2759 - Fix broken backwards compatibility for authResult.resetMasterPassword
* PM-2759 - Update TODO with specific tech debt task + target release date
* TDE - State Svc - setDeviceKey should support setting null for future support of clearing device key. (#5942)
* Check if a user has a mp before showing kdf warning (#5929)
* [PM-1200] Unlock settings changes for accounts without master password - clients (#5894)
* [PM-1200] chore: add comment for jake
* [PM-1200] chore: rename to `vault-timeout`
* [PM-1200] feat: initial version of `getAvailableVaultTimeoutActions`
* [PM-1200] feat: implement `getAvailableVaultTimeoutActions`
* [PM-1200] feat: change helper text if only logout is available
* [PM-1200] feat: only show available timeout actions
* [PM-1200] fix: add new service factories and dependencies
* [PM-1200] fix: order of dependencies
`UserVerificationService` is needed by `VaultTimeoutSettingsService`
* [PM-1200] feat: add helper text if no lock method added
* [PM-1200] refactor: simplify prev/new values when changing timeout and action
* [PM-1200] feat: fetch timeout action from new observable
* [PM-1200] refactor: make `getAvailableVaultTimeoutActions` private
* [PM-1200] feat: add test cases for `vaultTimeoutAction$`
* [PM-1200] feat: implement new timeout action logic
* [PM-1200] feat: add dynamic lock options to browser
* [PM-1200] feat: enable/disable action select
* [PM-1200] feat: add support for biometrics
* [PM-1200] feat: add helper text and disable unavailable options
* [PM-1200] feat: update action on unlock method changes
* [PM-1200] feat: update browser to use async pipe
* [PM-1200] fix: element not updating
* [PM-1200] feat: hide masterPassOnRestart pin option
* [PM-1200] feat: hide change master password from browser settins
* [PM-1200] feat: hide change master password from app menu
* [PM-1200] feat: logout if lock is not supported
* [PM-1200] feat: auto logout from lock screen if unlocking is not supported
* [PM-1200] feat: remove lock button from web menus
* Revert "[PM-1200] fix: element not updating"
This reverts commit b27f425f48570d0d5dbc9dedb9797023fef64d8b.
* Revert "[PM-1200] feat: update browser to use async pipe"
This reverts commit 766c15bc3dbadcf7dcef3053b148e7874f8939ce.
* [PM-1200] chore: add comment regarding detectorRef
* [PM-1200] feat: remove lock now button from browser settings
* [PM-1200] feat: add `userId` to unlock settings related methods
* [PM-1200] feat: remove non-lockable accounts from menu
* [PM-1200] fix: cli not building
---------
Co-authored-by: Todd Martin <tmartin@bitwarden.com>
Co-authored-by: Jared Snider <116684653+JaredSnider-Bitwarden@users.noreply.github.com>
* [PM-3215][PM-3289] Create MasterKey from Password If Needed (#5931)
* Create MasterKey from Password
- Check if the MasterKey is stored or not
- Create it if it's not
* Add getOrDeriveKey Helper
* Use Helper In More Places
* Changed settings menu to be enabled whenever the account is not locked. (#5965)
* [PM-3169] Login decryption options in extension popup (#5909)
* [PM-3169] refactor: lock guard and add new redirect guard
* [PM-3169] feat: implement fully rewritten routing
* [PM-3169] feat: close SSO window
* [PM-3169] feat: store sso org identifier in state
* [PM-3169] fix: tests
* [PM-3169] feat: get rid of unconventional patch method
* PM-3169 - SSO & 2FA Comps - Update naming of new callback to match existing pattern + add tests for callback logic execution.
* PM-3169 - Update LockGuard to have a special exception for allowing the TDE Login with MP flow
* PM-3169 - Per discussion w/ Jake and Justin, rename login-initiated guard to be tde decryption required guard (more named for functionality vs specific route)
* PM-3169 - Add some additional context to new redirect guard scenario
* PM-3169 - Per PR feedback, replace all callback types with Promise<void> as the return values are not being used.
* PM-3169 - StateSvc - Per PR feedback, update setUserSsoOrganizationIdentifier signature to explicitly use null instead of partial<string> which doesn't do anything
* PM-3169 - Replace onSuccessfulLogin type to compile
* PM-3169 - Add clarification comment for why we are not using a query param for persisting the org identifier
* PM-3169 - Per discussion with Justin, only use memory for SsoOrgId as we don't need to persist it beyond that; tested and it worked on all 3 clients for new user TDE creation
* PM-3169 - Add missing ssoIdentifierRequired translation to desktop and browser
* PM-3169 - After discussing with Justin again, we realized that memory doesn't work on desktop if user refreshes app or closes and re-opens it so must use disk.
* PM-3169 - Per PR feedback, remove hasEverHadUserKey logic as we can just leverage existing getUserKey method to check if we have a user key or not; tested all guards in browser and web with no issues
* PM-3169 - Per design discussion with Danielle, move account created toast after successful account creation vs on load of page.
---------
Co-authored-by: Jared Snider <116684653+JaredSnider-Bitwarden@users.noreply.github.com>
Co-authored-by: Jared Snider <jsnider@bitwarden.com>
* [PM-3314] Fixed missing MP prompt on lock component (#5966)
* Updated lock component to handle no master password.
* Added a comment.
* Add Missing Slash (#5967)
* Fix AdminAuthRequest Serialization on Desktop (#5970)
- toJSON isn't being called by ElectronStorageService
- Force it's conversion to JSON earlier so it happens for all storage methods
* Fix issue where we were incorrectly calling setRememberEmailValues in the AdminAuthRequest state - no need to do this as the email is already saved to state. By calling this method, we would actually overwrite the already saved email with null as the user's choice to remember email wasn't persisted through SSO on the login service. (#5972)
* PM-3329 - Restore everHadUserKey logic from PM-3169 which I incorrectly removed in order to fix routing logic so that user can lock and land on the lock screen properly (#5979)
* PM-3210 - TDE - LoginWithDevice routing fix - Mirror PR #5950 in just simply providing a back action on click which works for all app generated scenarios (#5982)
* PM-3332 - TDE - SsoLoginStrategy - For existing admin auth reqs, must… (#5980)
* PM-3332 - TDE - SsoLoginStrategy - For existing admin auth reqs, must manually handle 404 error case to prevent app from hanging and clear the local state if the admin auth req in the DB has been purged; i.e., it should fail silently.
* Add TODO for SSO Login Strategy tests
* PM-3331 - TDE - Firefox - Browser extension - fix access denied error… (#5984)
* PM-3331 - TDE - Firefox - Browser extension - fix access denied error on popup load which was caused by the canAccessFeature guard failing to lookup the TDE feature flag as the server config was returning null even after a successful server call as only returned the value if the user was unauthenticated for some reason
* PM-3331 - After discussion with Andre, further refactor ConfigService logic to always return the latest information from the server so that requests for feature flag data will always get the most up to date information.
* PM-3345 - TDE - Desktop - Biometrics setting submenu tweak - do not s… (#5988)
* PM-3345 - TDE - Desktop - Biometrics setting submenu tweak - do not show require MP or PIN entry on restart if user doesn't have at least one of those options b/c otherwise user can get into a bad state where they cannot unlock
* PM-3345 - TDE - Desktop - Settings comp - if user turns off PIN and Biometric is on + require PIN on restart is enabled then must turn that setting off to prevent bad user state
* PM-3345 - Final tweak to logic
* [PM-2852] Final merge from Key Migration branch to TDE Feature Branch (#5977)
* [PM-3121] Added new copy with exclamation mark
* [PM 3219] Fix key migration locking up the Desktop app (#5990)
* Only check to migrate key on VaultTimeout startup
* Remove desktop specific check
* PM-3332 - LoginWithDevice - Add error handling logic around admin auth request retrieval similar to sso login strategy to prevent error state and allow re-creation of an admin auth request if it has been purged from the server for whatever reason. (#5991)
* PM-3355 - TDE - Browser JIT Account Creation - Browser create user logic still had logic for simply closing the extension tab but as we no longer open the login decryption options in a tab we needed to update the logic here to navigate the user directly onto the vault. (#5993)
* Add distinctUntilChanged to fix multiple value changes for biometrics firing (#5999)
* Add optional chaining to master key (#6007)
* PM-3369 - TDE - Persist user's choice to trust device to state when user ma… (#6000)
* PM-3369 - Persist user's choice to trust device to state when user makes choice + persist previous choices out of state
* PM-3369 - Must set trust device in state on load if it's never been set before
* PM-3369 - Refactor BaseLoginDecOptions to properly set trust device choice in state on load
* Update libs/angular/src/auth/components/base-login-decryption-options.component.ts
Co-authored-by: Jake Fink <jfink@bitwarden.com>
---------
Co-authored-by: Jake Fink <jfink@bitwarden.com>
* Updated email change component to getOrDeriveMasterKey (#6009)
* [PM-3330] Force Update to Lockable Accounts on PIN/Biometric Update (#6006)
* Add Listener For Events that Need To Redraw the Menu
* Send redrawMenu Message When Pin/Biometrics Updated
* DeviceTrustCryptoService - don't worry about checking if a device should establish trust or not if the user doesn't have trusted device encryption on (#6010)
* Auth / pm 3351 / TDE Login - Browser & Desktop vault sync issue fix (#6002)
* PM-3351 - TDE Login on desktop and browser via SSO comp with no 2FA should trigger sync like standard onSuccessfulLogin process used to so user lands on vault with data.
* PM-3351 - 2FA Comp - Refactor onSuccessfulLogin logic to only execute in the success path just like the SSO component + adding specific onSuccessfulLoginTde flow just like SSO comp. + removed unnecessary calls to loginService.clearValues(). Added browser & desktop definitions for onSuccessfulLoginTde which is just a fullSync kick off.
* TODO
* PM-3351 - remove await to restore code back to previous state without hang.
* PM-3351 - 2FA Comp - Don't await onSuccessfulLoginTde b/c it causes a hang
* PM-3351 - remove sso comp incorrect todo
* PM-3351 - SsoComp - don't await onSuccessfulLoginTde for browsers sake
* PM-3351 - SsoComp - remove awaits from onSuccessfulLoginTde and onSuccessfulLogin to avoid any hangs on desktop and browser
* PM-3351 - Convert onSuccessfulLoginTde to promise<void> as its return is not used + refactor all to be consistent and clearly communciate that the sync won't be awaited.
* PM-3351 - Convert onSuccessfulLogin to promise<void> and update all methods accordingly to more clearly indicate that the syncs and any other logic won't be awaited.
* [PM-3356] Fallback to OTP When MasterPassword Hasn't Been Used (#6017)
* Fallback to OTP When MasterPassword Hasn't Been Used
* Update Test and Rename Method
* Revert "DeviceTrustCryptoService - don't worry about checking if a device should establish trust or not if the user doesn't have trusted device encryption on (#6010)" (#6020)
This reverts commit 6ec22f9570.
* PM-3390 - TDE - Redraw desktop after user creation to update isLocked checks and get menu to be enabled properly (#6018)
* [PM-3383] Hide Change Password menu option for user with no MP (#6022)
* Hide Change Master Password menu item on desktop when a user doesn't have a master password.
* Renamed variable for consistency.
* Updated to base logic on account.
* Fixed menubar
* Resolve merge errors in crypto service spec
* Fixed autofill to use new method on userVerificationService (#6029)
* PM-3456 - TDE Admin Auth Req Flow - FF dead object issue - The foreground popup must retrieve the long lived background services for the new TDE services (the AuthRequestCryptoService service fixes this issue, but the DeviceTrustCryptoService should have been added to services.module as well) (#6037)
* skip auto key check when using biometrics on browser (#6041)
* Added comments for backward compatibility removal. (#6039)
* Updated warning message. (#6059)
* Tde pr feedback (#6051)
* move pin migration to the crypto service
* refactor config service logic
* refactor lock component load logic
* rename key connector methods
* add date to backwards compat todo
* update backwards compat todo
* don't specify defaults in redirectGuard
* nit
* add null & undefined check for userid before using the account
* fix ui tests
* add todo for tech debt
* add todo comment
* Fix storybook per PR feedback
* Desktop & Browser - lock comp - add optional chaining check for focusable input - user can just have biometric and not have a MP or a PIN so must support that.
* Main.background.ts - remove duplicate instantiations of the userVerificationApiService and userVerificationService which were added in two separate PRs
* Per PR feedback - (1) Browser app routing module - fix incorrect import for redirect guard (2) Created index.ts file for auth guards to simplify imports and updated imports
* Per PR feedback, (1) Update jslib-services.module to provide actual instance of VaultTimeoutService (2) Update init service to use concrete VaultTimeoutService vs abstraction.
Co-authored-by: Matt Gibson <git@mgibson.dev>
* Per PR feedback - update services module AuthRequestCryptoService and DeviceTrustCryptoService to use shorthand format.
* Per PR feedback, add devicesService to main background and update services module to ensure the popup leverages the background devicesService
---------
Co-authored-by: Jared Snider <jsnider@bitwarden.com>
Co-authored-by: Matt Gibson <git@mgibson.dev>
* Updated message keys for CrowdIn to pick them up. (#6066)
* TDE PR Feedback resolutions round 2 (#6068)
* Per PR feedback - main.background.ts - move userVerificationService and userVerificationApiService to correct location
* Per PR feedback - JS lib services + vault timeout service updates - (1) Correctly type callbacks based on injection tokens (2) Update vault timeout service to have proper types based on injection tokens
* Per PR Feedback - update web init service to inject actual VaultTimeoutService vs abstraction similar to what we did for desktop here: 55a797d4ff
* Per more feedback - revert incorrect changes to VaultTimeoutService based on existing injection token types for LOGOUT_CALLBACK and LOCKED_CALLBACK.. and instead update the injection token types themselves to match how they are being used.
* Per PR feedback - in browser main.background.ts, inject concrete VaultTimeoutService instead of abstraction so we don't have to cast it anymore (matching web & desktop)
---------
Co-authored-by: Jared Snider <jsnider@bitwarden.com>
Co-authored-by: Jared Snider <116684653+JaredSnider-Bitwarden@users.noreply.github.com>
Co-authored-by: Jacob Fink <jfink@bitwarden.com>
Co-authored-by: Matt Gibson <MGibson1@users.noreply.github.com>
Co-authored-by: Andreas Coroiu <andreas.coroiu@gmail.com>
Co-authored-by: Andreas Coroiu <andreas@andreascoroiu.com>
Co-authored-by: Andreas Coroiu <acoroiu@bitwarden.com>
Co-authored-by: Justin Baur <19896123+justindbaur@users.noreply.github.com>
Co-authored-by: André Bispo <abispo@bitwarden.com>
Co-authored-by: Thomas Rittson <trittson@bitwarden.com>
Co-authored-by: Vincent Salucci <vincesalucci21@gmail.com>
Co-authored-by: Robyn MacCallum <robyntmaccallum@gmail.com>
Co-authored-by: Jonathan Prusik <jprusik@classynemesis.com>
Co-authored-by: Matt Gibson <git@mgibson.dev>
* upon action outside of the extenstion requiring password reprompt, open new tab with reprompt
* allow popup view component to load with default action and send context menu actions on reprompt ciphers to password reprompt
* open password reprompt in new window instead of new tab
* update test and linting
* Apply suggestions from code review
Co-authored-by: Cesar Gonzalez <cesar.a.gonzalezcs@gmail.com>
* add support for getTab in Manifest V2
* remove unneeded loadAction check
* allow auto-fill button in popout window
* add LoadAction type
* update code to use new BrowserPopoutWindowService
* access queryParams with subscribe
* do not dismiss window if no loadAction was specified
* rehide autofill option for non-single-action popout windows
---------
Co-authored-by: Cesar Gonzalez <cesar.a.gonzalezcs@gmail.com>
* ignore TLD when checking for no banner display on a vault page
* do not show the notification banner on the configured bitwarden vault domain
* add types
* updated urls in premium web component and premium libs to use the cloudwebvaulturl
* moved premium.component in web from base settings to a new settings folder inside vault
* [PM-1796] The autofill keyboard shortcut does not prompt a user to unlock a locked extension within an incongito browsing session
* [PM-1796] Implementing fixes for how we handle focus redirection when logging a user in and attempting to autofill within the Firefox Workspaces addon
* [PM-1796] Removing the `openerTab` value from the createNewTab method within brwoserApi.ts
* [PM-1796] Removing async declaration from createNewTab
* [PM-1796] Removing unnecessary param from the call to openBitwardenExtrensionTab
* [PM-2147] [BEEEP] Open login form used to unlock extension in a separate window instead of a tab
* [PM-2147] [BEEEP] Open login form used to unlock extension in a separate window instead of a tab
* [PM-2147] [BEEEP] Modifying the position where the window opens and starting cleanup of comments within implementation
* [PM-2147] [BEEEP] Cleaning up comments within implementation
* [PM-2147] [BEEEP] Removing unnecessary method
* [PM-2147] [BEEEP] Removing package-lock changes
* [PM-2147] [BEEEP] Cleaning up implementation
* [PM-2147] [BEEEP] Reverting addition to the whitelist-capital-letters filter and updating named file
* [PM-2147] [BEEEP] Reverting addition to the whitelist-capital-letters filter and updating named file
* [PM-2147] [BEEEP] Adjusting implementation of notifications bar to trigger presentation on lock only when not adding a new vault item
* [PM-2147] [BEEEP] Adjusting implementation of how we open a login prompt window to ensure we are showing the address bar to the user
* [PM-2147] [BEEEP] Modifying the method closeBitwardenLoginPromptWindow to not check for a popup type window
* [PM-2147] [BEEEP] Fixing bug where notification bar does not close when unlocking vault
* [PM-2147] [BEEEP] Adjusting placement of method BrowserApi.getWindow to have it present closer to getTab
* [PM-2147] [BEEEP] Implementing a sepearate service BrowserPopoutService that will maintain the most recently created popouts and selectively remove those when re-opening the login prompt
* [PM-2147] [BEEEP] Modifying position of BrowserPopoutWindowService
* [PM-2147] [BEEEP] Modifying position of BrowserPopoutWindowService
* [PM-2147] [BEEEP] Modifying how we handle identifying a single use popout
* [AC-1423] Update organization subscription cloud page (#5614)
* [AC-1423] Add ProgressModule to shared.module.ts
* [AC-1423] Update cloud subscription page styles
- Remove bootstrap styles
- Use CL components where applicable
- Use CL typography directives
- Update heading levels to prepare for new SM sections
* [AC-1423] Add usePasswordManager boolean to organization domain
* [AC-1423] Introduce BitwardenProductType enum
* [AC-1423] Update Organization subscription line items
- Add product type prefix
- Indent addon services like additional storage and service accounts
- Show line items for free plans
* [AC-1423] Simply sort function
* [AC-1423] Remove header border
* [AC-1423] Make "Password Manager" the default fallback for product name
* [AC-1420] Add Secrets Manager subscribe component (#5617)
* [AC-1418] Add secrets manager manage subscription component (#5661)
* [AC-1423] Add minWidth input to bit-progress component
* [AC-1423] Add ProgressModule to shared.module.ts
* [AC-1423] Update cloud subscription page styles
- Remove bootstrap styles
- Use CL components where applicable
- Use CL typography directives
- Update heading levels to prepare for new SM sections
* [AC-1423] Add usePasswordManager boolean to organization domain
* [AC-1423] Introduce BitwardenProductType enum
* [AC-1423] Update Organization subscription line items
- Add product type prefix
- Indent addon services like additional storage and service accounts
- Show line items for free plans
* [AC-1423] Simply sort function
* [AC-1423] Remove header border
* [AC-1423] Remove redundant condition
* [AC-1423] Remove ineffective div
* [AC-1423] Make "Password Manager" the default fallback for product name
* Revert "[AC-1423] Add minWidth input to bit-progress component"
This reverts commit 95b2223a30.
* [AC-1423] Remove minWidth attribute
* [AC-1423] Switch to AddonProductType enum instead of boolean
* Revert "[AC-1423] Switch to AddonProductType enum instead of boolean"
This reverts commit 204f64b4e7.
* [AC-1423] Tweak sorting comment
* [AC-1418] Add initial SecretsManagerAdjustSubscription component
* [AC-1418] Add initial SM adjustment form
* [AC-1418] Adjust organization-subscription-update.request.ts to support both PM and SM
* [AC-1418] Rename service account fields in the options interface
* [AC-1418] Add api service call to update SM subscription
* [AC-1418] Cleanup form html
* [AC-1418] Add missing SM plan properties
* [AC-1418] Add SM subscription adjust form and logic to hide it
* [AC-1418] Add better docs to options interface
* [AC-1418] Fix conflicting required/optional labels for auto-scaling limits
* [AC-1418] Adjust labels and appearance to better match design
* [AC-1418] Use the SM plan for billing interval
* [AC-1418] Hide SM billing adjustment component behind feature flag
* [AC-1418] Update request model to match server
* [AC-1418] Cleanup BitwardenProductType after merge
Add to barrel file and update applicable imports.
* [AC-1418] Revert change to update PM subscription request model
* [AC-1418] Add new update SM subscription request model
* [AC-1418] Add new service method to update SM subscription
* [AC-1418] Use new model and service method
* [AC-1418] Cleanup SM subscription UI flags
* [AC-1418] Move SM adjust subscription component into SM billing module
* [AC-1418] Update SM seat count minimum to 1
* [AC-1418] Add missing currency codes
* [AC-1418] Simplify monthly price calculation
* [AC-1418] Increase PM adjust subscription form input width
* [AC-1418] Add check for null subscription
---------
Co-authored-by: Thomas Rittson <31796059+eliykat@users.noreply.github.com>
* add the additional properties (#5743)
* Allow autoscale limits to be removed, update naming (#5781)
* [AC-1488] Store Organization.SmServiceAccounts as total not additional (#5784)
* Allow autoscale limits to be removed, update naming
* Display additional service accounts only
---------
Co-authored-by: Shane Melton <smelton@bitwarden.com>
* [AC-1473] SM beta ending callout (#5719)
* [AC-1423] Add minWidth input to bit-progress component
* [AC-1423] Add ProgressModule to shared.module.ts
* [AC-1423] Update cloud subscription page styles
- Remove bootstrap styles
- Use CL components where applicable
- Use CL typography directives
- Update heading levels to prepare for new SM sections
* [AC-1423] Add usePasswordManager boolean to organization domain
* [AC-1423] Introduce BitwardenProductType enum
* [AC-1423] Update Organization subscription line items
- Add product type prefix
- Indent addon services like additional storage and service accounts
- Show line items for free plans
* [AC-1423] Simply sort function
* [AC-1423] Remove header border
* [AC-1423] Remove redundant condition
* [AC-1423] Remove ineffective div
* [AC-1423] Make "Password Manager" the default fallback for product name
* Revert "[AC-1423] Add minWidth input to bit-progress component"
This reverts commit 95b2223a30.
* [AC-1423] Remove minWidth attribute
* [AC-1423] Switch to AddonProductType enum instead of boolean
* Revert "[AC-1423] Switch to AddonProductType enum instead of boolean"
This reverts commit 204f64b4e7.
* [AC-1423] Tweak sorting comment
* [AC-1418] Add initial SecretsManagerAdjustSubscription component
* [AC-1418] Add initial SM adjustment form
* [AC-1418] Adjust organization-subscription-update.request.ts to support both PM and SM
* [AC-1418] Rename service account fields in the options interface
* [AC-1418] Add api service call to update SM subscription
* [AC-1418] Cleanup form html
* [AC-1418] Add missing SM plan properties
* [AC-1418] Add SM subscription adjust form and logic to hide it
* [AC-1418] Add better docs to options interface
* [AC-1418] Fix conflicting required/optional labels for auto-scaling limits
* [AC-1418] Adjust labels and appearance to better match design
* [AC-1418] Use the SM plan for billing interval
* [AC-1418] Hide SM billing adjustment component behind feature flag
* [AC-1418] Update request model to match server
* [AC-1418] Cleanup BitwardenProductType after merge
Add to barrel file and update applicable imports.
* [AC-1418] Revert change to update PM subscription request model
* [AC-1418] Add new update SM subscription request model
* [AC-1418] Add new service method to update SM subscription
* [AC-1418] Use new model and service method
* [AC-1418] Cleanup SM subscription UI flags
* [AC-1418] Move SM adjust subscription component into SM billing module
* [AC-1418] Update SM seat count minimum to 1
* [AC-1418] Add missing currency codes
* [AC-1418] Simplify monthly price calculation
* add daysRemaining util function and unit tests
* [AC-1474] update organization models to include SM beta flag
* add SM beta callout to org subscription page
* update messages.json
* remove beta field from profile org response
* improve daysRemaining code clarity
* set SM beta in org model constructor
* tweak free SM row visibility
* refactor callout description
* Revert "remove beta field from profile org response"
This reverts commit 6c6249e1ec.
* fix dates
* [AC-1468]: hide adjust SM component if beta user
* add sm beta field to org sub response; remove everywhere else
* fix copy
---------
Co-authored-by: Shane Melton <smelton@bitwarden.com>
Co-authored-by: Thomas Rittson <31796059+eliykat@users.noreply.github.com>
Co-authored-by: Thomas Rittson <trittson@bitwarden.com>
* [AC-1531] Fix SM subscribe component not showing in free org billing tab (#5848)
Also:
* Fix spacing in layout
* Send zero values for free plans
* Fix: properly delete enroll component
* remove the beta end message for free org (#5877)
* [AC-1458] Update local organization data after subscribing to Secrets Manager (#5888)
* [AC-1567] Fix max additional service account cost estimate (#5923)
* Fix max additional service account cost estimate
* Update i18n string ref
* Make i18n string keys consistent
* [AC-1461] Secrets Manager seat autoscaling cleanup (#5924)
* Remove unused return value from putOrganizationUserBulkEnableSecretsManager
* Fix service account limit validator (#5926)
* Updated Utils.daysRemaining method to calculate result using Math.floor and updated unit tests.
---------
Co-authored-by: Shane Melton <smelton@bitwarden.com>
Co-authored-by: cyprain-okeke <108260115+cyprain-okeke@users.noreply.github.com>
Co-authored-by: Rui Tome <rtome@bitwarden.com>
Co-authored-by: Will Martin <contact@willmartian.com>
Co-authored-by: Álison Fernandes <vvolkgang@users.noreply.github.com>
Co-authored-by: Rui Tomé <108268980+r-tome@users.noreply.github.com>
* update desktop domains
* update web domains
* remove old translations from desktop
* update translations on browser
* change 'Region' to 'Server' on web
* change labels
* remove 'region' translation
* adjust alignmend so 'Self-hosted' label lines up with others
* adjust width and layout of trial-initiation header to accomodate longer text
* Change everything to Uint8Array
related to https://github.com/jestjs/jest/issues/14379
* Work on failing type tests
* Revert changes to custom matcher setup
* Remove last BufferArrays from tests
* Fix custom matcher type errors in vscode
* Remove errant `.buffer` calls on Uint8Arrays
* Encryption Pair should serialize Array Buffer and Uint8Array
* Fix EncArrayBuffer encryption
---------
Co-authored-by: Thomas Rittson <trittson@bitwarden.com>
* Change appSelectCopy to accept a dynamic input on what to copy
* Renamed select-copy directive to copy-text directive to be more accurate with the new behaviour
Signed-off-by: Andre Rosado <arosado@bitwarden.com>
* Moved CopyTextDirective on jslib module to be in alphabetic ordering
---------
Signed-off-by: Andre Rosado <arosado@bitwarden.com>
Co-authored-by: Andre Rosado <arosado@bitwarden.com>
* Add tailwind to desktop
* Add tailwind to browser
* Toy around with using CL in desktop
* Move custom css into the tailwind theme
* Revert component experiment
* Add components to browser tsconfig
* Fix build
* Add formGroup to base FolderAddEditComponent
* [web] use DialogService to open the modal
* [web] migrate FolderAddEditComponent use component library
* [desktop] use the formGroup in the template
* [browser] use the formGroup in the template
* [browser & desktop] remove disable on form invalid
* [web] Migrate to async actions
* [web] Strengthen typing for FolderAddEdit dialog
* Show form error instead of error toast
* Move browser folder add edit component to vault
* Remove extra template variables
* Remove inner form
* Remove inner form
* Update apps/web/src/app/vault/individual-vault/folder-add-edit.component.html
Co-authored-by: Oscar Hinton <Hinton@users.noreply.github.com>
---------
Co-authored-by: Oscar Hinton <Hinton@users.noreply.github.com>
* Begin implementing TOTP autofill
* Add support for Cloudflare
* Fix linting errors
* Add GitHub support
* Automatically check for autocomplete="one-time-code"
* Fix TOTP-filling for Steam
* Make auto-fill on page load work for TOTP
* [PM-2609] Introduce logic to handle skipping autofill of TOTP on page load
* [PM-2609] Ensuring other forms of user initiated autofill can autofill the TOTP value for a vault item
---------
Co-authored-by: Daniel James Smith <djsmith@web.de>
Co-authored-by: Cesar Gonzalez <cgonzalez@bitwarden.com>
Co-authored-by: Cesar Gonzalez <cesar.a.gonzalezcs@gmail.com>
* Extract passwordStrength from passwordGenerationService
Extract passwordStrength from password-generation.service.ts
Create new password-strength.service.ts
Create new password-strength.service.abstraction.ts
Register new password-strength service
Fix usages in libs
* Fix usage in web
* Fix usage in desktop
* Fix usage in CLI
* Fix usage in browser
Move password-generation-factory to tools
* Fix tests
* Change dependency in jslib-services.module
* Defining the card brand according to its number
* Moving cardBrandByPatterns function to Card View
* Getting Card brand via cardBrandByPatterns function
* Changing cardBrandByPatterns method to static. See:
The reason being that someone wanting to use this outside of the onCardNumberChange would need to know to set the cc-number on the view-model before calling cardBrandByPatterns
* Defining the card brand according to its number on Desktop
* Defining the card brand according to its number on Web
* Added new forwarder (Forward Email <https://forwardemail.net>)
* fix: fixed Basic authorization header
* fix: fixed returned email value
* feat: added verbose message for end-users (e.g. "Not Found" vs. "Domain does not exist on your account." (automatically localized with i18n for user)
* fix: fixed Buffer.from to Utils.fromBufferToB64
* fix: fixed fromBufferToB64 to fromUtf8ToB64
* Remove try-catch to properly display api errors
---------
Co-authored-by: Daniel James Smith <djsmith@web.de>
* Rename service-factory folder
* Move cryptographic service factories
* Move crypto models
* Move crypto services
* Move domain base class
* Platform code owners
* Move desktop log services
* Move log files
* Establish component library ownership
* Move background listeners
* Move background background
* Move localization to Platform
* Move browser alarms to Platform
* Move browser state to Platform
* Move CLI state to Platform
* Move Desktop native concerns to Platform
* Move flag and misc to Platform
* Lint fixes
* Move electron state to platform
* Move web state to Platform
* Move lib state to Platform
* Fix broken tests
* Rename interface to idiomatic TS
* `npm run prettier` 🤖
* Resolve review feedback
* Set platform as owners of web core and shared
* Expand moved services
* Fix test types
---------
Co-authored-by: Hinton <hinton@users.noreply.github.com>
* PM-2403 - (1) Fix issue with Safari's tab extension not closing after successful SSO Login + 2FA continue which sidesteps the inconsistent MP invalid issue (due to invalid KDF config settings on reload) -- Firefox + sidebar, opera + sidebar, chrome, safari, and edge tested (2) Refactor reload logic to exempt the current window from the reload logic as we really only need to reload sidebars so they end up on the lock screen vs staying on the login screen and we are just going to close the open extension running in the tab. (3) Added comments
* PM-2403 - Per PR feedback, update reloadOpenWindows exemptCurrentHref filter to properly work
* PM-2403 - Per PR feedback, remove unneeded new method and replace with existing method closeBitwardenExtensionTab after testing on all browsers (apparently the chrome.tabs namespace is supported in all major browsers that we support now)
* PM-2403 - Refactor sync to be kicked off earlier in the process b/c to make sure that closing the window does not abort it
* PM1378 - (1) Create state service methods for securely storing a device symmetric key while following existing pattern of DuckDuckGoKey generation (2) Create makeDeviceKey method on crypto service which leverages the new state service methods for storing the device key.
* PM-1378 - Document CSPRNG types w/ comments explaining what they are and when they should be used.
* PM-1378 - TODO to add tests for makeDeviceKey method
* PM-1378 - Create Devices API service for creating and updating device encrypted master keys + move models according to latest code standards ( I think)
* PM-1378 - TODO clean up - DeviceResponse properly moved next to device api service abstraction per ADR 0013
* PM-1378 - CryptoService makeDeviceKey test written
* PM-1378 - Tweak crypto service makeDeviceKey test to leverage a describe for the function to better group related code.
* PM-1378 - Move known devices call out of API service and into new devices-api.service and update all references. All clients building.
* PM-1378 - Comment clean up
* PM-1378 - Refactor out master key naming as that is a reserved specific key generated from the MP key derivation process + use same property on request object as back end.
* PM-1378 - Missed a use of master key
* PM-1378 - More abstraction updates to remove master key.
* PM-1378 - Convert crypto service makeDeviceKey into getDeviceKey method to consolidate service logic based on PR feedback
* PM-1378- Updating makeDeviceKey --> getDeviceKey tests to match updated code
* PM-1378 - Current work on updating establish trusted device logic in light of new encryption mechanisms (introduction of a device asymmetric key pair in order to allow for key rotation while maintaining trusted devices)
* PM-1378 - (1) CryptoService.TrustDevice() naming refactors (2) Lots of test additions and tweaks for trustDevice()
* PM-1378 - Updated TrustedDeviceKeysRequest names to be consistent across the client side board.
* PM-1378 - Move trusted device crypto service methods out of crypto service into new DeviceCryptoService for better single responsibility design
* PM-1378 - (1) Add getDeviceByIdentifier endpoint to devices api as will need it later (2) Update TrustedDeviceKeysRequest and DeviceResponse models to match latest server side generic encrypted key names
* PM-1378 - PR feedback fix - use JSDOC comments and move from abstraction to implementation
* PM-1378 - Per PR feedback, makeDeviceKey should be private - updated tests with workaround.
* PM-1378- Per PR feedback, refactored deviceKey to use partialKey dict so we can associate userId with specific device keys.
* PM-1378 - Replace deviceId with deviceIdentifier per PR feedback
* PM-1378 - Remove unnecessary createTrustedDeviceKey methods
* PM-1378 - Update device crypto service to leverage updateTrustedDeviceKeys + update tests
* PM-1378 - Update trustDevice logic - (1) Use getEncKey to get user symmetric key as it's the correct method and (2) Attempt to retrieve the userSymKey earlier on and short circuit if it is not found.
* PM-1378 - Replace deviceId with deviceIdentifier because they are not the same thing
* PM-1378 - Per PR feedback, (1) on web/browser extension, store device key in local storage under account.keys existing structure (2) on desktop, store deviceKey in secure storage. (3) Exempt account.keys.deviceKey from being cleared on account reset
* PM-1378 - Desktop testing revealed that I forgot to add userId existence and options reconciliation checks back
* PM-1378 - Per discussion with Jake, create DeviceKey custom type which is really just an opaque<SymmetricCryptoKey> so we can more easily differentiate between key types.
* PM-1378 - Update symmetric-crypto-key.ts opaque DeviceKey to properly setup Opaque type.
* PM-1378 - Fix wrong return type for getDeviceKey on DeviceCryptoServiceAbstraction per PR feedback
* [PM-169][PM-142][PM-191] Add Environments to Web and Desktop (#5294)
* [PM-1351] Add property to server-config.response. Change config to be able to fetch without being authed.
* [PM-1351] fetch every hour.
* [PM-1351] fetch on vault sync.
* [PM-1351] browser desktop fetch configs on sync complete.
* [PM-1351] Add methods to retrieve feature flags
* [PM-1351] Add enum to use as key to get values feature flag values
* [PM-1351] Remove debug code
* [PM-1351] Get flags when unauthed. Add enums as params. Hourly always fetch.
* [PM-1351] add check for authed user using auth service
* [PM-169] Web: add drop down to select environment
* [PM-169] Fix pop up menu margins. Add DisplayEuEnvironmentFlag.
* [PM-169] Change menu name.
* [PM-169] Add environment selector ts and html. Add declaration and import on login.module
* [PM-169] Add environment selector to desktop.
* [PM-169] Ignore lint error.
* [PM-169] add takeUntil to subscribes
* [PM-191] PR Fixes, code format
* [PM-168] Add Environments to extension login/registration (#5434)
* Remove reference cycle between ThemingService and the global window object
* Deregister messageListeners on a safari popup to avoid mem leaks
* Use pagehide event instead of unload
* [PM-1796] The autofill keyboard shortcut does not prompt a user to unlock a locked extension within an incongito browsing session
* [PM-1796] Implementing fixes for how we handle focus redirection when logging a user in and attempting to autofill within the Firefox Workspaces addon
* [PM-1796] Removing the `openerTab` value from the createNewTab method within brwoserApi.ts
* [PM-1796] Removing async declaration from createNewTab
* [PM-1796] Removing unnecessary param from the call to openBitwardenExtrensionTab
* [PM-1389] don't include background page while reloading windows
* [PM-1389] update sidebar action apis
* [PM-1389] simplify return from getSidebarAction
* [PM-1380] fix device type call after browser api change
* [PM-1176] Hovering over the `Learn More about auto-fill` link in the browser extension does not change the cursor
* [PM-1176] Modifying how the anchor element is formatted by prettier
* [PM-1176] Adding translation methodology to the aria-label "opens in a new window" value
* Add autofill values for german websites
* Added commonly used fieldnames for German websites
---------
Co-authored-by: Daniel James Smith <djsmith@web.de>
* replicate the recordActivity function everytime a successful login occurs
* rejig the exisiting recordActivity function to use state service for lastActive value
* revert change and just use onblur instead
* Update apps/browser/src/background/main.background.ts
* insted of bluring, pipe up unlocked message to update lastActive
* remove pingpong, use subscribe to update last active
* Update apps/browser/src/popup/app.component.ts
Co-authored-by: Matt Gibson <fungibl@gmail.com>
* add missing imports
---------
Co-authored-by: Matt Gibson <fungibl@gmail.com>
Co-authored-by: Matt Gibson <mgibson@bitwarden.com>
* Added button type to each button element related to the vault team
* Removed disable statement comment
* [PM-1399] Resolve eslint errors for button type - admin-console (#5275)
* Added button type to each button element related to the admin console team
* Added button type to each button element related to the billing team
* Removed disable statement comment
* [PM-1399] Resolve eslint errors for button type - tools (#5284)
* Added button type to each button element related to the tools team
* Added button type to each button element related to the tools team
* Added button type to each button element related to the auth team (#5295)
This PR introduces a generic `DialogService` which can be used by all the clients. This allows us to decouple dialogs from the `PlatformUtilsHelper`.
The `DialogService` provides a new method, `openSimpleDialog` which is the new interface for that type of dialogs.
This gives us 3 different implementations:
- Web: DialogService modern dialogs
- Browser: SweetAlert
- Desktop: Native electron based
* [PM-233] "No Items" graphic is overlapping on several screens
* [PM-233] Removing setting search input as readonly/disabled when "Send" functionality is disabled
* Add disableFavicon$ to stateService
* Change IconComponent's ChangeDetectionStrategy and use disableFavicon$ observable
* Only get first result from disableFavicon observable
* Move disabledFavicon$ to SettingsService
* Update usage of disableFavicon to use SettingsService
* Remove getting and setting of disabledFavicon on login
* Settings service observable adjustments
* Fix for popup initially having a null value for the disableFavicon setting in settingsService
* Move disabledFavicon$ subscription to ngOnInit
* feat: experiment with observables
* Remove SettingsService from browser app component
* Fix storybook changes
* Update apps/web/src/app/vault/components/vault-items/vault-items.stories.ts
Co-authored-by: Andreas Coroiu <acoroiu@bitwarden.com>
* Fix mock function signature
---------
Co-authored-by: Andreas Coroiu <andreas.coroiu@gmail.com>
Co-authored-by: Andreas Coroiu <acoroiu@bitwarden.com>
* [PM-1351] Add property to server-config.response. Change config to be able to fetch without being authed.
* [PM-1351] fetch every hour.
* [PM-1351] fetch on vault sync.
* [PM-1351] browser desktop fetch configs on sync complete.
* [PM-1351] Add methods to retrieve feature flags
* [PM-1351] Add enum to use as key to get values feature flag values
* [PM-1351] Remove debug code
* [PM-1351] Get flags when unauthed. Add enums as params. Hourly always fetch.
* [PM-1351] add check for authed user using auth service
* [PM-1351] remove unnecessary timer on account unlock
* Logic for calculating if we should apply height fix for safari
* Revert safari height fix for safari >= 16.1
* Deprecate static isBrowser funcions, using them directly is incorrect
* Changes based on feedback
* Update CSS to use & selector
---------
Co-authored-by: Hinton <hinton@users.noreply.github.com>
* Create and register new libs/exporter
Create package.json
Create tsconfig
Create jest.config
Extend shared and root tsconfig and jest.configs
Register with eslint
* Migrate exportService to libs/exporter
Move exportService (abstraction and impl) into libs/exporter
Refactored exportService to be split into vault-export and event-export
Created barrel-files for both exports
Moved export.service.spec.ts into vault-export
Created an export-helper, which helps build the filename (extract method refactor from ExportService)
* Move components in libs/angular into tools-subfolder
Moved components
Updated imports in jslib-services.module and jslib.module
* Register libs/exporter with browser and fix imports
Move export.component into tools-subfolder
* Register libs/exporter with cli and fix imports
Move export.command into tools-subfolder
* Register libs/exporter with desktop and fix imports
Move export.component into tools-subfolder
* Move export models to libs/exporter
* Update web imports
* Update package-lock.json
* Move export models back as it would create circular dependency
Reponse models in common rely on export models which are in libs/exporter, which relies on common
* Fix up web for event-export
* Update CODEOWNERS
* Add export-models to team-tools-dev
* Simplify domain import
* Moving EventExport into web
* [EC-1070] Introduce flag for enforcing master password policy on login
* [EC-1070] Update master password policy form
Add the ability to toggle enforceOnLogin flag in web
* [EC-1070] Add API method to retrieve all policies for the current user
* [EC-1070] Refactor forcePasswordReset in state service to support more options
- Use an options class to provide a reason and optional organization id
- Use the OnDiskMemory storage location so the option persists between the same auth session
* [AC-1070] Retrieve single master password policy from identity token response
Additionally, store the policy in the login strategy for future use
* [EC-1070] Introduce master password evaluation in the password login strategy
- If a master password policy is returned from the identity result, evaluate the password.
- If the password does not meet the requirements, save the forcePasswordReset options
- Add support for 2FA by storing the results of the password evaluation on the login strategy instance
- Add unit tests to password login strategy
* [AC-1070] Modify admin password reset component to support update master password on login
- Modify the warning message to depend on the reason
- Use the forcePasswordResetOptions in the update temp password component
* [EC-1070] Require current master password when updating weak mp on login
- Inject user verification service to verify the user
- Conditionally show the current master password field only when updating a weak mp. Admin reset does not require the current master password.
* [EC-1070] Implement password policy check during vault unlock
Checking the master password during unlock is the only applicable place to enforce the master password policy check for SSO users.
* [EC-1070] CLI - Add ability to load MP policies on login
Inject policyApi and organization services into the login command
* [EC-1070] CLI - Refactor update temp password logic to support updating weak passwords
- Introduce new shared method for collecting a valid and confirmed master password from the CLI and generating a new encryption key
- Add separate methods for updating temp passwords and weak passwords.
- Utilize those methods during login flow if not using an API key
* [EC-1070] Add route guard to force password reset when required
* [AC-1070] Use master password policy from verify password response in lock component
* [EC-1070] Update labels in update password component
* [AC-1070] Fix policy service tests
* [AC-1070] CLI - Force sync before any password reset flow
Move up the call to sync the vault before attempting to collect a new master password. Ensures the master password policies are available.
* [AC-1070] Remove unused getAllPolicies method from policy api service
* [AC-1070] Fix missing enforceOnLogin copy in policy service
* [AC-1070] Include current master password on desktop/browser update password page templates
* [AC-1070] Check for forced password reset on account switch in Desktop
* [AC-1070] Rename WeakMasterPasswordOnLogin to WeakMasterPassword
* [AC-1070] Update AuthServiceInitOptions
* [AC-1070] Add None force reset password reason
* [AC-1070] Remove redundant ForcePasswordResetOptions class and replace with ForcePasswordResetReason enum
* [AC-1070] Rename ForceResetPasswordReason file
* [AC-1070] Simplify conditional
* [AC-1070] Refactor logic that saves password reset flag
* [AC-1070] Remove redundant constructors
* [AC-1070] Remove unnecessary state service call
* [AC-1070] Update master password policy component
- Use typed reactive form
- Use CL form components
- Remove bootstrap
- Update error component to support min/max
- Use Utils.minimumPasswordLength value for min value form validation
* [AC-1070] Cleanup leftover html comment
* [AC-1070] Remove overridden default values from MasterPasswordPolicyResponse
* [AC-1070] Hide current master password input in browser for admin password reset
* [AC-1070] Remove clientside user verification
* [AC-1070] Update temp password web component to use CL
- Use CL for form inputs in the Web component template
- Remove most of the bootstrap classes in the Web component template
- Use userVerificationService to build the password request
- Remove redundant current master password null check
* [AC-1070] Replace repeated user inputs email parsing helpers
- Update passwordStrength() method to accept an optional email argument that will be parsed into separate user inputs for use with zxcvbn
- Remove all other repeated getUserInput helper methods that parsed user emails and use the new passwordStrength signature
* [AC-1070] Fix broken login command after forcePasswordReset enum refactor
* [AC-1070] Reduce side effects in base login strategy
- Remove masterPasswordPolicy property from base login.strategy.ts
- Include an IdentityResponse in base startLogin() in addition to AuthResult
- Use the new IdentityResponse to parse the master password policy info only in the PasswordLoginStrategy
* [AC-1070] Cleanup password login strategy tests
* [AC-1070] Remove unused field
* [AC-1070] Strongly type postAccountVerifyPassword API service method
- Remove redundant verify master password response
- Use MasterPasswordPolicyResponse instead
* [AC-1070] Use ForceResetPassword.None during account switch check
* [AC-1070] Fix check for forcePasswordReset reason after addition of None
* [AC-1070] Redirect a user home if on the update temp password page without a reason
* [AC-1070] Use bit-select and bit-option
* [AC-1070] Reduce explicit form control definitions for readability
* [AC-1070] Import SelectModule in Shared web module
* [AC-1070] Add check for missing 'at' symbol
* [AC-1070] Remove redundant unpacking and null coalescing
* [AC-1070] Update passwordStrength signature and add jsdocs
* [AC-1070] Remove variable abbreviation
* [AC-1070] Restore Id attributes on form inputs
* [AC-1070] Clarify input value min/max error messages
* [AC-1070] Add input min/max value example to storybook
* [AC-1070] Add missing spinner to update temp password form
* [AC-1070] Add missing ids to form elements
* [AC-1070] Remove duplicate force sync and update comment
* [AC-1070] Switch backticks to quotation marks
---------
Co-authored-by: Thomas Rittson <31796059+eliykat@users.noreply.github.com>
* SG-1026 - Documenting / slight refactoring of notification-bar - WIP
* SG-1026 - More documentation WIP
* SG-1026 - Continued documentation of notification bar + testing theories for specific sites as part of research to identify areas for possible improvement + added types where appropriate.
* SG-1026 - getSubmitButton docs
* SG-1026 - Autofill Service tweak - On account creation (ex: talkshoe.com), even if the pageDetails contained a valid form to watch, the loadPasswordFields method parameter for fillNewPassword being false for inputs with autoCompleteType of "new-password" would cause the account creation form to not be watched (null form data returned to notification bar). Setting this to true will help capture more account creations in the above specified scenario.
* SG-1026 - Additional documentation / comment clean up
* SG-1026 - Remove unused pageDetails array
* SG-1026 - These changes address form detection issues for the password change form on talkshoe.com: (1) Update autofill.service getFormsWithPasswordFields(...) method to group autofill.js found password type fields under a single form in a very specific scenario where the most likely case is that it is a password change form with poorly designed mark up in a SPA (2) Notification bar - when listening to a form, we must use both the loginButtonNames and the changePasswordButton names as we don't know what type of form we are listening to (3) Notification bar - on page change, we must empty out the watched forms array to prevent forms w/ the same opId being added to the array on SPA url change (4) Notification bar - getSubmitButton update - If we cannot find a submit button within a form, try going up one level to the parent element and searching again (+ added save to changePasswordButtonNames). (5) Notification bar - when listening to a form with a submit button, we can attach the formOpId to the button so we can only have DOM traversal in one location and retrieve the form off the button later on in the form submission logic. For now, I'm just adding it as a fallback, but it could be the primary approach with more testing.
* SG-1026 - On first load of the notification-bar content script, we should start observing the DOM immediately so we properly catch rendered forms instead of waiting for a second. This was especially prevelant on refreshing the password change form page on talkshoe.com.
* SG-1026 - Due to the previous, timeout based nature of the calls to collectPageDetailsIfNeeded (now handlePageChange), the mutation observer could get setup late and miss forms loading (ex: refreshing a password change page on talkshoe.com). DOM observation is now setup as fast as possible on page load for SPAs/Non SPAs and on change for SPAs by having the mutation observer itself detect page change and deterministically calling handlePageChange(). However, with these changes, page detail collection still only occurs after a minimum of ~1 second whether or not it was triggered from the mutation observer detecting forms being injected onto the page or the scheduleHandlePageChange running (which has a theoretical maximum time to page detail collection of ~1.999 seconds but this does require the mutation observer to miss the page change in a SPA which shouldn't happen).
* SG-1026 - Identified issue with current form retrieval step in autofill service which prevents multi-step account creation forms from being returned to the notification-bar content script from the notification.background.ts script.
* SG-1026 - Add logic to formSubmitted to try and successfully process multi-step login form (email then password on https://login.live.com/login.srf) with next button that gets swapped out for a true submit button in order to prompt for saving user credentials if not in Bitwarden. This logic works *sometimes* as the submit button page change often stops the submit button event listeners from being able to fire and send the login to the background script. However, that is a separate issue to be solved, and sometimes is better than never. This type of logic might be useful in solving the multi-step account creation form on https://signup.live.com/signup but that will require additional changes to the autofill service which current intercepts forms without passwords and prevents them from reaching the notification-bar.ts content script.
* SG-1026 - Add note explaining the persistence of the content script
* SG-1026 - Update stack overflow link to improve clarity.
---------
Co-authored-by: Robyn MacCallum <robyntmaccallum@gmail.com>
* Move URI matching logic into uriView
* Fix url parsing: always assign default protocol, otherwise no protocol with port is parsed incorrectly
* Codescene: refactor domain matching logic
* Fix encrypted export using fixed PBKDF2 iterations
* Replace hardcoded KdfType in importer
* Clean up kdf handling in password-protected export
* Extract BitwardenPasswordProtectedFileFormat
* Rename bitwarden-json-types
* Move StateService import to fix linting issue
* Make linter happy
* Use abstraction instead of implementation
---------
Co-authored-by: Daniel James Smith <djsmith@web.de>
* Split out api methods into sendApiService
* Move SendService and abstraction
* Libs updates
* Web updates
* CLI updates
* Desktop updates
* libs send service fixes
* browser factory additions
* Browser updates
* Fix service injection for CLI SendReceiveCommand
* Deprecate directly calling send state service methods
* SendService observables updates
* Update components to use new observables
* Modify CLI to use state service instead of observables
* Remove unnecessary await on get()
* Move delete() to InternalSendService
* SendService unit tests
* Split fileUploadService by send and cipher
* send and cipher service factory updates
* Add file upload methods to get around circular dependency issues
* Move api methods from sendService to sendApiService
* Update cipherService to use fileApi methods
* libs service injection and component changes
* browser service injection and component changes
* Desktop component changes
* Web component changes
* cipher service test fix
* Fix file capitalization
* CLI service import and command updates
* Remove extra abstract fileUploadService
* WIP: Condense callbacks for file upload
Co-authored-by: Robyn MacCallum <robyntmaccallum@gmail.com>
* Send callbacks for file upload
* Fix circular service dependencies
* Fix response return on upload
* Fix function definitions
* Service injection fixes and bug fixes
* Fix folder casing
* Service injection cleanup
* Remove deleted file from capital letters whitelist
* Create new SendApiService for popup
* Move cipherFileUploadService to vault
* Move SendFileUploadService methods into SendApiService
* Rename methods to remove 'WithServer'
* Properly subscribe to sendViews
* Fix Send serialization
* Implement fromJSON on sendFile and sendText
* [PM-1347] Fix send key serialization (#4989)
* Properly serialize key on send fromJSON
* Remove call that nulled out decrypted sends
* Fix null checks in fromJSON methods for models
* lint fixes
---------
Co-authored-by: Matt Gibson <mgibson@bitwarden.com>
* [PM-108] Fingerprint is calculated based on pubKey
* [PM-108] Change userId to userEmail. Remove fingerprint from AuthResponse
* [PM-130][PM-107] Remove fingerprint from request and clients UI
* add settingsService.getEquivalentDomains
* check that an iframe URL matches cipher.login.uris before autofilling
* disable autofill on page load if it doesn't match
* show a warning to the user on regular autofill if it doesn't match
---------
Co-authored-by: Todd Martin <106564991+trmartin4@users.noreply.github.com>
Co-authored-by: Robyn MacCallum <robyntmaccallum@gmail.com>
* [EC-1046] add activate autofill policy to web
* [EC-1046] add local setting if policy needs to be set
* [AC-1046] activate autofill on page load if flag exists
* [AC-1046] move activation to current tab page
* [AC-1046] add warning to autofill policy
* [AC-1046] add useActivateAutofillPolicy to organization reponse
* [AC-1046] autofill to auto-fill
* Move autofillConstants to autofill folder
* Remove autofillConstants from whitelist capital
* Add vault team as code owners for autofill folder
* Update codeowners for web
* This commit implements the following main changes:
- Query elements by using a TreeWalker instead of `document.querySelector[All]`. The reason for this is that `querySelector[All]` doesn't traverse into elements with ShadowRoot.
- Recursively traverse into elements with `openOrClosedShadowRoot` or `Element.shadowRoot` (depending on browser support) inside TreeWalker loop.
- Use new query logic everywhere inside `autofill.js`. This also means we need to use filter functions to find elements with specific nodeNames and/or attributes instead of CSS selector strings.
- Add two new `instanceof Element` checks to prevent `Failed to execute 'getComputedStyle' on 'Window': parameter 1 is not of type 'Element'." errors`.
This change is fully backward compatible. If `openOrClosedShadowRoot` is not available it will always return undefined and we will never traverse into ShadowRoots just as the behavior was before this change.
* refactor: outsource recursive logic to accumulatingQueryDocAll
We don't want the `els` argument on the `queryDocAll` function because it's never used from outside the function itself. Thus the recursive logic is moved to `accumulatingQueryDocAll`.
Now `queryDocAll` creates an empty array and passes it to `accumulatingQueryDocAll` which recursively walks the document and all ShadowRoots and pushes all found nodes directly to the referenced array.
The decision to use a directly mutated array instead of `Array.concat(els)` or `Array.push(...els)` is for performance reasons. Pushing to the referenced array was 74% faster than using `Array.push` with spread operator and even 90% faster than using `Array.concat`.
Co-authored-by: Chad Miller <64046472+chadm-sq@users.noreply.github.com>
* refactor: extract input field relevance check into own function
Addresses CodeScene analysis violation "Bumpy Road Ahead" where conditional logic is checked for a nesting of 2 or deeper.
* refactor: use proper element attribute handling
- use el.type attribute instead of el.attribute.type on input elements. This makes sure we also get 'text' when type attribute is not explicitly specified
- use el.htmlFor attribute instead of el.attribute.for on label elements
- use `hasAttribute` and `getAttribute` methods instead of `attributes[]` which is discouraged by https://quirksmode.org/dom/core/#attributes
- improve readability of `isRelevantInputField`
---------
Co-authored-by: Thomas Rittson <31796059+eliykat@users.noreply.github.com>
Co-authored-by: Chad Miller <64046472+chadm-sq@users.noreply.github.com>
Co-authored-by: Thomas Rittson <trittson@bitwarden.com>
* Updated messages
* Implement method in platformUtils to get autofill command
* Updates to callout in current tab component
* Add autofill keyboard shortcut to autofill settings
* style updates
* Add routing animation for autofill settings
* Remove extra function
* Remove unnecessary safari logic
* Remove autofill settings transition added in another PR
* Fix callout still present after clicking 'Got it' (#4797)
---------
Co-authored-by: Jared Snider <116684653+JaredSnider-Bitwarden@users.noreply.github.com>
* Remove ctor initialization in session sync
* Fix error message
* Prefer messaging over storage for syncing
We still need to use storage for instances where we open a popup or
worker and need to populate from a cache. However, in MV2, this is only
ever stored in a background service, ensuring that all data is stored in
from a long-lived context (mv2) or serialized to storage (mv3).
* Test new storage scheme
* Feature/SG-680 - Create Domain Verification Comp (#4283)
* domain-base.ts - added link to Architectural docs describing domain base class purpose
* SG-680 - (1) Created Org Domain API and observable based data store service (2) Created required response and request models
* SG-680 - Renaming org domain service abstractions to match existing convention
* SG-680 - (1) Updated getByOrgId method to return array of data to match back end + renamed it as such (2) Updated OrgDomainApiService get methods to update the OrgDomainService observables
* Two-factor-setup comp - change "tabbed-header" class to "page-header" to achieve visual consistency with other settings components.
* SG-680 - Refactor Org Domain API & domain services to conform to ADR 0013 - Avoid layered folder structure for request/response models (i.e., put models near "owner" services)
* SG-680 - Update Organization model to include a canManageDomainVerification check
* SG-680 - Created Domain Verification component and started scaffolding out HTML
* SG-680 - New OrgDomain state and API services need to be registered on jslib-services.module in order to be injectable into components for use (this is what maps abstractions to implementation for dependency injection)
* SG-680 - OrgDomainApiServiceAbstraction should be an abstract class
* SG-680 - Update OrgDomainApiService to use ListResponse and map into OrganizationDomainResponse properly
* SG-680 - Moved domain verification comp into subfolder to add clarity in folder structure
* SG-680 - Good start on Domain Add Edit Dialog
* SG-680 - Domain Add Edit Dialog - (1) Random generation of DNS TXT Record now working (2) DNS TXT Record Copyable (3) Additional translations added (4) Info callout added
* SG-680 - Domain Add Edit Dialog - (1) Added custom validator for domain name (2) Disable verify btn if form invalid
* SG-680 - Updated Domain Name custom validator to pass back error message in format the error.component.ts expected so it can be displayed without an untranslated error prefix of "invalidDomainName"
* Form-button - Added useful note regarding use of the bitFormButton directive and how it requires the use of the bitButton directive as well.
* SG-680 - OrgDomain.service - replace delete with splice as delete doesn't actually alter array. Duh.
* SG-680 - Domain verification progress - (1) Table layout + loading working for the most part (more translations needed (2) Add & edit opening dialog (3) Dialog first draft of save and verify
* SG-680 - DomainAddEditDialog - Unique domain name enforcement implemented
* SG-680 - Domain Name Custom Reactive forms validator refactor - swapped to regex to support proper domain format (which now enforces the requirement of a .com or similar)
* SG-680 - OrgDomainApi svc - must await send of delete call otherwise runs synchronously. Duh.
* SG-680 - Domain verification progress - (1) CopyDnsTxt added to state service (2) Refactored dialog to use async actions (3) Dialog form changes now mark form controls as touched for more responsive error handling
* SG-680 - Domain-add-edit-dialog - Confirmation required now for domain deletion
* SG-680 - Domain verification table options now supports removing domains with confirmation prompt
* Shared module - merge conflict resolution + removing unused imports so I can check this in.
* SG-680 - Adding missing translations
* SG-680 - Comment clean up + todo
* Revert "Shared module - merge conflict resolution + removing unused imports so I can check this in."
This reverts commit 98fe346e67.
* SG-680 - DomainAddEditDialog - Replace bitAction with leveraging bitSubmit so that when users hit enter in a field the form gets submitted.
* SG-680 - Added httpStatusCode enum
* SG-680 - OrgDomainAPI - Verify endpoint now returns domain response model so upsert to sync obs state service
* SG-680 - Domain Verification comp - (1) Display last checked date (2) Verify first attempt in place (3) justify options content per design
* SG-680 - DomainAddEditDialog - Validation and error handling overhaul
* SG-680 - DomainAddEditDialog - (1) Autofocus domain name on new domain creation (2) Removed form.invalid == form disabled logic because of accessibility concerns
* SG-680 - OrgDomainResponse model refactor - back end is sending lower cased props
* SG-680 - OrgDomain service refactor - (1) Use proper abstraction for i18n svc (2) Don't make non-async methods async for no reason
* SG-680 - OrgDomainService - Added test suite
* SG-680 - Renaming httpStatusCode.enum to strip off .enum in attempt to pass eslint issue
* SG-680 - Renaming httpStatusCode enum file again to remove all capitalized letters to pass eslint rules.
* SG-680 - Updating HttpStatusCode import b/c auto import update missed it.
* SG-680 - DomainAddEditDialog - Don't show callout if domain is verified
* SG-680 - DomainVerificationComp - Add error handling to verify to handle case where domain isn't available
* SG-680 - OrgDomainApiSvc - svc should use abstractions in constructor
* SG-680 - OrgDomainApiSvc - added full test suite
* SG-680 - OrgDomainSvc test suite - fixing broken test
* SG-680 - Domain Verification Validation Scenario: show form control error when domain verification fails - (1) Enhanced bitSubmit to optionally allowDisabledFormSubmit (2) Enhanced bitInput to optionally allow showErrorsWhenDisabled + added new docs
* SG-680 - Adjusting location & name of the bitInput docs to be in the top level docs section to match historical consensus and existing pattern.
* SG-680 - Removed TODO for adding tests since I've already added tests.
* SG-680 - DomainAddEditDialog - Handle verify domain conflict exceptions just in case
* SG-680 - Adjusting location of Domain verification settings item in the organization settings menu to match figma.
* SG-680 - Removing unnecessary comment
* SG-680 - Domain Verification component - updated svg to not have alt text so it is treated as decorative by screen readers for accessibility.
* SG-680 - Fixing messages.json missing }
* SG-680 - DomainAddEditDialog - Hardcoding inputs to bit-dialog as component vars are not needed for dynamic anything right now.
* SG-680 - Dialog comment refactor
* SG-680 - OrgDomainSvc - comment and console log removals.
* SG-680 - Updating OrgDomain Service test suites to have better test titles.
* Defect/web org domain claiming bugfixes (#4458)
* SG-949 - OrgDomainVerification - Domain name validator now supports n levels of subdomains as well as top level domains.
* SG-955 - On domain verification error or failure, call to update the individual org domain item to get an updated last checked date on the client.
* SG-953 - In domain verification dialog edit, if verify called and failed, then must manually mark domain name as touched for errors to show up.
* SG-954 - Domain Verification edit dialog - Fixing delete button not having trash icon displayed + added i18n translation for title prop.
* SG-956 - Fixing domain claiming event logs so that they show up on the client (more to do as there are some events missing client & member)
* Form button directive comment update
* SG-977 - Event Log improvements: (1) Add new device type of server (2) Add EventSystemUser mapping to translated value. The end result is that both SCIM and Domain verification logs properly show server as the client and SCIM or Domain verification as the member.
* Add comment to clarify use of SCIM in EVENT_SYSTEM_USER_TO_TRANSLATION dict
* DeviceType.Server must be incremented to 22 b/c server master already has a DeviceType.SDK of 21.
* Add SDK w/ value of 21 to DeviceType to match master server
* Defect/web org domain claiming bugfixes the sequel (#4530)
* Update <bit-table> to latest standard so it works again (swap body from ng-container to ng-template)
* Input directive - showErrorsWhenDisabled case doesn't need to care if input isActive or not.
* SG-949 - Update domain name validator regex to prevent http://, https://, and www.
* SG-771 - Added claimed domain logic to web client (#4603)
* SG-771 / SG-772 / SG-743 - Add claimed domain logic which skips entry of Org SSO Id when an org has a claimed and verified domain to web, browser, and desktop.
* Fix lint errors by adding button types
---------
Co-authored-by: SmithThe4th <gsmith@bitwarden.com>
* [EC-1060] feat: center align table cell content (#4618)
* [EC-1027] feat: remove `tw-text-sm` (#4617)
(cherry picked from commit 807a135418)
* Set checkForBreaches to true (checked) by default.
(cherry picked from commit 28d5961ed3)
* Open WebAuthn Prompt in New Tab (#4696)
- We already did this for Firefox and Safari
* Turn off checking for breaches in web for now (#4698)
* [PS-2455] Catch and log contextmenu errors (#4699)
* Set initRunning to true
initRunning was checked and at the end set to false, but it never got set to true
* Catch and log contextmenu errors
(cherry picked from commit db202f9e9e)
* Fix race condition when setting modal properties (#4701)
(cherry picked from commit 1c18a73a56)
* SG-1047 Fix remember me on web (#4706)
(cherry picked from commit d27ef74fe1)
* PS-2450 EC-1073 Do not decode and normalize query (#4708)
Co-authored-by: Jake Fink <jfink@bitwarden.com>
(cherry picked from commit 13746c1840)
* [Desktop/Browser] - Renew signing certificates (#4739)
(cherry picked from commit 4438ab9e3a)
* Revert to MV2 Autofill Logic (#4705)
* Bumped web version to 2023.2.0 (#4753)
Co-authored-by: bitwarden-devops-bot <106330231+bitwarden-devops-bot@users.noreply.github.com>
(cherry picked from commit 4e4de9812e)
* [EC-1074] fix: block interaction during async action (#4732)
The user is able to interact with vault-items while actions like delete are happening. This commit is a temporary fix to disable all interaction surfaces during those async actions.
(cherry picked from commit 957ed50c82)
* Bumped browser version to 2023.2.0
---------
Co-authored-by: Andreas Coroiu <acoroiu@bitwarden.com>
Co-authored-by: Todd Martin <tmartin@bitwarden.com>
Co-authored-by: Justin Baur <19896123+justindbaur@users.noreply.github.com>
Co-authored-by: Robyn MacCallum <robyntmaccallum@gmail.com>
Co-authored-by: Daniel James Smith <djsmith85@users.noreply.github.com>
Co-authored-by: Thomas Rittson <31796059+eliykat@users.noreply.github.com>
Co-authored-by: Carlos Gonçalves <cgoncalves@bitwarden.com>
Co-authored-by: Matt Gibson <mgibson@bitwarden.com>
Co-authored-by: mimartin12 <77340197+mimartin12@users.noreply.github.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: bitwarden-devops-bot <106330231+bitwarden-devops-bot@users.noreply.github.com>
Co-authored-by: Opeyemi Alao <54288773+Eeebru@users.noreply.github.com>
* Added comments.
* More comments.
* More function comments.
* Changed comment to add missing words.
Co-authored-by: Thomas Rittson <31796059+eliykat@users.noreply.github.com>
* Added better comment on fill query function.
Co-authored-by: Thomas Rittson <31796059+eliykat@users.noreply.github.com>
* More comments.
* Added additional documentation on viewable and visible
* Undid changes to the logic to avoid any chance of breaking anything.
---------
Co-authored-by: Thomas Rittson <31796059+eliykat@users.noreply.github.com>
* Move auth service factories to Auth team
* Move authentication componenets to Auth team
* Move auth guard services to Auth team
* Move Duo content script to Auth team
* Move auth CLI commands to Auth team
* Move Desktop Account components to Auth Team
* Move Desktop guards to Auth team
* Move two-factor provider images to Auth team
* Move web Accounts components to Auth Team
* Move web settings components to Auth Team
* Move web two factor images to Auth Team
* Fix missed import changes for Auth Team
* Fix Linting errors
* Fix missed CLI imports
* Fix missed Desktop imports
* Revert images move
* Fix missed imports in Web
* Move angular lib components to Auth Team
* Move angular auth guards to Auth team
* Move strategy specs to Auth team
* Update .eslintignore for new paths
* Move lib common abstractions to Auth team
* Move services to Auth team
* Move common lib enums to Auth team
* Move webauthn iframe to Auth team
* Move lib common domain models to Auth team
* Move common lib requests to Auth team
* Move response models to Auth team
* Clean up whitelist
* Move bit web components to Auth team
* Move SSO and SCIM files to Auth team
* Revert move SCIM to Auth team
SCIM belongs to Admin Console team
* Move captcha to Auth team
* Move key connector to Auth team
* Move emergency access to auth team
* Delete extra file
* linter fixes
* Move kdf config to auth team
* Fix whitelist
* Fix duo autoformat
* Complete two factor provider request move
* Fix whitelist names
* Fix login capitalization
* Revert hint dependency reordering
* Revert hint dependency reordering
* Revert hint component
This components is being picked up as a move between clients
* Move web hint component to Auth team
* Move new files to auth team
* Fix desktop build
* Fix browser build
This reduces the noise in the app.modules where the angular locales are loaded.
Simplifies extending with new locales as all of them can be found in the same place under the same file-name
This has previously also been done in the web client
* Split folder service back/foreground
Also splits for folderApiService, since that depends on folderService.
TODO: this split will need to be done for any dependents of a split
service.
* Prefer popup-specific services VaultFilterService
* Prefer popup-specific services i18n
* Prefer popup-specific services configService
* StateService is required for browserSync
* Add Policy Api Service
* Remove unused orgService from PolicyApiService
* Fixup missed dependency
* Attach cryptography services in popup context
* Improve session syncer initialization
* Fix storage reseed on logout
The check for the set vault-timeout needs to happen before all cleaning stateService
Remove check inside of reseedStorage as happens outside prior to calling it (logout/settings.component)
* Remove old limitation to only run on certain browsers
Execute on all browsers besides Safari as it does not support chrome.storage.local.get with an empty key
https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/storage/StorageArea/get
* Revert "Remove old limitation to only run on certain browsers"
This reverts commit d7f71aa0b6.
* work: add base logic for password lookup
* work: added browser support for hibp
* work: SG-558 combine weak + leak warning
* fix: language stuff
* fix: form values are neater tho :(
* fix: no cast
The problem was the incorrect identification of the input format. The input with `placeholder="ММ / ГГ"` got a value in `YYYY-MM` format, which is fallback in case when required format was not identified. It happened because `ММ` in the placeholder value had russian characters, but actual constant has english ones.
* Add combine helper
* Helper for running multiple actions with single service cache
* Remove unneeded any
* Send identifier through callback
* Extend Tab Message
* Split out ContextMenu logic
* Add tests for ContextMenu actions
* Context Menu Fixes
* Await call to menu handler
* set onUpdatedRan to false when it's ran
* Switch to using new cache per run
* Fix Generate Password Test
* Remove old file from whitelist
* Remove Useless never from Generic
* Update apps/browser/src/background/main.background.ts
Co-authored-by: Matt Gibson <mgibson@bitwarden.com>
* Address PR Feedback
* Specify a Document Url for Context Menu Items
* Update Test
* Use Generate Password Callback
* Remove DocumentUrlPatterns
Co-authored-by: Matt Gibson <mgibson@bitwarden.com>
* Force update of badge icon and text on all windows
Affects MV2 and MV3
No longer pass in tab and windowId to setLoggedOut and setLocked
When the vault is locked or the user logs out, all open windows/tabs need to be updated
Iterating over all active tabs like in 2022.10.1 was missing:
488734577f/apps/browser/src/background/main.background.ts (L859-L867)
Create clearBadgeText function to take care of it.
* Only try to retrieve tab in unlocked state
* Remove lock icon when unlocking on all windows
* Only use windowId to retrieve tab when defined
In MV2 the `windowId` isn't passed into updateBage and fails to retrieve the correct tab to update.
This resorted in the badge not showing a match count in another window.
Fixes#4260
Ensure in MV3 that all listener pass on the windowId if present.
* Fix Firefox private mode
Only pass on the windowId if defined and within Firefox
In private mode the main.background bootstrap-method passes in the windowId
Do not refreshBadge when in private mode
Previously 488734577f/apps/browser/src/background/main.background.ts (L575-L586) setIcon would skip in private mode. Calling refreshBadge without this would update the badge on all windows (normal and private ones)
* Make username regenerator button same as password one
it seems that (originally?) it wanted to be disabled at first and then become active again once the generator's async call was finished...but this seems unnecessary. removing all that extraneous stuff that doesn't seem to be actually doing anything makes this work just as well as the password generator button, and doesn't end up losing/resetting focus.
* Remove the `[disabled]` attribute from regenerate buttons
* Use `aria-disabled` instead of `disabled`, make click event conditional
* Make spinner show for `aria-disabled` controls as well
* Use aria-describedby for all help blocks/hints
* Add label to send notes textfield
* Use aria-describedby for all help blocks/hints / browser
* Tweak help block for confirming identity
* Remove aria-describedby for general login form
Seems unnecessary / doesn't need an extra description
* Fix compiler error
* Remove unnecessary aria-describedby
After testing, turns out the addition here was unnecessary, as the help block is already part of the `<label>`
* Fix aria-describedby reference for user verification component
* Remove redundant aria-describedby and generated id for radio buttons
* Fix aria-describedby for send editing in Safari
> When editing a send, the text below the deletion date is not recognized by the screen reader reliably (send-add-edit.component.html / efflux-dates.component.html). There might be an issues depending on which browser is used (deletionDateHelp vs. deletionDateCustomHelp
* Make custom environment container role="group", give it a label and description
> In the Environment Url Settings, the text “For advanced users…….“ is not not recognized by the screen reader. Not sure how to best solve this one, as it's below all individual url inputs. Ideally it gets announced with the baseUrl part or when focusing Custom Environment)
* feat-web: add hidden char count toggle
* Added toggle char count for desktop
* Use Tailwind and Component Library, add i18n
* Hide char count when password is hidden
* Initial proposal
* Update colors per design spec for all clients
Also make variable names consistent across clients
* Remove unused scss
* Add styling
* Set fixed with for password count elements
* Add separate wrapped stories
* Fix alignment of first char when wrapped
* Minor refactors
* Make naming consistent
* Add Figma url
* add barrel files
* Use CL component
* Fix template
* Remove duplicate style
* Use ColorPasswordComponent in web, remove old pipe
Also remove styling and move pipe out of jslib-module given that
it's no longer shared by all Angular clients
* Run prettier
* Remove unused scss vars
* Undo unnecessary changes
* Remove unnecessary changes
* Fix styling
* Fix selector
* Collect show password event
* Fix incorrect background in dark mode
* Fix linting
* Use color password for password history
* Add char count to hidden custom fields in desktop
* Fix char count background in web: take 2
* Update service name
* Add missing label toggleCharacterCount for desktop
Co-authored-by: Daniel James Smith <djsmith@web.de>
Co-authored-by: Thomas Rittson <trittson@bitwarden.com>
* SG-825 - policy.service - Apply policies of disabled orgs
* SG-825 - OrgFilter - Show org suspended icon when org is disabled and remove personal vault policy enabled
* SG-825 - Org Filter refactor - Enterprise users can now access org options to leave orgs without selecting them (previously, you had to select an org to get the options to show up which was not possible for disabled orgs). Users can now leave disabled orgs.
* SG-825 - fix aria label compile issue
* SG-825 - Browser - Vault filter CSS refactor - (1) Better ellipsis truncation implemented (2) Selected vault and dropdown widths now scale dynamically based on selection and container width
* SG-825 - Desktop - (1) Org suspended warning icon now displayed on disabled orgs even when personal vault removed policy applied (2) Org suspended icon now has same accessibility (title / label) as web & browser.
* Remove default landing on masterpassword page
* Remove rememberEmail state service value that isn't needed
* Remove last occurence of setRememberEmail
* Remove alwaysRememberEmail functionality
* Remove always remember email from browser and add option to
* Add extra spacing around remember email check
* [SG-884] Fix Remember Email functionality for Login with SSO (#4238)
* Add saveEmailSettings method to LoginService
* Add StateService as a dependency to LoginService
* Update login components to utilize new login service method for saving rememberedEmail
* Only sync if synced value changes
Co-authored-by: Daniel James Smith <djsmith85@users.noreply.github.com>
* Catch error if no one is listening
This occurs if the background tries to update any visualizers, but none
are open.
Co-authored-by: Daniel James Smith <djsmith85@users.noreply.github.com>
Co-authored-by: Justin Baur <justindbaur@users.noreply.github.com>
* Allow provided deserializer to handle not found
* Debounce synced items
* Remove object-hash
* Revert "Only sync if synced value changes"
This reverts commit 024fe226d9.
* Test debounce
Co-authored-by: Daniel James Smith <djsmith85@users.noreply.github.com>
Co-authored-by: Justin Baur <justindbaur@users.noreply.github.com>
Co-authored-by: Justin Baur <19896123+justindbaur@users.noreply.github.com>
* Move chevron/arrow to start of disclosure widget
in addition, changes the only expand/collapse disclosure widget like this on the web client to use the same `<h3><button>...</button></h3>` structure as on browser extension and desktop app
* Change collapsed/expanded icons
Make them more understandable and consistent with other expand/collapse controls
* Harmonise desktop +/- controls to use arrow/chevron icons as well
also removes the incorrect `A11yTitle` in the generator that currently overrides the visible "Options" text (leading to a failure of WCAG 2.5.3 Label in Name)
* Change the icons for the expand/collapse disclosure widget in SSO component
* Expand icon explanation
plus minor typo cleanup
* Add patch for Send button focus outline
* Await in `has` calls.
* Add disk cache to browser synced items
Note: `Map` doesn't serialize nicely so it's easier to swap over to a
`Record` object for out cache
* Mock and await init promises in tests
* Remove redundant settings checks
* Move event.service to it's own folder
Move abstractions/event.service to abstractions/event/event.service
Move services/event.service to services/event/event.service
Fix all the imports
* Extract event-upload from event.service
Move `uploadEvents` from `EventService` to `EventUploadService`
Create event-upload-service-factory
Fix wiring up all the dependencies
* Remove clearEvents from EventService
clearEvents is only related to uploading events and can be moved into EventUploadService
Change the logout-method to only call EventUploadService.uploadEvents as that also calls clearEvents internally
* Rename EventService to EventCollectionService
Rename libs\common\abstraction\event\event.service.ts to libs\common\abstractions\event\event-collection.service.ts
Rename libs\common\services\event\event.service.ts to libs\common\services\event\event-collection.service.ts
Fix all the imports
Fix up service regristration/instantiation
Reanme \browser\src\background\service_factories\event-service.factory.ts to \browser\src\background\service_factories\event-collection-service.factory.ts
* Move interval to upload events to EventUploadSvc
Move the `init()` from event-collection.service to event-upload.service
Change call-site in web, desktop, browser
* [EC-584] Update ApiService to remove any appendages to ClientVersion
* [EC-584] Extract application version number logic from ApiService to PlatformUtils
* Update libs/electron/src/services/electronPlatformUtils.service.ts
Co-authored-by: Oscar Hinton <Hinton@users.noreply.github.com>
* [EC-584] Use getApplicationVersion as source for getApplicationVersionNumber
* [EC-584] Remove defaulting to dash on getApplicationVersionNumber and add unit tests
Co-authored-by: Oscar Hinton <Hinton@users.noreply.github.com>
* Do not use object constructors for names
Minification was selecting different class names for different instances
of services, which was causing them not to sync properly.
This was happening _only_ in production mode for some reason, perhaps
due to minifying post chunking?
* Add tests for additional synced properties
* Register alarms and listen to them
* Wire up alarms and actions
Register actions(commands) which can be executed by an alarm
Create methods in alarm-state to persists actions and execution times
Flesh out AlarmListener to iterate over registered commands and check if they need to execute
Simplify clearClipboard action as it only handles the action instead of also worrying if it should fire.
Enable previously disabled clear-clipboard tests (#3532)
Adjust clear-clipboard tests to new simpler execution
Co-authored-by: Matt Gibson <mgibson@bitwarden.com>
* Make linter happy
* Revert accidentally commited with merging master
* Add jsdoc per PR comment
* Fixed types to simplify adding new alarm actions
Create a new alarm action (i.e `clear-clipboard.ts`)
Export a name for the alarm action (`clearClipboardAlarmName`)
`alarm-state.ts`
Import alarm action name
Extend `alarmKeys` and `alarmState`
`on-alarm-listener`
Import alarm action method and alarm action name
Add it to the switch case
* Add comment to clearClipboard action
Add comment to replace clearClipboard impl once clipboardApi's are accessible by service-workers
https://bugs.chromium.org/p/chromium/issues/detail?id=1160302
Co-authored-by: Matt Gibson <mgibson@bitwarden.com>
* Elevate Map <-> Record JSON helpers to Utils
* Build Account from a StateService provided AccountDeserializer
* Allow Manifest V2 usage of session sync
Expands use of SessionSyncer to all Subject types. Correctly handles
replay buffer for each type to ignore the flood of data upon
subscription to each Subject type.
* Create browser-synced Policy Service
* Move BrowserFolderService
* Libs account serialization improvements
* Serialize Browser Accounts
* Separate StateService in background/visualizations
Visualizer state services share storages with background page, which
nicely emulates mv3 synchronization through session/local storage. There
should not be multithreading issues since all of these services are
still running through a single thread, we just now have multiple places
we are reading/writing data from.
Smaller improvements
* Rename browser's state service to BrowserStateService
* Remove unused WithPrototype decorator :celebrate:
* Removed conversion on withPrototypeForArrayMembers. It's reasonable to
think that if the type is maintained, it doesn't need conversion.
Eventually, we should be able to remove the withPrototypeForArrayMembers
decorator as well, but that will require a bit more work on
(de)serialization of the Accounts.data property.
* Make Record <-> Map idempotent
Should we get in a situation where we _think_ an object has been
jsonified, but hasn't been, we need to correctly deal with the object
received to create our target.
* Check all requirements while duck typing
* Name client services after the client
* Use union type to limit initialize options
* Fixup usages of `initializeAs`
* Add OrganizationService to synced services
Co-Authored-By: Daniel James Smith <djsmith85@users.noreply.github.com>
* Add Settings service to synced services
Co-Authored-By: Daniel James Smith <djsmith85@users.noreply.github.com>
* Add missing BrowserStateService
* Fix factories to use browser-specific service overides
* Fix org-service registration in services.module
* Revert "Add missing BrowserStateService"
This reverts commit 81cf384e87.
* Fix session syncer tests
* Fix synced item metadata tests
* Early return null json objects
* Prefer abstract service dependencies
* Prefer minimal browser service overrides
* [SG-632] - Change forwarded providers radio buttons list to dropdown (#4045)
* SG-632 - Changed forwarded providers list of radio buttons to dropdown
* SG-632 - Added role attributes to improve accessibility.
* SG-632 - Added sorting to array and empty option
* SG-632 - Fix styling to match standards.
* rename cipehrs component to vault items component (#4081)
* Update the version hash for the QA Web build artifact to follow SemVer syntax (#4102)
* Remove extra call to toJSON() (#4101)
Co-authored-by: Daniel James Smith <djsmith85@users.noreply.github.com>
Co-authored-by: Daniel James Smith <djsmith@web.de>
Co-authored-by: Carlos Gonçalves <carlosmaccam@gmail.com>
Co-authored-by: Jake Fink <jfink@bitwarden.com>
Co-authored-by: Joseph Flinn <58369717+joseph-flinn@users.noreply.github.com>
Co-authored-by: Robyn MacCallum <robyntmaccallum@gmail.com>
* SG-632 - Changed forwarded providers list of radio buttons to dropdown
* SG-632 - Added role attributes to improve accessibility.
* SG-632 - Added sorting to array and empty option
* SG-632 - Fix styling to match standards.
* Move OrganizationService to fullSync
* Add Tech Debt Tracking Link
* Remove Commented out code
* Add InternalOrganizationService
* Use InternalOrganization in services that get to update state
* Browser Extension - Send - Expiration / Deletion date calendar icon + datepicker pop up now respect theme better in Chrome / Chromium based browsers and Safari (Firefox datepicker pop up doesn't seem to have an easy mechanism for theming)
* SG-428 - Extension - Iconography for date inputs for Chromium browsers now reflects theme colors properly + hover states; icon not shown on non-Chromium browsers
* Variables.scss - ran prettier locally after tweaking comments to pass eslint checks
* fix for covered dropdown on empty vault
This could be done one of 2-3 ways. I think this might be the least problematic, but could also be done with just changing "position: absolute" to "relative on the ".no-items" class - base.css:461 For some reason, I'm unable to load the spinner to test.
* rename class
* Send all saved url to autofill script
* Handle array of matched urls in content script
* Prompt at most once to override insecure autofill
* Do not send never match URIs to content script
We know these URIs did not cause the autofill match, so we
can safely remove these from the list of potential matches.
* more css changes
* add icon button hover
* Update apps/browser/src/popup/scss/box.scss
Co-authored-by: Oscar Hinton <Hinton@users.noreply.github.com>
* Update apps/desktop/src/scss/box.scss
Co-authored-by: Oscar Hinton <Hinton@users.noreply.github.com>
* feedback updates
* restore desktop pseudo rule
* update to include some variable fixes and deletions
* updates per oscar
* feedback updates
more universal variable, adjusted box padding (per Kyle), and aligned footer text
* changes per product design
added border for selects, border around generator, and hover for solarizeddark
* add more helper text space below for visual separation
* group new variable
* login page button fix
Dflinn found an odd margin on the login page
* Revert "Merge branch 'master' into browser-ext-ui-update-test"
This reverts commit b8007102f9, reversing
changes made to 246768cb12.
* fix button height
* revert file changes
* test adjustments
Co-authored-by: Oscar Hinton <Hinton@users.noreply.github.com>
Co-authored-by: Kyle Spearrin <kyle.spearrin@gmail.com>
* community PR reviewed, Update search cancel button to be visible in all themes
* community PR reviewed, Update search cancel button to be visible in all themes 2
* [SG-163] Two step login flow web (#3648)
* two step login flow
* moved code from old branch and reafctored
* fixed review comments
* [SG-164] Two Step Login Flow - Browser (#3793)
* Add new messages
* Remove SSO button from home component
* Change create account button to text
* Add top padding to create account link
* Add email input to HomeComponent
* Add continue button to email input
* Add form to home component
* Retreive email from state service
* Redirect to login after submit
* Add error message for invalid email
* Remove email input from login component
* Remove loggingInTo from under MP input
* Style the MP hint link
* Add self hosted domain to email form
* Made the mp hint link bold
* Add the new login button
* Style app-private-mode-warning in its component
* Bitwarden -> Login text change
* Remove the old login button
* Cancel -> Close text change
* Add avatar to login header
* Login -> LoginWithMasterPassword text change
* Add SSO button to login screen
* Add not you button
* Allow all clients to use the email query param on the login component
* Introduct HomeGuard
* Clear remembered email when clicking Not You
* Make remember email opt-in
* Use formGroup.patchValue instead of directly patching individual controls
* [SG-165] Desktop login flow changes (#3814)
* two step login flow
* moved code from old branch and reafctored
* fixed review comments
* Make toggleValidateEmail in base class public
* Add desktop login messages
* Desktop login flow changes
* Fix known device api error
* Only submit if email has been validated
* Clear remembered email when switching accounts
* Fix merge issue
* Add 'login with another device' button
* Remove 'log in with another device' button for now
* Pin login pag content to top instead of center justified
* Leave email if 'Not you?' is clicked
* Continue when enter is hit on email input
Co-authored-by: gbubemismith <gsmithwalter@gmail.com>
* [SG-750] and [SG-751] Web two step login bug fixes (#3843)
* Continue when enter is hit on email input
* Mark email input as touched on 'continue' so field is validated
* disable login with device on self-hosted (#3895)
* [SG-753] Keep email after hint component is launched in browser (#3883)
* Keep email after hint component is launched in browser
* Use query params instead of state for consistency
* Send email and rememberEmail to home component on navigation (#3897)
* removed avatar and close button from the password screen (#3901)
* [SG-781] Remove extra login page and remove rememberEmail code (#3902)
* Remove browser home guard
* Always remember email for browser
* Remove login landing page button
* [SG-782] Add login service to streamline login form data persistence (#3911)
* Add login service and abstraction
* Inject login service into apps
* Inject and use new service in login component
* Use service in hint component to prefill email
* Add method in LoginService to clear service values
* Add LoginService to two-factor component to clear values
* make login.service variables private
Co-authored-by: Gbubemi Smith <gsmith@bitwarden.com>
Co-authored-by: Addison Beck <addisonbeck1@gmail.com>
Co-authored-by: Robyn MacCallum <robyntmaccallum@gmail.com>
Co-authored-by: gbubemismith <gsmithwalter@gmail.com>
* Add item decryption to encryptService
* Create multithreadEncryptService subclass to handle web workers
* Create encryption web worker
* Refactor cipherService to use new interface
* Update dependencies
* feat(browser): implement theming for notification bar
* refactor(browser): split notification bar function
* refactor(browser): use own method for getCurrentTheme
* chore(browser): add close.svg file as an asset
this file is embedded in apps/browser/src/notification/bar.html
* feat(browser): change textContrast color on primary buttons
* feat(browser): use dedicated color variable for close button
* feat(browser): use textColor for close button
* feat(browser): implement styling for select fields
* feat(browser): improve close button styling, add hover effect
* PS-976 - when user has cipher readonly permissions, prevent user from editing cipher fields and make separate api call that only updates Favorite and Folder values
* PS-976 - in the readonly edit cipher view, hide non-operable buttons and display select values as readonly input text
* PS-976 - update failing test
* PS-976 - split cipher saveWithServer call into Create and Update calls
* PS-976 - replace property with function call to get the card expiration month for the readonly view
* MM-976 - when user has readonly permissions hide "delete" button on View Item view, hide generate username/password buttons on Edit Item view
* PS-976 - rename cipherPartialRequest file to align with new naming convention
* Do not autofill if sandboxed
`self.origin` is 'null' if inside a frame with sandboxed csp or iframe tag
* Update apps/browser/src/content/autofill.js
Co-authored-by: Oscar Hinton <Hinton@users.noreply.github.com>
* Record changes in autofill.js
Co-authored-by: Oscar Hinton <Hinton@users.noreply.github.com>
* Initial - add folder id to popup item view
* Add folder service to view component
* Move folder info higher in the item view as proper box
* Add folder name handling to component
* Add folder field to browser view
* Add folder field to desktop view
* Make folder field draggable
following the merging of https://github.com/bitwarden/clients/pull/3321 also make the folder field draggable
* Use `<label>` and readonly `<input>`
In anticipation of https://github.com/bitwarden/clients/pull/3485 being merged
* Changes from review
- change input name to `folderName`, match it in the `for` attribute on the `<label>`
- add an `if` check before querying folder names
* Match `name` to `id`
Co-authored-by: Daniel James Smith <djsmith85@users.noreply.github.com>
* Add needed factories for AuthService
WIP: Allow console logs
* Add badge updates
* Init by listener
* Improve tab identification
* Define MV3 background init
* Init services in factories.
Requires conversion of all factories to promises.
We need to initialize in factory since the requester of a service
doesn't necessarily know all dependencies for that service. The only
alternative is to create an out parameter for a
generated init function, which isn't ideal.
* Improve badge setting
* Use `update-badge` in mv2 and mv3
Separates menu and badge updates
* Use update-badge everywhere
* Use BrowserApi where possible
* Update factories
* Merge duplicated methods
* Continue using private mode messager for now
* Add static platform determination.
* Break down methods and extract BrowserApi Concerns
* Prefer strict equals
* Init two-factor service in factory
* Use globalThis types
* Prefer `globalThis`
* Use Window type definition updated with Opera
Co-authored-by: Justin Baur <justindbaur@users.noreply.github.com>
* Distinguish Opera from Safari
Opera includes Gecko, Chrome, Safari, and Opera in its user agent. We need to make sure that
we're not in Opera prior to testing Safari.
* Update import
* Initialize search-service for update badge context
* Build all browser MV3 artifacts
only uploading Chrome, Edge and Opera artifacts for now, as those support manifest V3
Also corrects build artifact to lower case.
* Remove individual dist
Co-authored-by: Justin Baur <justindbaur@users.noreply.github.com>
Co-authored-by: Justin Baur <19896123+justindbaur@users.noreply.github.com>
* Add generate command
* Add JSDoc
* Minor improvements
* Remove unneeded comment
* Make some properties optional
* Remove main.background.ts changes
* One more
* Lint
* Make all but length optional
* Address PR feedback
* Move generate command code to command
* Address PR feedback
* Use new alarm scheme
* Let feature handle state keys
Moves to a feature folder and creates clipboard-module level state
handler functions.
StateService is being paired down to storage routing, so we are handling storage
specifics in-module.
Co-authored-by: Justin Baur <justindbaur@users.noreply.github.com>
Co-authored-by: Daniel Smith <djsmith85@users.noreply.github.com>
* Missed some changes
Co-authored-by: Matt Gibson <mgibson@bitwarden.com>
Co-authored-by: Justin Baur <justindbaur@users.noreply.github.com>
Co-authored-by: Daniel Smith <djsmith85@users.noreply.github.com>
* Add CreationDate to common libs
* Add CreationDate to Browser
* Add CreationDate to CLI
* Add CreationDate to Desktop
* Add CreationDate to Web
* Update tests
Co-authored-by: Matt Gibson <mgibson@bitwarden.com>
Copy updated. Transition browser strings to use sentence case for all UI elements, except the following terms:
• Branded Names: Provider(s) + Provider Portal, Send(s) + Send, Directory Connector
• Plan Names: Premium, Families, Teams, Enterprise
* Add windows to platform utils service
Note, this will result in conflicts with several in-flight PRs, but is necessary for following commits.
* Add necessary background service factories
* Simplify autofill command
* Remove noop event service
* Added abstractions for PolicyApiService and PolicyService
* Added implementations for PolicyApiService and PolicyService
* Updated all references to new PolicyApiService and PolicyService
* Deleted old PolicyService abstraction and implementation
* Fixed CLI import path for policy.service
* Fixed main.background.ts policyApiService dependency for policyService
* Ran prettier
* Updated policy-api.service with the correct imports
* [EC-377] Removed methods from StateService that read policies
* [EC-377] Updated policy service getAll method to use observable collection
* [EC-377] Added first unit tests for policy service
* [EC-377] Added more unit tests for Policy Service
* [EC-376] Sorted methods order in PolicyApiService
* [EC-376] Removed unused clearCache method from PolicyService
* [EC-376] Added upsert method to PolicyService
* [EC-376] PolicyApiService putPolicy method now upserts data to PolicyService
* [EC-377] Removed tests for deleted clearCache method
* [EC-377] Added unit test for PolicyService.upsert
* [EC-377] Updated references to state service observables
* [EC-377] Removed getAll method from PolicyService and refactored components to use observable collection
* [EC-377] Updated components to use concatMap instead of async subscribe
* [EC-377] Removed getPolicyForOrganization from policyApiService
* [EC-377] Updated policyAppliesToUser to return observable collection
* [EC-377] Changed policyService.policyAppliesToUser to return observable
* [EC-377] Fixed browser settings.component.ts getting vault timeout
* Updated people.component.ts to get ResetPassword policy through a subscription
* [EC-377] Changed passwordGenerationService.getOptions to return observable
* [EC-377] Fixed CLI generate.command.ts getting enforcePasswordGeneratorPoliciesOnOptions
* [EC-377] Fixed eslint errors on rxjs
* [EC-377] Reverted changes on passwordGeneration.service and vaultTimeout.service
* [EC-377] Removed eslint disable on web/vault/add-edit-component
* [EC-377] Changed AccountData.policies to TemporaryDataEncryption
* [EC-377] Updated import.component to be reactive to policyAppliesToUser$
* [EC-377] Updated importBlockedByPolicy$
* [EC-377] Fixed missing rename
* [EC-377] Updated policyService.masterPasswordPolicyOptions to return observable
* [EC-377] Fixed vaultTimeout imports from merge
* [EC-377] Reverted call to passwordGenerationService.getOptions
* [EC-377] Reverted call to enforcePasswordGeneratorPoliciesOnOptions
* [EC-377] Removed unneeded ngOnDestroy
* Apply suggestions from code review
Co-authored-by: Oscar Hinton <Hinton@users.noreply.github.com>
* [EC-377] Fixed login.component.ts and register.component.ts
* [EC-377] Updated PolicyService to update vaultTimeout
* [EC-377] Updated PolicyService dependencies
* [EC-377] Renamed policyAppliesToUser to policyAppliesToActiveUser
* [EC-377] VaultTimeoutSettings service now gets the vault timeout directly instead of using observables
* [EC-377] Fixed unit tests by removing unneeded vaultTimeoutSettingsService
* [EC-377] Set getDecryptedPolicies and setDecryptedPolicies as deprecated
* [EC-377] Set PolicyService.getAll as deprecated and updated to use prototype.hasOwnProperty
* [EC-565] Reverted unintended change to vaultTimeoutSettings that was causing a bug to not display the correct vault timeout
* [EC-377] Removed unneeded destroy$ from preferences.component.ts
* [EC-377] Fixed policy.service.ts import of OrganizationService
Co-authored-by: Oscar Hinton <Hinton@users.noreply.github.com>
Co-authored-by: mimartin12 <77340197+mimartin12@users.noreply.github.com>
* Fix async subscribe
* Revert "[PS-1066] Browser and Desktop - SSO User does not see Update Master Password screen after Owner does a Admin Password Reset (#3207)"
This reverts commit 0eda418591.
* Make totp countdown `aria-hidden`, add copy of countdown as `sr-only` inside totp button, only make it conditionally "exist" on parent focus
* Make exact same changes to desktop totp
* Tweak copy button accessible name approach
instead of `aria-label`, which overrides the content of the button and, because JAWS has trouble announcing the live region in the desktop app, results in JAWS not announcing ANY countdown at all, this at least announces the current countdown number when the button receives focus in JAWS
* Add `aria-atomic="true"`
avoid JAWS/Firefox only announcing the specific digit that updates, rather than the number as a whole
* Update, run prettier, lint
* Remove orphaned jslibs
Co-authored-by: Daniel James Smith <djsmith85@users.noreply.github.com>
* Update imports
* Implement observables in a few places
* Add tests
* Get all clients working
* Use _destroy
* Address PR feedback
* Address PR feedback
* Address feedback
* passwordless login page redesign
* passwordless login page redesign
* restyled login form to use tailwind
* restyled login form to use tailwind
* moved texts on login device template to locales
* made reactive form changes for clients
* added request model
* made more changes
* added implmentation to auth request api
* fixed refrencing issue
* renamed model property
* Added resend notification functionality
* Added new file
* login with device first draft
* login with device first draft
* login with device first draft
* login with device first draft
* connection to anonymous hub
* connection to anonymous hub
* refactored confirm login response
* removed comment
* cleaned up login
* changed uptyped form builder
* changed uptyped form builder
* [SG-168] Update login strategy with passwordless login credentials.
* [SG-168] Removed logs. Changed inputs for passwordless logic strategy. Removed tokenRequestPasswordless it is using the same as password.
* code cleanup
* code cleanup
* removed login with device from self hosted
* fixed PR comments
* added module for login
* fixed post request bug
* added feature flag
* added feature flag
* added feature flag
Co-authored-by: André Bispo <abispo@bitwarden.com>
* Clean up dangling behaviorSubject
* Handle null in utils
* fix null check
* Await promises, even in async functions
* Add to/fromJSON methods to State and Accounts
This is needed since all storage in manifest v3 is key-value-pair-based
and session storage of most data is actually serialized into an
encrypted string.
* Simplify AccountKeys json parsing
* Fix account key (de)serialization
* Remove unused DecodedToken state
* Correct filename typo
* Simplify keys `toJSON` tests
* Explain AccountKeys `toJSON` return type
* Remove unnecessary `any`s
* Remove unique ArrayBuffer serialization
* Initialize items in MemoryStorageService
* Revert "Fix account key (de)serialization"
This reverts commit b1dffb5c2c, which was breaking serializations
* Move fromJSON to owning object
* Add DeepJsonify type
* Use Records for storage
* Add new Account Settings to serialized data
* Fix failing serialization tests
* Extract complex type conversion to helper methods
* Remove unnecessary decorator
* Return null from json deserializers
* Remove unnecessary decorators
* Remove obsolete test
* Use type-fest `Jsonify` formatting rules for external library
* Update jsonify comment
Co-authored-by: @eliykat
* Remove erroneous comment
* Fix unintended deep-jsonify changes
* Fix prettierignore
* Fix formatting of deep-jsonify.ts
Co-authored-by: Thomas Rittson <trittson@bitwarden.com>
Co-authored-by: Thomas Rittson <31796059+eliykat@users.noreply.github.com>
* fixing the bug ps-1319 by using ellipsis pipe which deafultg 25 character length
* pass 20 as the limit length instead default 25
Co-authored-by: dynwee <onwudiweokeke@gmail.com>
* PS-1111 Added prefix "Vault:" for accessibility to vault selector items
* improved html readability
* PS-1111 Added more screen reader accessibility data to the Vault selector on Desktop and Web clients
* PS-1111 removed duplicated aria-label
* PS-1111 Removed unnecessary aria-label attribute
* PS-1111 Changed browser vault item accessibility title from span to button
* Removed logic for keyboard shortcuts specific to Vivaldi
* Removed shortcut.ts and related parts
* Removed dependency on mousetrap
* Safari: Remove sidebar_action and_execute_sidebar_action from manifest.json
* Rebuilt package-lock.json
* Fixed merge issue from pulling master
* Add structure to display server version on browser
* Add getConfig to State Service interface
* Clean up settings component code
* Switch to ServerConfig, use Observables in the ConfigService, and more
* Fix runtime error
* Sm 90 addison (#3275)
* Use await instead of then
* Rename stateServerConfig -> storedServerConfig
* Move config validation logic to the model
* Use implied check for undefined
* Rename getStateServicerServerConfig -> buildServerConfig
* Rename getApiServiceServerConfig -> pollServerConfig
* Build server config in async
* small fixes and add last seen text
* Move config server to /config folder
* Update with concatMap and other changes
* Config project updates
* Rename fileds to convention and remove unneeded migration
* Update libs/common/src/services/state.service.ts
Update based on Oscar's recommendation
Co-authored-by: Oscar Hinton <Hinton@users.noreply.github.com>
* Update options for Oscar's rec
* Rename abstractions to abstracitons
* Fix null issues and add options
* Combine classes into one file, per Oscar's rec
* Add null checking
* Fix dependency issue
* Add null checks, await, and fix date issue
* Remove unneeded null check
* In progress commit, unsuitable for for more than dev env, just backing up changes made with Oscar
* Fix temp code to force last seen state
* Add localization and escapes in the browser about section
* Call complete on destroy subject rather than unsubscribe
* use mediumDate and formatDate for the last seen date messaging
* Add ThirdPartyServerName in example
* Add deprecated note per Oscar's comment
* [SM-90] Change to using a modal for browser about (#3417)
* Fix inconsistent constructor null checking
* ServerConfig can be null, fixes this
* Switch to call super first, as required
* remove unneeded null checks
* Remove null checks from server-config.data.ts class
* Update via PR comments and add back needed null check in server conf obj
* Remove type annotation from serverConfig$
* Update self-hosted to be <small> per design decision
* Re-fetch config every hour
* Make third party server version <small> and change wording per Oscar's PR comment
* Add expiresSoon function and re-fetch if the serverConfig will expire soon (older than 18 hours)
* Fix misaligned small third party server message text
Co-authored-by: Addison Beck <addisonbeck1@gmail.com>
Co-authored-by: Oscar Hinton <Hinton@users.noreply.github.com>
Allowing whitespace to wrap solves the issue of long link/button text awkwardly breaking out of controls
Widening desktop "pages" prevents some unnecessary wrapping in places like the "Create account" button on the login screen, whose content is slightly wider than it should be (but this is currently masked by the `nowrap`)
Closes https://github.com/bitwarden/clients/issues/2620
* Register Arabic language with native name
* Register Arabic language for web vault
* Register Arabic language for browser
* Register Arabic language for desktop
* Extract into new VaultTimeoutSettingsService
* Ensure new service is instantiated and registered for DI
* Create vaultTimeoutSettingsServiceFactory
* Fix VaultTimeoutServiceFactory
* Remove any and use void instead
* Move vaultTimeoutAbstraction into it's own folder
* Move vaultTimeout service into it's own folder
* Added vaultTimeoutServiceFactory and it's missing dependencies
* Add more factories
Revert main.background factory usage.
We could still do this, but factories must init their services and so need
to be async, which is not compatible with initializing in constructors
* Fix conflicts
* Remove cast to any as Utils.gobal got typed with #3131
* BitwardenFileUploadService: Remove unneeded dependency
* Remove allowSoftLock from vaultTimeoutService
* ImportService: Remove dependency on PlatformUtilsSvc
* Add `role="group"` and accName to URI and custom field groups (browser)
Provides more context when editing fields (to understand what the remove, options, etc buttons are all about)
* Add `aria-describedby` to custom field value fields (browser)
provides further context other than the generic "Value" label
* Add `role="group"` and accName to URI and custom field groups, add `aria-describedby` to custom field value fields (desktop)
* Add `role="group"` and accName to URI and custom field groups, add `aria-describedby` to custom field value fields (web)
* Use `attr.aria-label` instead of `appA11yTitle`
don't need/want the tooltips appearing everywhere
* Register basque language with native name
* Register basque language for web vault
* Register basque language for browser
* Register basque language for desktop
* Create service factories
* Add onInstall hook to service worker
* Add factory helper and common options structure
* Use factories in main.background
* simplify common factory options
* Split factory service cache and options.
Improve factory method base type handling.
* Add dev flag for managed environment.
* Remove appBlurClick throughout the popup code
`appBlurClick` leads to focus being lost/reset for assistive technology users. It should not be necessary in any case - if focus does need to move after an action, explicitly set it somewhere programmatically using `focus()` rather than relying on browser heuristics
* Remove now redundant blur-click directive
* Add extra margin for desktop settings expanded header buttons
* Only change box-header-expandable background on `:focus-visible` not `:focus`
Avoids having the background colour "stick" when clicking with the mouse until you click somewhere else
* Create sessions sync structure
* Add observing to session-syncer
* Do not run syncer logic in decorator tests
* Extract test constants
* Change Observables to BehaviorSubject
* Move sendMessage to static method in BrowserApi
* Implement session sync
* only watch in manifest v3
* Use session sync on folder service
* Add array observable sync
* Bypass cache on update from message
* Create feature and dev flags for browser
* Protect development-only methods with decorator
* Improve todo comments for long-term residency
* Use class properties in init
* Do not reuse mocks
* Use json (de)serialization patterns
* Fix failing session storage in dev environment
* Split up complex EncString constructor
* Default false for decrypted session storage
* Try removing hydrate EncString method
* PR review
* PR test review
* Create base jest.config file
* Fix various tests that were broken
* Add maxWorkers to jest config
* Undo change to testEnvironment
* Enable tsconfig.spec.json
* Work on background service worker.
* Work on shortcuts
* Work on supporting service worker
* Put new background behind version check
* Fix build
* Use new storage service
* create commands from crypto service (#2995)
* Work on service worker autofill
* Got basic autofill working
* Final touches
* Work on tests
* Revert some changes
* Add modifications
* Remove unused ciphers for now
* Cleanup
* Address PR feedback
* Update lock file
* Update noop service
* Add chrome type
* Handle "/" in branch names
Updates web workflow to handle the `/` in branch names when it's a PR.
* Remove any
Co-authored-by: Jake Fink <jfink@bitwarden.com>
Co-authored-by: Micaiah Martin <77340197+mimartin12@users.noreply.github.com>
* Change subscription to rely on observables and not on BehaviourSubject
* Ensure OnDestroy is added to AppComponent
* Fix check for no active accounts to redirect to the login page instead of lock
* Change subscription handling on SearchBarService
* Fix naming convention: Observables should have a $ suffix
* Remove obsolete linter hint
* Fix activeAccountUnlocked getting exposed as Observable but is instantiated as BehaviourSubject
* [SG-416] Changed UI for TOTP codes on free plan and added link to get Premium. On browser, changed back action of premium.component in order to reuse on cipher details.
* [SSG-416] PR Fix
* [SSG-416] fix formatting
* [SSG-416] Updated desktop free plan OTP UI
* [SSG-416] noticed a bad div tag making file changes erratic
* [SG-416] fixed label
* [SSG-416] Fix formatting
* [SSG-416] Changed bootstrap classes to tailwind
* [SSG-416] Added premium and upgrade badge back. Muted placeholder totp code colors and button.
* [SSG-416] Change learn more to upgrade label on get premium modal. Fixed navigation for premium.
* [SSG-416] Removed unused image file.
* [SG-416] Changed browser "Premium subscription required" text to be all hyperlink.
* [SG-416] Fixed missing resource on browser
* [SG-416] Code format with lint
* Move Web's SharedModule to /app/shared/
This commit relocates `SharedModule` from `/app/modules` to `/app/shared` to
align with [ADR #11](https://adr.bitwarden.com/decisions/0011-angular-folder-structure)
All other changes are just to adjust imports that reference `SharedModule`.
* Move /modules/pipes to /shared/pipes
This commit relocates `PipesModule` from `/app/modules` to `/app/shared` to
align with [ADR #11](https://adr.bitwarden.com/decisions/0011-angular-folder-structure)
All other changes are just to adjust imports that reference `PipesModule`.
* Move LooseComponentsModule to /shared/
This commit relocates `LooseComponentsModule` from `/app/modules` to `/app/shared` to
align with [ADR #11](https://adr.bitwarden.com/decisions/0011-angular-folder-structure)
All other changes are just to adjust imports that reference `LooseComponentsModule`.
* Move VerticalStepperModule to /shared/
This commit relocates `VerticalStepperModule` from `/app/modules` to `/app/shared` to
align with [ADR #11](https://adr.bitwarden.com/decisions/0011-angular-folder-structure)
All other changes are just to adjust imports that reference `VerticalStepperModule`.
* Move TrialInitiationModule to /shared/
This commit relocates `TrialInitiationModule` & `RegisterFormModule` from `/app/modules` to `/app/shared` to
align with [ADR #11](https://adr.bitwarden.com/decisions/0011-angular-folder-structure)
All other changes are just to adjust imports that reference `TrialInitiationModule` or `RegisterFormModule`.
* Move /modules/organization to /organization
This commit relocates all modules in `/app/modules/organization` to `/app/organization` to
align with [ADR #11](https://adr.bitwarden.com/decisions/0011-angular-folder-structure)
All other changes are just to adjust imports that reference the moved modules.
* Move /modules/vault/ to /vault
This commit relocates the IndividualVaultModule to `/app/modules/vault`, and the OrganizationVaultModule to `/app/organization/vault` to
align with [ADR #11](https://adr.bitwarden.com/decisions/0011-angular-folder-structure)
All other changes are just to adjust imports that reference the moved modules.
* Move VaultFiltersModule to /vault
This commit relocates the `VaultFilterModule` to `/app/vault/vault-filter`, and the OrganizationVaultFilterComponent to `/app/organization/vault/vault-filter` to
align with [ADR #11](https://adr.bitwarden.com/decisions/0011-angular-folder-structure)
All other changes are just to adjust imports that reference the moved modules.
* Remove the /modules/ folder from desktop
This commit relocates the `VaultFilterModule` to `/app/vault/vault-filter`, and the OrganizationVaultFilterComponent to `/app/organization/vault/vault-filter` to
align with [ADR #11](https://adr.bitwarden.com/decisions/0011-angular-folder-structure)
All other changes are just to adjust imports that reference the moved modules.
* Move Libs' VaultFiltersComponent to /vault/
This commit moves the lib's logic for `VaultFiltersModule` from
`/modules/` to `/vault/`
All other changes are just to adjust imports that reference the moved
files.
* Rename VaultModule -> SharedVaultModule
* Rename IndividualVaultModule -> VaultModule
* Rename OrganizationVaultModule -> VaultModule
* Rename OrganizationVaultFilterComponent
Rename OrganizationVaultFilterComponent to VaultFilterComponent
* Seperate the two VaultFilterComponents
This commit seperate the `OrganizationVaultFilterComponent` from the `VaultFilerModule`, which is only used by the individual vault.
A `VaultFilterSharedModule` was created to declare shared components and provide shared services between the two implementations.
This was done to align with best practices for NgModules.
* [r] Move VerticalStepperModule to /account/
More specifically, /account/trial/
* [r] Declare PaymentComponent in LooseComponentsModule
`PaymentComponent` is not reused across domains and should not be
declared in `SharedModule`.
I've moved it to `LooseComponentsModule` for now, but later it will need
to be exported from a `SettingsModule`.
* [r] Declare TaxInfoComponent in LooseComponentsModule
* [r] Reloacte Pipes out of /shared/
* [r] Extract locales out of SharedModule
* [r] Add documentation to shared module
* [r] Cleanup imports
* [r] Use an index.ts file for /shared/
* [r] Add eslint rule restricting access to /shared/
Co-authored-by: Hinton <hinton@users.noreply.github.com>
* Add managed_schema
* Add note on login page which server you are logging into.
* Implement it
* Remove caching logic since it seems unecessary
* Add error
* Handle error in hasManagedEnvironment
* Fix compile
* Added abstractions for PolicyApiService and PolicyService
* Added implementations for PolicyApiService and PolicyService
* Updated all references to new PolicyApiService and PolicyService
* Deleted old PolicyService abstraction and implementation
* Fixed CLI import path for policy.service
* Fixed main.background.ts policyApiService dependency for policyService
* Updated policy-api.service with the correct imports
* [EC-376] Sorted methods order in PolicyApiService
* [EC-376] Removed unused clearCache method from PolicyService
* [EC-376] Added upsert method to PolicyService
* [EC-376] PolicyApiService putPolicy method now upserts data to PolicyService
* Removed check for getBiometricLocked
It always returned false even when no biometrics were used.
* Remove the other check for getBiometricsLocked
* Ensure that biometricFingerprintValidation is reset, when biometrics are disabled
* Removed getBiometricsLocked and setBiometricsLocked
With nothing in the codebase reading the state of getBiometricsLocked, I've removed all places where it was set or saved.
* Refactor execution of reload into a separate method
* Conditonally pass the window object to `BrowserApi.reloadExtension`
* Clarify in comment, that the PIN has to be set with ask for Master Password on restart
* Ensure the process reload is executed on logout
* Use accounts instead of lastActive == null to determine a reload on logout
* Moved identical logic from desktop and browser into system.service
* Simplified check for refresh to handle no accounts found, logout, lock with lastActive longer than 5 seconds
* added a refresh token to avoid the time out issue
* validating for forcePasswordReset for web extension
* checking for forcePasswordReset to know the successRoute to nagivate to
* changes after running prettier
* removing the old implementation and making changes for getForcePasswordReset
* making chnages to lock.component in desktop project for forcePasswordReset
Co-authored-by: dynwee <onwudiweokeke@gmail.com>
* moved password strength to libs
* refactored password strength component
* made changes on desktop and browser to reuse component
* resolved suggestions from PR review
* shared module restructure
* shared module restructure
* Remove `appBlurClick` from browser extension controls
* Remove last remaining `appBlurClick` from desktop app controls
* Change any straggler `<a>` links to buttons where appropriate (where they don't open a browser window)
* Add missing `type="button"` to some of the desktop buttons
* Update and run prettier, linter
* Remove orphaned jslibs
* modify the submit function to validate only the newly/modified domains
* changes after running prettier
Co-authored-by: dynwee <onwudiweokeke@gmail.com>
* Require specifying a tab in doAutoFill options to ensure only the desired tab is filled
* Specify well defined type for added tab properties
* Replace new tabToAutoFill property with parameter
* chore: remove superfluous default
* fix: translations
* feat: dont update auto biometric but hide the option
* feat: hide auto biometrics if biometrics are disabled
* refactor: make updateBiometric easier to read and add bug note
* chore: add comment about bug getting resolved
* refactor: merge two if-cases
* [refactor] Introduce a file download service
* [refactor] Point platformUtilsService.saveFile() callers to fileDownloadService.download() instead
* [refactor] Remove platformUtilsService.saveFile()
* [fix] Force send attachments to always download and never open
* [fix] Remove the window property from FileDownloadRequest
* [fix] Move FileDownloadRequest to /abstractions/fileDownload
* [fix] Simplify FileDownloadRequest to a type
* [fix] Move BrowserApi.saveFile logic into BrowserFileDownloadService
* [fix] Use proper blob types for file downloads
* [fix] forceDownload -> downloadMethod on FileDownloadRequest
* [fix] Remove fileType from FileDownloadRequest
* [fix] Make fileType private
* Use abstract methods and generics in StorageService
* Prepend `Abstract` to abstract classes
* Create session browser storage service
* Use memory storage service for state memory
* Inject memory storage service
* Maintain filename extensions to help ide formatting
* Preserve state if it's still in memory
* Use jslib's memory storage service
* linter
* Create prototypes on stored objects
* standardize package scripts
* Add type safety to `withPrototype` decorators
* webpack notify manifest version
* Fix desktop
* linter
* Fix script
* Improve prototye application
* do not change prototype if it already matches desired
* fix error with object values prototype application
* Handle null state
* Apply prototypes to browser-specific state
* Add angular language server to recommended extensions
* Improve browser state service tests
* Start testing state Service
* Fix abstract returns
* Move test setup files to not be picked up by default glob matchers
* Add key generation service
* Add low-dependency encrypt service
* Back crypto service with encrypt service.
We'll want to work items that don't require state over to encrypt service
* Add new storage service and tests
* Properly init more stored values
* Fix reload issues when state service is recovering state from session storage
Co-authored-by: Thomas Avery <Thomas-Avery@users.noreply.github.com>
Co-authored-by: Justin Baur <admin@justinbaur.com>
* Simplify encrypt service
* Do not log mac failures for local-backed session storage
* `content` changed to `main` in #2245
* Fix CLI
* Remove loggin
* PR feedback
* Merge remote-tracking branch 'origin/master' into add-memory-storage-to-state-service
* Fix desktop
* Fix decrypt method signature
* Minify if not development
* Key is required
Co-authored-by: Thomas Avery <Thomas-Avery@users.noreply.github.com>
Co-authored-by: Justin Baur <admin@justinbaur.com>
* regression bug fix on custom timeout switch for the browser
* regression bug fix on custom timeout switch for the browser
* locale key fix
* suggestion fixes
* feat(browser): Update auto biometrics copy
* refactor(common): remove TotpService.isAutoCopyEnabled and use state directly
The TotpService was just taking the value from StateService and forwarding it, making it depend on state service.
All services that depended on the TotpService.isAutoCopyEnable flag also depended on StateService.
This therefore simplifies things by using StateService directly.
* feat(browser): update auto totp copy
* feat(browser): update add login notification copy
* feat(browser): update change password notification copy
* feat(browser): update context menu copy
* feat(browser): update show cards current tab copy
* feat(browser): update show identities current tab copy
* feat(browser): update enable favicon copy
* feat(browser): update badge counter copy
* feat(browser): update auto-fill copy
* feat(desktop): update auto biometrics prompt copy
* feat(desktop): update favicon copy
* feat(desktop): adjust copy
* feat(web): update favicons copy
* feat(web): adjust copy
* feat(web): update preference settings to sentence case
* feat(browser): update settings and options page to sentence case
* feat(desktop): update settings to sentence case
* feat(web): update copy
* feat(desktop): update copy
* Ignore jest for workspaces without tests (for now)
* Add jest as recommended extension
* Set eslint and prettier file paths
We can't do this on a multi-folder workspace level because the
path depths are not identical between folders
* fix tsconfig extends for
* Simplify bitwarden-licensed web tsconfig
This tsconfig isn't needed to build, since we do that through webpack
and the web client. It's only needed as hints to IDEs
* Remove unintended change
* linter