diff --git a/src/async-components/views/dialogs/secretstorage/CreateSecretStorageDialog.js b/src/async-components/views/dialogs/secretstorage/CreateSecretStorageDialog.js index 4068f72217..35cd5aa819 100644 --- a/src/async-components/views/dialogs/secretstorage/CreateSecretStorageDialog.js +++ b/src/async-components/views/dialogs/secretstorage/CreateSecretStorageDialog.js @@ -295,31 +295,27 @@ export default class CreateSecretStorageDialog extends React.PureComponent { }); } - _onPassPhraseNextClick = () => { - this.setState({phase: PHASE_PASSPHRASE_CONFIRM}); - } - - _onPassPhraseKeyPress = async (e) => { - if (e.key === 'Enter') { - // If we're waiting for the timeout before updating the result at this point, - // skip ahead and do it now, otherwise we'll deny the attempt to proceed - // even if the user entered a valid passphrase - if (this._setZxcvbnResultTimeout !== null) { - clearTimeout(this._setZxcvbnResultTimeout); - this._setZxcvbnResultTimeout = null; - await new Promise((resolve) => { - this.setState({ - zxcvbnResult: scorePassword(this.state.passPhrase), - }, resolve); - }); - } - if (this._passPhraseIsValid()) { - this._onPassPhraseNextClick(); - } + _onPassPhraseNextClick = async () => { + // If we're waiting for the timeout before updating the result at this point, + // skip ahead and do it now, otherwise we'll deny the attempt to proceed + // even if the user entered a valid passphrase + if (this._setZxcvbnResultTimeout !== null) { + clearTimeout(this._setZxcvbnResultTimeout); + this._setZxcvbnResultTimeout = null; + await new Promise((resolve) => { + this.setState({ + zxcvbnResult: scorePassword(this.state.passPhrase), + }, resolve); + }); } - } + if (this._passPhraseIsValid()) { + this.setState({phase: PHASE_PASSPHRASE_CONFIRM}); + } + }; _onPassPhraseConfirmNextClick = async () => { + if (this.state.passPhrase !== this.state.passPhraseConfirm) return; + const [keyInfo, encodedRecoveryKey] = await MatrixClientPeg.get().createRecoveryKeyFromPassphrase(this.state.passPhrase); this._keyInfo = keyInfo; @@ -332,12 +328,6 @@ export default class CreateSecretStorageDialog extends React.PureComponent { }); } - _onPassPhraseConfirmKeyPress = (e) => { - if (e.key === 'Enter' && this.state.passPhrase === this.state.passPhraseConfirm) { - this._onPassPhraseConfirmNextClick(); - } - } - _onSetAgainClick = () => { this.setState({ passPhrase: '', @@ -407,7 +397,8 @@ export default class CreateSecretStorageDialog extends React.PureComponent { } else if (this.state.canUploadKeysWithPasswordOnly) { authPrompt =
{_t("Enter your account password to confirm the upgrade:")}
-
; } - return
+ return

{_t( "Set up encryption on this device to allow it to verify other devices, " + "granting them access to encrypted messages and marking them as trusted for other users.", @@ -480,13 +471,14 @@ export default class CreateSecretStorageDialog extends React.PureComponent { )}

-
{strengthMeter} @@ -499,10 +491,12 @@ export default class CreateSecretStorageDialog extends React.PureComponent { onChange={this._onUseKeyBackupChange} value={this.state.useKeyBackup} /> -
; + ; } _renderPhasePassPhraseConfirm() { @@ -549,27 +543,30 @@ export default class CreateSecretStorageDialog extends React.PureComponent {
; } const DialogButtons = sdk.getComponent('views.elements.DialogButtons'); - return
+ return

{_t( "Enter your passphrase a second time to confirm it.", )}

-
{passPhraseMatch}
- -
; + ; } _renderPhaseShowKey() { diff --git a/src/components/structures/SearchBox.js b/src/components/structures/SearchBox.js index 873efb64c2..e169e09752 100644 --- a/src/components/structures/SearchBox.js +++ b/src/components/structures/SearchBox.js @@ -160,6 +160,7 @@ export default createReactClass({ onKeyDown={ this._onKeyDown } onBlur={this._onBlur} placeholder={ placeholder } + autoComplete="off" /> { clearButton }
diff --git a/src/components/views/dialogs/secretstorage/AccessSecretStorageDialog.js b/src/components/views/dialogs/secretstorage/AccessSecretStorageDialog.js index c976eb81d0..ed65c9d2a6 100644 --- a/src/components/views/dialogs/secretstorage/AccessSecretStorageDialog.js +++ b/src/components/views/dialogs/secretstorage/AccessSecretStorageDialog.js @@ -1,6 +1,6 @@ /* Copyright 2018, 2019 New Vector Ltd -Copyright 2019 The Matrix.org Foundation C.I.C. +Copyright 2019, 2020 The Matrix.org Foundation C.I.C. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -21,7 +21,6 @@ import * as sdk from '../../../../index'; import {MatrixClientPeg} from '../../../../MatrixClientPeg'; import { _t } from '../../../../languageHandler'; -import { Key } from "../../../../Keyboard"; /* * Access Secure Secret Storage by requesting the user's passphrase. @@ -69,6 +68,8 @@ export default class AccessSecretStorageDialog extends React.PureComponent { } _onPassPhraseNext = async () => { + if (this.state.passPhrase.length <= 0) return; + this.setState({ keyMatches: null }); const input = { passphrase: this.state.passPhrase }; const keyMatches = await this.props.checkPrivateKey(input); @@ -80,6 +81,8 @@ export default class AccessSecretStorageDialog extends React.PureComponent { } _onRecoveryKeyNext = async () => { + if (!this.state.recoveryKeyValid) return; + this.setState({ keyMatches: null }); const input = { recoveryKey: this.state.recoveryKey }; const keyMatches = await this.props.checkPrivateKey(input); @@ -97,18 +100,6 @@ export default class AccessSecretStorageDialog extends React.PureComponent { }); } - _onPassPhraseKeyPress = (e) => { - if (e.key === Key.ENTER && this.state.passPhrase.length > 0) { - this._onPassPhraseNext(); - } - } - - _onRecoveryKeyKeyPress = (e) => { - if (e.key === Key.ENTER && this.state.recoveryKeyValid) { - this._onRecoveryKeyNext(); - } - } - render() { const BaseDialog = sdk.getComponent('views.dialogs.BaseDialog'); @@ -135,7 +126,7 @@ export default class AccessSecretStorageDialog extends React.PureComponent { )}
; } else { - keyStatus =
; + keyStatus =
; } content =
@@ -149,23 +140,26 @@ export default class AccessSecretStorageDialog extends React.PureComponent { "identity for verifying other devices by entering your passphrase.", )}

-
- + {keyStatus} - -
+ {_t( "If you've forgotten your passphrase you can "+ "use your recovery key or " + @@ -192,7 +186,7 @@ export default class AccessSecretStorageDialog extends React.PureComponent { let keyStatus; if (this.state.recoveryKey.length === 0) { - keyStatus =
; + keyStatus =
; } else if (this.state.recoveryKeyValid) { keyStatus =
{"\uD83D\uDC4D "}{_t("This looks like a valid recovery key!")} @@ -221,22 +215,23 @@ export default class AccessSecretStorageDialog extends React.PureComponent { "identity for verifying other devices by entering your recovery key.", )}

-
+
{keyStatus} - -
+ {_t( "If you've forgotten your recovery key you can "+ "."