This supplies a cache callback to the JS SDK so that we can be notified if a new
storage key is created e.g. by resetting secret storage. This allows it to be
supplied automatically in case it's needed in the same user operation, as it is
when resetting both secret storage and cross-signing together.
This migrates to the new JS SDK APIs, which now use separate paths for
cross-signing and secret storage setup. There should be no functional change
here.
Part of https://github.com/vector-im/element-web/issues/13895
Although passphrase / passphrase confirm is still split between two
screens because that's more work to change and probably is not a pivotal
part of the UI that needs to change in step with everything else.
Fixes https://github.com/vector-im/riot-web/issues/13562
We only initialize a new key backup if the user requested one. If they've requested new keys but have not asked for keys to be backed up, we simply delete the now-invalid backup.
This also adds some logging to identify in rageshakes when someone resets their cross-signing, and when their key backup is being deleted.
If we already have an account password to use during secret storage setup, then
it's highly likely that the homeserver accepts passwords for device signing key
upload as well. This change then assumes password auth will work without
checking to avoid a request when the server is under high load.
Fixes https://github.com/vector-im/riot-web/issues/13286
If we ask for the key backup key early in creating secret storage to ensure we
trust the backup, then we stash it to ensure it's available to bootstrap as well
without prompting again.
Fixes https://github.com/vector-im/riot-web/issues/12958
This passes the newly created secret storage key down to the bootstrap path for
temporary caching to avoid prompting the user for it again in the later stages
of bootstrapping.
Fixes https://github.com/vector-im/riot-web/issues/12867
This uses the latest backup status we just retrieved by returning from the
lookup path (instead of using it indirectly via state). This is important
because state updates are batched, so we can't rely on the value to be updated
immediately like we were.
Fixes https://github.com/vector-im/riot-web/issues/12562