* Honour the backup disable flag from Element X
This unfortunately named and unspecced flag is set by Element X
to denote that the user has chosen to disable key storage and it
should not automatically try to enable it again. This changes Element
web to not prompt to enable recovery if this flag is set.
* Remove unnecessary conditional
Co-authored-by: Michael Telatynski <7t3chguy@gmail.com>
---------
Co-authored-by: Michael Telatynski <7t3chguy@gmail.com>
* Factor out duplicated CSS for buttons in encryption settings
By adding a component to hold the common CSS
* Update snapshot
* Update snapshot
* More snapshots
* Split EncryptionCardButtons out to separate component
* Update imports
* CreateSecretStorageDialog: error handling
I'm fed up with setup operations in EW failing silently. Rather than leaving
the user with a mysteriously broken client, let's at least tell them that
something has gone wrong, so that they can report the issue and we can
investigate.
Obviously, showing an unactionable Error dialog is a last resort: ideally, we
should handle the error ourselves, or give the user actionable steps to resolve
the problem. But that takes significant design and engineering.
Just swallowing errors is the worst of all possible options.
* Fix typo in test name
* Improve test coverage
* feat(new room list)!: hide Favourites and People meta spaces when the new room list is enabled
* test(space store): add testcase for new labs flag
* feat(quick settings): hide pin to sidebar and more options and add extra margin
* Create new labs flag
* Render empty room list view
* Reload on flag change
* Rename RoomList.tsx to LegacyRoomList.tsx
and rename NewRoomListView.tsx to RoomListView.tsx
* Update labs.md
* Don't reload roomview on offline connectivity check
Doesn't look like this was a regression as far as I can see, but
you did have to switch rooms while offline for it to start happening.
There's no use reloading the room until we're online again.
Fixes https://github.com/element-hq/element-web/issues/29072
* Add regression test
* Move it down the file to avoid changing the snapshots
* feat(crypto): rename "security key" into "recovery key" in lang file
* test(crypto): rename "security key" into "recovery key" in test files
* test(e2e crypto): rename "security key" into "recovery key" in test files
* doc(crypto): rename "security key" into "recovery key"
* fix(encryption settings): check encryption state when user cancels the reset identity flow
* test(encryption settings): add test to check encryption state when user cancels the reset identity flow
* Wire up the "Forgot recovery key" button for the "Key storage out of sync" toast
* Unused import & fix test
* Test 'forgot' variant
* Fix dependencies
* Add more toast tests
* Unused import
* Test initialState in Encryption Tab
* Let's see if github has any more luck running this test than me
* Working playwright test with screenshot
* year
* Convert playwright test to use the bot client
* Disambiguate
Co-authored-by: Florian Duros <florianduros@element.io>
* Add doc & do other part of rename
* Split out into custom hook
* Fix tests
---------
Co-authored-by: Florian Duros <florianduros@element.io>
* Apply lint rule @typescript-eslint/no-empty-object-type
To avoid the footgun that is https://www.totaltypescript.com/the-empty-object-type-in-typescript
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Iterate
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
---------
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Improve display of empty topic events in the timeline.
* Use topic parser for topic events.
* Revert changes i18n for the moment
* Use the correct import pattern
* Add tests for topic rendering
* fix(encryption tab): hide the advanced section when the secrets are not cached locally
The secret verification is now made at the level of `EncryptionUserSettingsTab` instead at the `RecoveryPanel` level. In the `EncryptionUserSettingsTab`, we decide to only display `RecoveryPanelOutOfSync` in case of uncached secrets.
`RecoveryPanelOutOfSync` is simplified version of `RecoveryPanel` handling only the `secrets_not_cached` case.
* refactor(encryption tab): simplify the `RecoveryPanel` without having to handle the missing secrets
* test(encryption tab): move test about cached secrets in `EncryptionUserSettingsTab-test.tsx`
* test(encryption tab): move e2e test which are testing all the encryption tab in `encryption-tab.spec.ts
* refactor(encryption tab): move `RecoveryPanelOutOfSync` in its own file
- fix typos
- call onFinish after accessSecretStorage
- onFinish doesn't need to be asynchronous
* doc(encryption tab): improve documentation when the secrets are not cached locally
* test(encryption tab): improve test documentation and naming
* doc(encryption tab): improve `RecoveryPanelOutOfSync` documentation
* Construct history on setCard
So that back buttons are always shown in the right panel
* Check card state to ensure operation is atomic
* Fix tests
* Fix lint
* Remove null case
* Fix broken test
* Schedule dehydration on reload
* fix test and use the right function to check dehydration is enabled
* use dehydration helper function when scheduling dehydration on restart
* fix test by passing in client object
* feat(crypto): Support verification violation composer banner
* refactor UserIdentityWarning by using now a ViewModel
fixup: logger import
fixup: test lint type problems
fix test having an unexpected verification violation
fixup sonarcubes warnings
* review: comments on types and inline some const
* review: Quick refactor, better handling of action on button click
* review: Small updates, remove commented code
* SecurityManager: improve logging
* Only prompt user for default 4S key
We don't really support the concept of having multiple 4S keys active, so
prompting the user to enter a non-default 4S key without even telling them
which one we want is rather silly.
* playwright: factor out helper for setting up 4S
We seem to already have about 5 copies of this code, so before I add another,
let's factor it out.
* Playwright test for dehydrated device in reset flow
This should be fixed by the previous commit, so let's check it stays that way.
* refactor(MatrixChat): remove `MatrixClient.setGlobalErrorOnUnknownDevices` call
MatrixClient.setGlobalErrorOnUnknownDevices is not implemented in the rust-crypto and will be removed when the legacy crypto will be ripped out.
* test(e2e): remove `MatrixClient.setGlobalErrorOnUnknownDevices` call
MatrixClient.setGlobalErrorOnUnknownDevices is not implemented in the rust-crypto and will be removed when the legacy crypto will be ripped out.
* Make themed widgets reflect the effective theme
So that widgets such as Element Call will show up in the right theme even if the app is set to match the system theme.
* Remove debug log line
* Fix tiny typo in existing code
* Create a hook that uses the right panel store
So that we track changes to the right panel phases
* Create a context that wraps the previous hook we created
We do this so that we can get by using a single event listener i.e we
only need to call `useCurrentPhase` in the provider as opposed to
calling it in each header icon.
* Create a hook that tells you if a panel is open or not
* Create component that wraps Icon
and adds a class name when the corresponding panel is open
* Style room header icons for when they are toggled
* Style face pile for toggle state
* Fix broken CI
* Give directory a better name
* Update year in license
* Use a stronger type
* Allow flex component to take child containers props
So that we can set attributes on the container
* Use Up/Down arrow keys to navigate through the list
* Update snapshot
* feat(devtools): add crypto information in devtools
* ci: add crypto devtools file to crypto code owners
* test(dev tools): update test to add new crypto button
* test(dev tools): add tests for crypto component
* Fix identity server settings visibility
The IS settings got confused with the posthog settings and were only
shown if analytics were enabled.
* Update snapshot
* Make the encryption card more configurable:
- Change the icon
- Can set the destructive props
* Update compound
* Add advanced section
* Add the `Never send encrypted messages to unverified devices` settings
* - Add commercial license
- Remove generic type
* Rename EncryptionDetails css classes
* Use same uiAuthCallback
* Use h3 for title
* Add tests to `AdvancedPanel`
* Add tests to `EncryptionUserSettingsTab`
* Add tests to `ResetIdentityPanel`
* Get only the recovery section in recovery tests
* Add e2e test
* Fix outstanding UX issues with replies/mentions/keyword notifs
* Use createRoot instead of deprecated ReactDOM.render
I foresee this change being made across the codebase shortly
and want to proactively prevent my PR from falling behind
* Clean up react root on unmount
* Remove addition of left-edge highlight on message mentions
It is clear that it would be best for me to address
this piece in a separate PR.
* Update call to ReactRootManager.render
---------
Co-authored-by: Michael Telatynski <7t3chguy@gmail.com>
* Switch OIDC primarily to new `/auth_metadata` API
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Update tests
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Iterate
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Simplify the world
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Iterate
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
---------
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Switch to secure random strings
Because the js-sdk methods are changing and there's no reason for these
not to use the secure versions. The dedicated upper/lower functions were
*only* used in this one case, so this should do the exact same thing with
the one exported function.
Requires https://github.com/matrix-org/matrix-js-sdk/pull/4621 (merge both together)
* Change remaining instances of randomString
which I somehow entirely missed the first time.
* Fix import order
* Add a separator between joined and invited members
* Fix user label in tile having wrong color
* Changes to member tiles
- ThreePidInviteTile now contains an user label showing "(Invited)" and
an email icon.
- RoomMemberTile now includes an icon similar to above.
- Refactors a bunch of code to make this change sensible.
* Remove redundant css code
* Fix tests
* Update src/components/viewmodels/memberlist/MemberListViewModel.tsx
Co-authored-by: Michael Telatynski <7t3chguy@gmail.com>
* Update year in license
* Fix lint error
---------
Co-authored-by: Michael Telatynski <7t3chguy@gmail.com>
* Refine `SettingsSection` & `SettingsTab`
* Add encryption tab
* Add recovery section
* Add device verification
* Rename `Panel` into `State`
* Update & add tests to user settings common
* Add tests to `RecoveryPanel`
* Add tests to `ChangeRecoveryKey`
* Update CreateSecretStorageDialog-test snapshot
* Add tests to `EncryptionUserSettingsTab`
* Update existing screenshots of e2e tests
* Add new encryption tab ownership to `@element-hq/element-crypto-web-reviewers`
* Add e2e tests
* Fix monospace font and add figma link to hardcoded value
* Add unit to Icon
* Improve e2e doc
* Assert that the crypto module is defined
* Add classname doc
* Fix typo
* Use `good` state instead of default
* Rename `ChangeRecoveryKey.isSetupFlow` into `ChangeRecoveryKey.userHasKeyBackup`
* Move `deleteCachedSecrets` fixture in `recovery.spec.ts`
* Use one callback instead of two in `RecoveryPanel`
* Fix docs and naming of `utils.createBot`
* Fix typo in `RecoveryPanel`
* Add more doc to the state of the `EncryptionUserSettingsTab`
* Rename `verification_required` into `set_up_encryption`
* Update test
* ADd new license
* Very early WIP of rejigged e2e error toast code
* Update comments and doc
* Assert that `recoveryKey.encodedPrivateKey` is always defined
* Add comments to explain how the secrets could be uncached
* Use `matrixClient.secretStorage.getDefaultKeyId` instead of `matrixClient.getCrypto().checkKeyBackupAndEnable` to know if we need to set up a recovery key
* Update existing screenshot to add encryption tab.
* Fix tests
* Remove unused file!
* Remove test for unused file
* Show 'set up encryption' in the 'other' case.
* Test 'key storage out of sync' toast
* Update tests
* Fix test & make toast look correct
* Use new labels when changing the recovery key
* Fix docs
* Don't reset key backup when creating a recovery key
* Add playwright test for toast
* Dismiss the toast as it's now in the way due to being wider
* Doesn't look like this needs to be async
* Typo
Co-authored-by: Andy Balaam <andy.balaam@matrix.org>
* Typo
Co-authored-by: Andy Balaam <andy.balaam@matrix.org>
* Override width for just this toast
---------
Co-authored-by: Florian Duros <florian.duros@ormaz.fr>
Co-authored-by: Florian Duros <florianduros@element.io>
Co-authored-by: Andy Balaam <andy.balaam@matrix.org>
* Refine `SettingsSection` & `SettingsTab`
* Add encryption tab
* Add recovery section
* Add device verification
* Rename `Panel` into `State`
* Update & add tests to user settings common
* Add tests to `RecoveryPanel`
* Add tests to `ChangeRecoveryKey`
* Update CreateSecretStorageDialog-test snapshot
* Add tests to `EncryptionUserSettingsTab`
* Update existing screenshots of e2e tests
* Add new encryption tab ownership to `@element-hq/element-crypto-web-reviewers`
* Add e2e tests
* Fix monospace font and add figma link to hardcoded value
* Add unit to Icon
* Improve e2e doc
* Assert that the crypto module is defined
* Add classname doc
* Fix typo
* Use `good` state instead of default
* Rename `ChangeRecoveryKey.isSetupFlow` into `ChangeRecoveryKey.userHasKeyBackup`
* Move `deleteCachedSecrets` fixture in `recovery.spec.ts`
* Use one callback instead of two in `RecoveryPanel`
* Fix docs and naming of `utils.createBot`
* Fix typo in `RecoveryPanel`
* Add more doc to the state of the `EncryptionUserSettingsTab`
* Rename `verification_required` into `set_up_encryption`
* Update test
* ADd new license
* Update comments and doc
* Assert that `recoveryKey.encodedPrivateKey` is always defined
* Add comments to explain how the secrets could be uncached
* Use `matrixClient.secretStorage.getDefaultKeyId` instead of `matrixClient.getCrypto().checkKeyBackupAndEnable` to know if we need to set up a recovery key
* Update existing screenshot to add encryption tab.
* Update tests
* Use new labels when changing the recovery key
* Fix docs
* Don't reset key backup when creating a recovery key
* Fix doc
* Remove FTUE onboarding as it is incompatible with SSO/OIDC
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Update tests
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Remove stale screenshots
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
---------
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Clear account idb table on logout
to remove old deactivated refresh token when logging out
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Simplify code
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Fix test
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
---------
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* React to MatrixEvent sender/target sentinels being updated for rendering state events
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Iterate
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Iterate
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* React to sentinel changes in EventListSummary
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Iterate
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Iterate
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
---------
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Add new e2e icon for the member tile
* Add new presence icon for member tile
* Implement new member tile
* Implement memberlist view model
* Implement new memberlist header view
* Support the new memberlist in Diasambiguated profile
1. Use MemberInfo instead of RoomMember
2. CSS changes to reflect the new design
* Implement new memberlist view
* Add and use a new overflow component
We used the EntityTile component as a pretend overflow tile in some
places. This new lighter component is added so that we can remove the
complex EntityTile component.
* Remove old code
* Add/remove css files from _components.pcss
* Increase minimum width as per design
* Actually use the new memberlist view
* Fix broken jest tests
* Add jest tests
* Playwright: Make it possible to disable presence
* Add playwright tests
* Fix lint error
* Undo translation changes that must be done via localazy
* Update license header
* Use waitFor instead of setTimeout
* Remove comment
* Switch over from template to container hs
* Revert unintended change
* Move config to top level