Restore key backup in Complete Security dialog
Fixes https://github.com/vector-im/riot-web/issues/11889
This commit is contained in:
parent
8c471d6713
commit
4a26a72684
2 changed files with 31 additions and 6 deletions
|
@ -22,8 +22,9 @@ import { MatrixClientPeg } from '../../../MatrixClientPeg';
|
||||||
import { accessSecretStorage } from '../../../CrossSigningManager';
|
import { accessSecretStorage } from '../../../CrossSigningManager';
|
||||||
|
|
||||||
const PHASE_INTRO = 0;
|
const PHASE_INTRO = 0;
|
||||||
const PHASE_DONE = 1;
|
const PHASE_BUSY = 1;
|
||||||
const PHASE_CONFIRM_SKIP = 2;
|
const PHASE_DONE = 2;
|
||||||
|
const PHASE_CONFIRM_SKIP = 3;
|
||||||
|
|
||||||
export default class CompleteSecurity extends React.Component {
|
export default class CompleteSecurity extends React.Component {
|
||||||
static propTypes = {
|
static propTypes = {
|
||||||
|
@ -39,6 +40,7 @@ export default class CompleteSecurity extends React.Component {
|
||||||
// the presence of it insidicating that we're in 'verify mode'.
|
// the presence of it insidicating that we're in 'verify mode'.
|
||||||
// Because of the latter, it lives in the state.
|
// Because of the latter, it lives in the state.
|
||||||
verificationRequest: null,
|
verificationRequest: null,
|
||||||
|
backupInfo: null,
|
||||||
};
|
};
|
||||||
MatrixClientPeg.get().on("crypto.verification.request", this.onVerificationRequest);
|
MatrixClientPeg.get().on("crypto.verification.request", this.onVerificationRequest);
|
||||||
}
|
}
|
||||||
|
@ -53,10 +55,16 @@ export default class CompleteSecurity extends React.Component {
|
||||||
}
|
}
|
||||||
|
|
||||||
onStartClick = async () => {
|
onStartClick = async () => {
|
||||||
|
this.setState({
|
||||||
|
phase: PHASE_BUSY,
|
||||||
|
});
|
||||||
const cli = MatrixClientPeg.get();
|
const cli = MatrixClientPeg.get();
|
||||||
|
const backupInfo = await cli.getKeyBackupVersion();
|
||||||
|
this.setState({backupInfo});
|
||||||
try {
|
try {
|
||||||
await accessSecretStorage(async () => {
|
await accessSecretStorage(async () => {
|
||||||
await cli.checkOwnCrossSigningTrust();
|
await cli.checkOwnCrossSigningTrust();
|
||||||
|
if (backupInfo) await cli.restoreKeyBackupWithSecretStorage(backupInfo);
|
||||||
});
|
});
|
||||||
|
|
||||||
if (cli.getCrossSigningId()) {
|
if (cli.getCrossSigningId()) {
|
||||||
|
@ -66,6 +74,9 @@ export default class CompleteSecurity extends React.Component {
|
||||||
}
|
}
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
// this will throw if the user hits cancel, so ignore
|
// this will throw if the user hits cancel, so ignore
|
||||||
|
this.setState({
|
||||||
|
phase: PHASE_INTRO,
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -155,13 +166,21 @@ export default class CompleteSecurity extends React.Component {
|
||||||
} else if (phase === PHASE_DONE) {
|
} else if (phase === PHASE_DONE) {
|
||||||
icon = <span className="mx_CompleteSecurity_headerIcon mx_E2EIcon_verified"></span>;
|
icon = <span className="mx_CompleteSecurity_headerIcon mx_E2EIcon_verified"></span>;
|
||||||
title = _t("Session verified");
|
title = _t("Session verified");
|
||||||
|
let message;
|
||||||
|
if (this.state.backupInfo) {
|
||||||
|
message = <p>{_t(
|
||||||
|
"Your new session is now verified. It has access to your " +
|
||||||
|
"encrypted messages, and other users will see it as trusted.",
|
||||||
|
)}</p>;
|
||||||
|
} else {
|
||||||
|
message = <p>{_t(
|
||||||
|
"Your new session is now verified. Other users will see it as trusted.",
|
||||||
|
)}</p>;
|
||||||
|
}
|
||||||
body = (
|
body = (
|
||||||
<div>
|
<div>
|
||||||
<div className="mx_CompleteSecurity_heroIcon mx_E2EIcon_verified"></div>
|
<div className="mx_CompleteSecurity_heroIcon mx_E2EIcon_verified"></div>
|
||||||
<p>{_t(
|
{message}
|
||||||
"Your new session is now verified. It has access to your " +
|
|
||||||
"encrypted messages, and other users will see it as trusted.",
|
|
||||||
)}</p>
|
|
||||||
<div className="mx_CompleteSecurity_actionRow">
|
<div className="mx_CompleteSecurity_actionRow">
|
||||||
<AccessibleButton
|
<AccessibleButton
|
||||||
kind="primary"
|
kind="primary"
|
||||||
|
@ -198,6 +217,11 @@ export default class CompleteSecurity extends React.Component {
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
|
} else if (phase === PHASE_BUSY) {
|
||||||
|
const Spinner = sdk.getComponent('views.elements.Spinner');
|
||||||
|
icon = <span className="mx_CompleteSecurity_headerIcon mx_E2EIcon_warning"></span>;
|
||||||
|
title = '';
|
||||||
|
body = <Spinner />;
|
||||||
} else {
|
} else {
|
||||||
throw new Error(`Unknown phase ${phase}`);
|
throw new Error(`Unknown phase ${phase}`);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1894,6 +1894,7 @@
|
||||||
"Done": "Done",
|
"Done": "Done",
|
||||||
"Without completing security on this device, it won’t have access to encrypted messages.": "Without completing security on this device, it won’t have access to encrypted messages.",
|
"Without completing security on this device, it won’t have access to encrypted messages.": "Without completing security on this device, it won’t have access to encrypted messages.",
|
||||||
"Go Back": "Go Back",
|
"Go Back": "Go Back",
|
||||||
|
"Restoring": "Restoring",
|
||||||
"Failed to send email": "Failed to send email",
|
"Failed to send email": "Failed to send email",
|
||||||
"The email address linked to your account must be entered.": "The email address linked to your account must be entered.",
|
"The email address linked to your account must be entered.": "The email address linked to your account must be entered.",
|
||||||
"A new password must be entered.": "A new password must be entered.",
|
"A new password must be entered.": "A new password must be entered.",
|
||||||
|
|
Loading…
Reference in a new issue