* Support token authenticated registration
https://spec.matrix.org/v1.2/client-server-api/#token-authenticated-registration
Signed-off-by: Callum Brown <callum@calcuode.com>
* Backwards compatibility with unstable auth type
Some server installs are not updated to use the stable version
of the registration token authentication type, so also handle
the unstable version defined in MSC3231.
Signed-off-by: Callum Brown <callum@calcuode.com>
* Make LOGIN_TYPE public and readonly
Co-authored-by: Travis Ralston <travpc@gmail.com>
* Remove line related to skinning
Signed-off-by: Callum Brown <callum@calcuode.com>
* Change empty string to null
Signed-off-by: Callum Brown <callum@calcuode.com>
* Use "public"s for new code style
Signed-off-by: Callum Brown <callum@calcuode.com>
* Change input to AccessibleButton
Signed-off-by: Callum Brown <callum@calcuode.com>
* Add more detail regarding source of token
Signed-off-by: Callum Brown <callum@calcuode.com>
* Fix lint error
The text and button type will be the same every time
for registration tokens, unlike (possibly) for SSO.
Signed-off-by: Callum Brown <callum@calcuode.com>
* Change null back to ""
Due to the following warning when attempting to test:
> Warning: `value` prop on `input` should not be null.
> Consider using an empty string to clear the component or
> `undefined` for uncontrolled components.
Signed-off-by: Callum Brown <callum@calcuode.com>
* Disable submit button when no token entered
Signed-off-by: Callum Brown <callum@calcuode.com>
* Add test for registration tokens
Adapted from test/components/views/dialogs/InteractiveAuthDialog-test.tsx
Signed-off-by: Callum Brown <callum@calcuode.com>
* Fix linting errors
Signed-off-by: Callum Brown <callum@calcuode.com>
* Fix test for registration tokens
Signed-off-by: Callum Brown <callum@calcuode.com>
Signed-off-by: Callum Brown <callum@calcuode.com>
Co-authored-by: Travis Ralston <travpc@gmail.com>
Co-authored-by: Andy Balaam <andy.balaam@matrix.org>
* Applies small changes to code block display in timeline
* Makes the composer code block look like the timeline display, but without line numbers
* Adds a button to allow code blocks to be implemented
* Adds tests for the new button
* Fix viewing source of redacted events
Clicking 'View Source' in the context menu of a redacted event causes an error,
and the user gets no visible result.
This fixes <ViewSource /> to indicate that the source is unavailable when a
message has been redacted. The original source remains available.
<SyntaxHighlight /> requires a non-null string for its `content` prop, and, in
the case of redacted events, <ViewSource /> was passing `undefined`. This is
ultimately because redacting an event causes `MatrixEvent.clearEvent` to be
`undefined`, which <ViewSource /> wasn't checking.
Fixes https://github.com/vector-im/element-web/issues/24165
Signed-off-by: Clark Fischer <clark.fischer@gmail.com>
* Use correct highlight.js call
Previous call signature was deprecated.
See https://github.com/highlightjs/highlight.js/issues/2277
Signed-off-by: Clark Fischer <clark.fischer@gmail.com>
Signed-off-by: Clark Fischer <clark.fischer@gmail.com>
* Use js-sdk imports for poll event types instead of events-sdk
* Attempt to appease some tsc --strict errors
* Manually create poll response in cypress test
* adds buttons to toggle bulleted and numbered lists on and off
* adds icons for those buttons
* css changes to timeline display
* adds tests for the new buttons, refactors existing tests
* Factor out `MessageEvent.from()` usage
The class/function is disappearing from the events-sdk, at least in this form.
* Manually create contents for events used by cypress
The utility function is out of range of the calling code at runtime, for some reason.
* Run prettier
* Maybe this will fix the build
* prune client infromation events from old devices
* test client data pruning
* remove debug
* strict
* Update src/components/views/settings/devices/useOwnDevices.ts
Co-authored-by: Michael Weimann <michaelw@matrix.org>
* improvements from review
Co-authored-by: Michael Weimann <michaelw@matrix.org>
* allows switching between modes that retains formatting
* updates rich text composer dependency to 0.13.0 (@matrix-org/matrix-wysiwyg)
* improves handling of enter keypresses when ctrlEnterTosend setting is true in plain text editor
* changes the message event content when using the new editor
* adds tests for the changes to the plain text editor
* Remove unnecessary PipContainer component
* Redesign the picture-in-picture window
* Add a hover effect to the controls
* Clarify that WidgetPip has call-specific behavior
* Improve decryption error UI by consolidating error messages and providing instructions when possible
* Fix TS strict errors
* Rename .scss to .pcss
* Avoid accessing clipboard, Cypress doesn't like it
* Display DecryptionFailureBar alongside other AuxPanel bars
* Add comments
* Add small margin off-screen for visible decryption failures
* Fix some more TS strict errors
* Add unit tests for DecryptionFailureBar
* Add button to resend key requests manually
* Remove references to matrix-js-sdk crypto internals
* Add hysteresis to visible decryption failures
* Add comment
Co-authored-by: Richard van der Hoff <1389908+richvdh@users.noreply.github.com>
* Add comment
Co-authored-by: Richard van der Hoff <1389908+richvdh@users.noreply.github.com>
* Don't create empty div if we're not showing resend requests button
* cancel updateSessions on unmount
* Update unit tests
* Fix lint and implicit any
* Simplify visible event bounds checking
* Adjust cypress test descriptions
* Add percy snapshots
* Update src/components/structures/TimelinePanel.tsx
Co-authored-by: Richard van der Hoff <1389908+richvdh@users.noreply.github.com>
* Add comments on TimelinePanel IState
* comment
* Add names to percy snapshots
* Show Resend Key Requests button when there are sessions that haven't already been requested via this bar
* We no longer request keys from senders
* update i18n
* update expected text in cypress test
* don't download keys ourselves, update device info in response to updates from client
* fix ts strict errors
* visibledecryptionfailures undefined handling
* Fix implicitAny errors
Co-authored-by: Richard van der Hoff <1389908+richvdh@users.noreply.github.com>
Co-authored-by: Michael Telatynski <7t3chguy@gmail.com>
* Use native js-sdk group call support
Now that the js-sdk supports group calls natively, our group call implementation can be simplified a bit. Switching to the js-sdk implementation also brings the react-sdk up to date with recent MSC3401 changes, and adds support for joining calls from multiple devices. (So, the previous logic which sent to-device messages to prevent multi-device sessions is no longer necessary.)
* Fix strings
* Fix strict type errors
* Fix getRelationsForEvent tsc strictness
* Use shared type for GetRelationsForEvent
* Fix lint
* Add alternative type
* getRelationsForEvent is not required
* Relations are optional
* Reactions are optional
* We expect relations in these tests
* Add more protection if the eventID is not defined
* Allow null too
* Better test typing
* User ID is not necessary unless something is selected
* It's okay to [].includes(null)
* Null is as good as undefined here
* Null or undefined is good here
* We have some expectations for the tests
* The room and user can be undefined too
* Protec
* Reactions are optional
* Try match signatures
* Null or undefined
* More null or undefined
* Protec
* Fix typo (wrong variable)
* Remove optional params
See https://github.com/matrix-org/matrix-react-sdk/pull/9558#discussion_r1017515913
* Fix up last maaaaybe relevant lint
Co-authored-by: Michael Telatynski <7t3chguy@gmail.com>
* sliding sync: add lazy-loading member support
Also swap to `$ME` constants when referring to our own member event.
* Hook into existing LL logic when showing the MemberList
* Linting
* Use consts in js sdk not react sdk
* Add jest tests
* linting
* Store the room in the test
* Fix up getRoom impl
* Add MemberListStore
* Use the right context in MemberList tests
* Fix RightPanel-test
* Always return members even if we lazy load
* Add MemberListStore tests
* Additional tests
* Fix bug with message context menu
* fix bug where ThreadSummary failed if no last reply is available
* Fix relations direction API
* Use same API for threads as for any other timeline
* Determine if event belongs to thread on jumping to event
* properly listen to thread deletion
* Add thread redaction tests
* Add fetchInitialEvent tests
* Paginate using default TimelinePanel behaviour
* Remove unused threads deleted code
Co-authored-by: Germain <germain@souquet.com>
Co-authored-by: Germain <germains@element.io>
* change testid attribute for dialog buttons to rtl friendly
* add confirm dialog for signing out sessions
* cleanup commented
* update cypress tets
* clear modals before test
* missing modal in jest tests on ci only
* Support for login + E2EE set up with QR
* Whitespace
* Padding
* Refactor of fetch
* Whitespace
* CSS whitespace
* Add link to MSC3906
* Handle incorrect typing in MatrixClientPeg.get()
* Use unstable class name
* fix: use unstable class name
* Use default fetch client instead
* Update to revised function name
* Refactor device manager panel and make it work with new sessions manager
* Lint fix
* Add missing interstitials and update wording
* Linting
* i18n
* Lint
* Use sensible sdk config name for fallback server
* Improve error handling for QR code generation
* Refactor feature availability logic
* Hide device manager panel if no options available
* Put sign in with QR behind lab setting
* Reduce scope of PR to just showing code on existing device
* i18n updates
* Handle null features
* Testing for LoginWithQRSection
* Refactor to handle UIA
* Imports
* Reduce diff complexity
* Remove unnecessary change
* Remove unused styles
* Support UIA
* Tidy up
* i18n
* Remove additional unused parts of flow
* Add extra instruction when showing QR code
* Add getVersions to server mocks
* Use proper colours for theme support
* Test cases
* Lint
* Remove obsolete snapshot
* Don't override error if already set
* Remove unused var
* Update src/components/views/settings/devices/LoginWithQRSection.tsx
Co-authored-by: Travis Ralston <travisr@matrix.org>
* Update src/components/views/auth/LoginWithQR.tsx
Co-authored-by: Travis Ralston <travisr@matrix.org>
* Update src/components/views/auth/LoginWithQR.tsx
Co-authored-by: Travis Ralston <travisr@matrix.org>
* Update src/components/views/auth/LoginWithQR.tsx
Co-authored-by: Travis Ralston <travisr@matrix.org>
* Update src/components/views/auth/LoginWithQR.tsx
Co-authored-by: Travis Ralston <travisr@matrix.org>
* Update src/components/views/auth/LoginWithQR.tsx
Co-authored-by: Travis Ralston <travisr@matrix.org>
* Update res/css/views/auth/_LoginWithQR.pcss
Co-authored-by: Kerry <kerrya@element.io>
* Use spacing variables
* Remove debug
* Style + docs
* preventDefault
* Names of tests
* Fixes for js-sdk refactor
* Update snapshots to match test names
* Refactor labs config to make deployment simpler
* i18n
* Unused imports
* Typo
* Stateless component
* Whitespace
* Use context not MatrixClientPeg
* Add missing context
* Type updates to match js-sdk
* Wrap click handlers in useCallback
* Update src/components/views/settings/DevicesPanel.tsx
Co-authored-by: Travis Ralston <travisr@matrix.org>
* Wait for DOM update instead of timeout
* Add missing snapshot update from last commit
* Remove void keyword in favour of then() clauses
* test main paths in LoginWithQR
* test coverage for display of qr code section
* remove unused test props
Co-authored-by: Hugh Nimmo-Smith <hughns@matrix.org>
Co-authored-by: Hugh Nimmo-Smith <hughns@users.noreply.github.com>
Co-authored-by: Travis Ralston <travisr@matrix.org>
* Support for login + E2EE set up with QR
* Whitespace
* Padding
* Refactor of fetch
* Whitespace
* CSS whitespace
* Add link to MSC3906
* Handle incorrect typing in MatrixClientPeg.get()
* Use unstable class name
* fix: use unstable class name
* Use default fetch client instead
* Update to revised function name
* Refactor device manager panel and make it work with new sessions manager
* Lint fix
* Add missing interstitials and update wording
* Linting
* i18n
* Lint
* Use sensible sdk config name for fallback server
* Improve error handling for QR code generation
* Refactor feature availability logic
* Hide device manager panel if no options available
* Put sign in with QR behind lab setting
* Reduce scope of PR to just showing code on existing device
* i18n updates
* Handle null features
* Testing for LoginWithQRSection
* Refactor to handle UIA
* Imports
* Reduce diff complexity
* Remove unnecessary change
* Remove unused styles
* Support UIA
* Tidy up
* i18n
* Remove additional unused parts of flow
* Add extra instruction when showing QR code
* Add getVersions to server mocks
* Use proper colours for theme support
* Test cases
* Lint
* Remove obsolete snapshot
* Don't override error if already set
* Remove unused var
* Update src/components/views/settings/devices/LoginWithQRSection.tsx
Co-authored-by: Travis Ralston <travisr@matrix.org>
* Update src/components/views/auth/LoginWithQR.tsx
Co-authored-by: Travis Ralston <travisr@matrix.org>
* Update src/components/views/auth/LoginWithQR.tsx
Co-authored-by: Travis Ralston <travisr@matrix.org>
* Update src/components/views/auth/LoginWithQR.tsx
Co-authored-by: Travis Ralston <travisr@matrix.org>
* Update src/components/views/auth/LoginWithQR.tsx
Co-authored-by: Travis Ralston <travisr@matrix.org>
* Update src/components/views/auth/LoginWithQR.tsx
Co-authored-by: Travis Ralston <travisr@matrix.org>
* Update res/css/views/auth/_LoginWithQR.pcss
Co-authored-by: Kerry <kerrya@element.io>
* Use spacing variables
* Remove debug
* Style + docs
* preventDefault
* Names of tests
* Fixes for js-sdk refactor
* Update snapshots to match test names
* Refactor labs config to make deployment simpler
* i18n
* Unused imports
* Typo
* Stateless component
* Whitespace
* Use context not MatrixClientPeg
* Add missing context
* Type updates to match js-sdk
* Wrap click handlers in useCallback
* Update src/components/views/settings/DevicesPanel.tsx
Co-authored-by: Travis Ralston <travisr@matrix.org>
* Wait for DOM update instead of timeout
* Add missing snapshot update from last commit
* Remove void keyword in favour of then() clauses
* test main paths in LoginWithQR
Co-authored-by: Travis Ralston <travisr@matrix.org>
Co-authored-by: Kerry <kerrya@element.io>
* Add Stores and StoresContext and use it in MatrixChat and RoomView
Added a new kind of class:
- Add God object `Stores` which will hold refs to all known stores and the `MatrixClient`. This object is NOT a singleton.
- Add `StoresContext` to hold onto a ref of `Stores` for use inside components.
`StoresContext` is created via:
- Create `Stores` in `MatrixChat`, assigning the `MatrixClient` when we have one set. Currently sets the RVS to `RoomViewStore.instance`.
- Wrap `MatrixChat`s `render()` function in a `StoresContext.Provider` so it can be used anywhere.
`StoresContext` is currently only used in `RoomView` via the following changes:
- Remove the HOC, which redundantly set `mxClient` as a prop. We don't need this as `RoomView` was using the client from `this.context`.
- Change the type of context accepted from `MatrixClientContext` to `StoresContext`.
- Modify alllll the places where `this.context` is used to interact with the client and suffix `.client`.
- Modify places where we use `RoomViewStore.instance` and replace them with `this.context.roomViewStore`.
This makes `RoomView` use a non-global instance of RVS.
* Linting
* SDKContext and make client an optional constructor arg
* Move SDKContext to /src/contexts
* Inject all RVS deps
* Linting
* Remove reset calls; deep copy the INITIAL_STATE to avoid test pollution
* DI singletons used in RoomView; DI them in RoomView-test too
* Initial RoomViewStore.instance after all files are imported to avoid cyclical deps
* Lazily init stores to allow for circular dependencies
Rather than stores accepting a list of other stores in their constructors,
which doesn't work when A needs B and B needs A, make new-style stores simply
accept Stores. When a store needs another store, they access it via `Stores`
which then lazily constructs that store if it needs it. This breaks the
circular dependency at constructor time, without needing to introduce
wiring diagrams or any complex DI framework.
* Delete RoomViewStore.instance
Replaced with Stores.instance.roomViewStore
* Linting
* Move OverridableStores to test/TestStores
* Rejig how eager stores get made; don't automatically do it else tests break
* Linting
* Linting and review comments
* Fix new code to use Stores.instance
* s/Stores/SdkContextClass/g
* Update docs
* Remove unused imports
* Update src/stores/RoomViewStore.tsx
Co-authored-by: Michael Telatynski <7t3chguy@gmail.com>
* Remove empty c'tor to make sonar happy
Co-authored-by: Michael Telatynski <7t3chguy@gmail.com>
* silence call ringers when local notifications are silenced
* more coverage for silencing
* explain disabled silence button
* lint
* increase wait for modal
Co-authored-by: Michael Telatynski <7t3chguy@gmail.com>
* add destructive option and close on interaction options
* add kebab context menu wrapper
* use kebab context menu in current device section
* use named export
* lint
* sessionman tests
* promote new session manager to beta
* hide old sessions section when new dm enabled
* use correct logic
* add new ViewUserDeviceSettings action
* replace device management ctas with viewUserDeviceSettings
* test SecurityUserSettingsTab
* more complete mocks
* more thorough mocks
* more mocks
* test LabsUserSettingsTab
* lint
* updated copy
* update snaps for new copy
* record device client inforamtion events on app start
* matrix-client-information -> matrix_client_information
* fix types
* remove another unused export
* add docs link
* display device client information in device details
* update snapshots
* integration-ish test client information in metadata
* tests
* fix tests
* export helper
* DeviceClientInformation type
* Device manager - select all devices (#9330)
* add device selection that does nothing
* multi select and sign out of sessions
* test multiple selection
* fix type after rebase
* select all sessions
* rename type
* use ExtendedDevice type everywhere
* rename clientName to appName for less collision with UA parser
* fix bad find and replace
* rename ExtendedDeviceInfo to ExtendedDeviceAppInfo
* rename DeviceType comp to DeviceTypeIcon
* update tests for new required property deviceType
* add stubbed user agent parsing
* setup test cases
* detect device type correctly
* 80% working ua parser
* parse asera gents for device info
* combine clientName/Version into one field, remove debug from tests
* add new metadata to device details
* render device info from UA
* Update our cancel icon
The cancel icon we're using in the app has drifted out of sync with the ones used in our designs. We also had two identical-looking icons, so this consolidates them into one.
I've simultaneously updated our chevron icons, since in the case of the 'jump to unread' timeline button, it became clear that the weight of the new close icon did not match the thinner chevron.
* Don't squish bottom/top-aligned tooltips near the edge of the screen
* Close the timeline panel when returning to the fullscreen timeline view
* Add layout switching capabilities to ElementCall
* Bring the room header in line with the group call designs
* Bring the PiP header in line with the group call designs
* Fix lints
* Clarify tooltip CSS calculations
* Test PipView
* Expand RoomHeader test coverage
* Test PipView more
* record device client inforamtion events on app start
* matrix-client-information -> matrix_client_information
* fix types
* remove another unused export
* add docs link
* display device client information in device details
* update snapshots
* integration-ish test client information in metadata
* tests
* fix tests
* export helper
* DeviceClientInformation type
* Device manager - select all devices (#9330)
* add device selection that does nothing
* multi select and sign out of sessions
* test multiple selection
* fix type after rebase
* select all sessions
* rename type
* use ExtendedDevice type everywhere
* rename clientName to appName for less collision with UA parser
* fix bad find and replace
* rename ExtendedDeviceInfo to ExtendedDeviceAppInfo
* rename DeviceType comp to DeviceTypeIcon
* update tests for new required property deviceType
* add stubbed user agent parsing
* add icons
* set device type icon
* device type icon tets
* update snapshots for device type icon changes
* desktop icon viewbox
* i18n
* record device client inforamtion events on app start
* matrix-client-information -> matrix_client_information
* fix types
* remove another unused export
* add docs link
* display device client information in device details
* update snapshots
* integration-ish test client information in metadata
* tests
* fix tests
* export helper
* DeviceClientInformation type
* Device manager - select all devices (#9330)
* add device selection that does nothing
* multi select and sign out of sessions
* test multiple selection
* fix type after rebase
* select all sessions
* rename type
* use ExtendedDevice type everywhere
* rename clientName to appName for less collision with UA parser
* fix bad find and replace
* rename ExtendedDeviceInfo to ExtendedDeviceAppInfo
* rename DeviceType comp to DeviceTypeIcon
* update tests for new required property deviceType
* add stubbed user agent parsing
* add device selection that does nothing
* multi select and sign out of sessions
* test multiple selection
* fix type after rebase
* select all sessions
* Fix device selection in pre-join screen for Element Call video rooms
As per https://github.com/vector-im/element-call/pull/609
* Update unit test
* Lint
* Hold a media stream while we enumerate device so we can do so reliably.
This means we can remove the device fallback labels.
* i18n
* Remove unnecessary useState
* Fix fetching video devices when video muted
* Actually fix preview stream code
* Fix unit test now fallback is no longer a thing
* Test changing devices
* Create m.room calls in video rooms, and m.prompt calls otherwise
* Terminate a call when the last person leaves
* Hook up the room header button to a unified CallView component
* Write more tests