warn users that changing/resetting password will nuke E2E keys

This commit is contained in:
Matthew Hodgson 2017-01-24 22:36:55 +01:00
parent 55591f2019
commit 5b61d00533
2 changed files with 55 additions and 22 deletions

View file

@ -87,10 +87,26 @@ module.exports = React.createClass({
this.showErrorDialog("New passwords must match each other."); this.showErrorDialog("New passwords must match each other.");
} }
else { else {
this.submitPasswordReset( var QuestionDialog = sdk.getComponent("dialogs.QuestionDialog");
this.state.enteredHomeserverUrl, this.state.enteredIdentityServerUrl, Modal.createDialog(QuestionDialog, {
this.state.email, this.state.password title: "Warning",
); description:
<div>
Resetting password will currently reset any end-to-end encryption keys on all devices,
making encrypted chat history unreadable.
In future this <a href="https://github.com/vector-im/riot-web/issues/2671">may be improved</a>,
but for now be warned.
</div>,
button: "Continue",
onFinished: (confirmed) => {
if (confirmed) {
this.submitPasswordReset(
this.state.enteredHomeserverUrl, this.state.enteredIdentityServerUrl,
this.state.email, this.state.password
);
}
},
});
} }
}, },

View file

@ -18,6 +18,7 @@ limitations under the License.
var React = require('react'); var React = require('react');
var MatrixClientPeg = require("../../../MatrixClientPeg"); var MatrixClientPeg = require("../../../MatrixClientPeg");
var Modal = require("../../../Modal");
var sdk = require("../../../index"); var sdk = require("../../../index");
module.exports = React.createClass({ module.exports = React.createClass({
@ -65,26 +66,42 @@ module.exports = React.createClass({
changePassword: function(old_password, new_password) { changePassword: function(old_password, new_password) {
var cli = MatrixClientPeg.get(); var cli = MatrixClientPeg.get();
var authDict = { var QuestionDialog = sdk.getComponent("dialogs.QuestionDialog");
type: 'm.login.password', Modal.createDialog(QuestionDialog, {
user: cli.credentials.userId, title: "Warning",
password: old_password description:
}; <div>
Changing password will currently reset any end-to-end encryption keys on all devices,
making encrypted chat history unreadable.
This will be <a href="https://github.com/vector-im/riot-web/issues/2671">improved shortly</a>,
but for now be warned.
</div>,
button: "Continue",
onFinished: (confirmed) => {
if (confirmed) {
var authDict = {
type: 'm.login.password',
user: cli.credentials.userId,
password: old_password
};
this.setState({ this.setState({
phase: this.Phases.Uploading phase: this.Phases.Uploading
});
var self = this;
cli.setPassword(authDict, new_password).then(function() {
self.props.onFinished();
}, function(err) {
self.props.onError(err);
}).finally(function() {
self.setState({
phase: self.Phases.Edit
});
}).done();
}
},
}); });
var self = this;
cli.setPassword(authDict, new_password).then(function() {
self.props.onFinished();
}, function(err) {
self.props.onError(err);
}).finally(function() {
self.setState({
phase: self.Phases.Edit
});
}).done();
}, },
onClickChange: function() { onClickChange: function() {