mirror of https://github.com/vector-im/riot-web
Add testing flow for new key backups with SSSS
This adds a path to test key backups with SSSS via an extra button only visible when the cross-signing feature is enabled.pull/21833/head
parent
66f7600969
commit
8cbc9baddd
|
@ -16,12 +16,11 @@ limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
|
import FileSaver from 'file-saver';
|
||||||
|
|
||||||
import sdk from '../../../../index';
|
import sdk from '../../../../index';
|
||||||
import MatrixClientPeg from '../../../../MatrixClientPeg';
|
import MatrixClientPeg from '../../../../MatrixClientPeg';
|
||||||
import { scorePassword } from '../../../../utils/PasswordScorer';
|
import { scorePassword } from '../../../../utils/PasswordScorer';
|
||||||
|
|
||||||
import FileSaver from 'file-saver';
|
|
||||||
|
|
||||||
import { _t } from '../../../../languageHandler';
|
import { _t } from '../../../../languageHandler';
|
||||||
|
|
||||||
const PHASE_PASSPHRASE = 0;
|
const PHASE_PASSPHRASE = 0;
|
||||||
|
@ -118,7 +117,7 @@ export default class CreateKeyBackupDialog extends React.PureComponent {
|
||||||
phase: PHASE_DONE,
|
phase: PHASE_DONE,
|
||||||
});
|
});
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
console.log("Error creating key backup", e);
|
console.error("Error creating key backup", e);
|
||||||
// TODO: If creating a version succeeds, but backup fails, should we
|
// TODO: If creating a version succeeds, but backup fails, should we
|
||||||
// delete the version, disable backup, or do nothing? If we just
|
// delete the version, disable backup, or do nothing? If we just
|
||||||
// disable without deleting, we'll enable on next app reload since
|
// disable without deleting, we'll enable on next app reload since
|
||||||
|
|
|
@ -21,6 +21,8 @@ import sdk from '../../../index';
|
||||||
import MatrixClientPeg from '../../../MatrixClientPeg';
|
import MatrixClientPeg from '../../../MatrixClientPeg';
|
||||||
import { _t } from '../../../languageHandler';
|
import { _t } from '../../../languageHandler';
|
||||||
import Modal from '../../../Modal';
|
import Modal from '../../../Modal';
|
||||||
|
import SettingsStore from '../../../../lib/settings/SettingsStore';
|
||||||
|
import { accessSecretStorage } from '../../../CrossSigningManager';
|
||||||
|
|
||||||
export default class KeyBackupPanel extends React.PureComponent {
|
export default class KeyBackupPanel extends React.PureComponent {
|
||||||
constructor(props) {
|
constructor(props) {
|
||||||
|
@ -125,6 +127,31 @@ export default class KeyBackupPanel extends React.PureComponent {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_startNewBackupWithSecureSecretStorage = async () => {
|
||||||
|
const cli = MatrixClientPeg.get();
|
||||||
|
let info;
|
||||||
|
try {
|
||||||
|
await accessSecretStorage(async () => {
|
||||||
|
info = await cli.prepareKeyBackupVersion(
|
||||||
|
null /* random key */,
|
||||||
|
{ secureSecretStorage: true },
|
||||||
|
);
|
||||||
|
info = await cli.createKeyBackupVersion(info);
|
||||||
|
});
|
||||||
|
await MatrixClientPeg.get().scheduleAllGroupSessionsForBackup();
|
||||||
|
this._loadBackupStatus();
|
||||||
|
} catch (e) {
|
||||||
|
console.error("Error creating key backup", e);
|
||||||
|
// TODO: If creating a version succeeds, but backup fails, should we
|
||||||
|
// delete the version, disable backup, or do nothing? If we just
|
||||||
|
// disable without deleting, we'll enable on next app reload since
|
||||||
|
// it is trusted.
|
||||||
|
if (info && info.version) {
|
||||||
|
MatrixClientPeg.get().deleteKeyBackupVersion(info.version);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
_deleteBackup = () => {
|
_deleteBackup = () => {
|
||||||
const QuestionDialog = sdk.getComponent('dialogs.QuestionDialog');
|
const QuestionDialog = sdk.getComponent('dialogs.QuestionDialog');
|
||||||
Modal.createTrackedDialog('Delete Backup', '', QuestionDialog, {
|
Modal.createTrackedDialog('Delete Backup', '', QuestionDialog, {
|
||||||
|
@ -299,6 +326,22 @@ export default class KeyBackupPanel extends React.PureComponent {
|
||||||
</div>
|
</div>
|
||||||
</div>;
|
</div>;
|
||||||
} else {
|
} else {
|
||||||
|
// This is a temporary button for testing the new path which stores
|
||||||
|
// the key backup key in SSSS. Initialising SSSS depends on
|
||||||
|
// cross-signing and is part of the same project, so we only show
|
||||||
|
// this mode when the cross-signing feature is enabled.
|
||||||
|
// TODO: Clean this up when removing the feature flag.
|
||||||
|
let secureSecretStorageKeyBackup;
|
||||||
|
if (SettingsStore.isFeatureEnabled("feature_cross_signing")) {
|
||||||
|
secureSecretStorageKeyBackup = (
|
||||||
|
<div className="mx_KeyBackupPanel_buttonRow">
|
||||||
|
<AccessibleButton kind="primary" onClick={this._startNewBackupWithSecureSecretStorage}>
|
||||||
|
{_t("Start using Key Backup with Secure Secret Storage")}
|
||||||
|
</AccessibleButton>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
return <div>
|
return <div>
|
||||||
<div>
|
<div>
|
||||||
<p>{_t(
|
<p>{_t(
|
||||||
|
@ -313,6 +356,7 @@ export default class KeyBackupPanel extends React.PureComponent {
|
||||||
{_t("Start using Key Backup")}
|
{_t("Start using Key Backup")}
|
||||||
</AccessibleButton>
|
</AccessibleButton>
|
||||||
</div>
|
</div>
|
||||||
|
{secureSecretStorageKeyBackup}
|
||||||
</div>;
|
</div>;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -540,6 +540,7 @@
|
||||||
"This backup is trusted because it has been restored on this device": "This backup is trusted because it has been restored on this device",
|
"This backup is trusted because it has been restored on this device": "This backup is trusted because it has been restored on this device",
|
||||||
"Backup version: ": "Backup version: ",
|
"Backup version: ": "Backup version: ",
|
||||||
"Algorithm: ": "Algorithm: ",
|
"Algorithm: ": "Algorithm: ",
|
||||||
|
"Start using Key Backup with Secure Secret Storage": "Start using Key Backup with Secure Secret Storage",
|
||||||
"Your keys are <b>not being backed up from this device</b>.": "Your keys are <b>not being backed up from this device</b>.",
|
"Your keys are <b>not being backed up from this device</b>.": "Your keys are <b>not being backed up from this device</b>.",
|
||||||
"Back up your keys before signing out to avoid losing them.": "Back up your keys before signing out to avoid losing them.",
|
"Back up your keys before signing out to avoid losing them.": "Back up your keys before signing out to avoid losing them.",
|
||||||
"Start using Key Backup": "Start using Key Backup",
|
"Start using Key Backup": "Start using Key Backup",
|
||||||
|
|
Loading…
Reference in New Issue