When the cross-signing lab is enabled, this changes DMs to use encryption as
long as all invited users have uploaded device keys (which we're using as a
proxy for "has some client that understands E2E").
Fixes https://github.com/vector-im/riot-web/issues/12005
The device verification checks are slightly more nuanced: we want to use
stricter cross-signing checks for your own devices to encourage everyone to
trust their devices via cross-signing so that other users can in turn trust
them.
However, for other users, it's okay to use the looser verification check that
also includes locally verified devices.
This fixes some user vs. device verification confusion in user info by changing
all the verification tests to the cross-signing variant when the lab is enabled.
Fixes https://github.com/vector-im/riot-web/issues/11886
In the UserInfo panel. This means we now use cross-signing
verifications in the UserInfoPanel so we can see our cross-signing
verifications working!
Lots more to do here: the remaining device.isVerified() calls in
UserInfoPanel are where it needs to be switched to verifying users
rather than devices, and of course we need to replace all the calls
to device.isVerified() with checkDeviceTrust everywhere else.
Verification with cross-signing may requiring asking for your secret storage
passphrase, which is displayed in it's own modal on top of flows. For now while
verification takes in modals also, mark the verification ones as static so they
don't lose state when secret storage appears on top mid-flow.
one while editing (PowerLevelEditor) and one
while not editing (PowerLevelSection).
Also save when pressing the button, not when changing the
power dropdown.
Also show the spinner next to the dropdown when saving,
not at the bottom of the component.
as the powerlevel on the member is not yet updated at the time
RoomState.events is emitted.
Also listen on the client for this event as the currentState
object can change when the timeline is reset.