monitor device verification in RoomView and update e2eStatus

pull/21833/head
Bruno Windels 2019-02-01 14:35:03 +01:00
parent 09c3391dd8
commit 8abb7ebc65
1 changed files with 24 additions and 0 deletions

View File

@ -168,6 +168,7 @@ module.exports = React.createClass({
MatrixClientPeg.get().on("Room.myMembership", this.onMyMembership); MatrixClientPeg.get().on("Room.myMembership", this.onMyMembership);
MatrixClientPeg.get().on("accountData", this.onAccountData); MatrixClientPeg.get().on("accountData", this.onAccountData);
MatrixClientPeg.get().on("crypto.keyBackupStatus", this.onKeyBackupStatus); MatrixClientPeg.get().on("crypto.keyBackupStatus", this.onKeyBackupStatus);
MatrixClientPeg.get().on("deviceVerificationChanged", this.onDeviceVerificationChanged);
this._fetchMediaConfig(); this._fetchMediaConfig();
// Start listening for RoomViewStore updates // Start listening for RoomViewStore updates
this._roomStoreToken = RoomViewStore.addListener(this._onRoomViewStoreUpdate); this._roomStoreToken = RoomViewStore.addListener(this._onRoomViewStoreUpdate);
@ -457,6 +458,7 @@ module.exports = React.createClass({
MatrixClientPeg.get().removeListener("RoomState.members", this.onRoomStateMember); MatrixClientPeg.get().removeListener("RoomState.members", this.onRoomStateMember);
MatrixClientPeg.get().removeListener("accountData", this.onAccountData); MatrixClientPeg.get().removeListener("accountData", this.onAccountData);
MatrixClientPeg.get().removeListener("crypto.keyBackupStatus", this.onKeyBackupStatus); MatrixClientPeg.get().removeListener("crypto.keyBackupStatus", this.onKeyBackupStatus);
MatrixClientPeg.get().removeListener("deviceVerificationChanged", this.onDeviceVerificationChanged);
} }
window.removeEventListener('beforeunload', this.onPageUnload); window.removeEventListener('beforeunload', this.onPageUnload);
@ -642,6 +644,7 @@ module.exports = React.createClass({
this._updatePreviewUrlVisibility(room); this._updatePreviewUrlVisibility(room);
this._loadMembersIfJoined(room); this._loadMembersIfJoined(room);
this._calculateRecommendedVersion(room); this._calculateRecommendedVersion(room);
this._updateE2EStatus(room);
}, },
_calculateRecommendedVersion: async function(room) { _calculateRecommendedVersion: async function(room) {
@ -733,6 +736,23 @@ module.exports = React.createClass({
}); });
}, },
onDeviceVerificationChanged: function(userId, device) {
const room = this.state.room;
if (!MatrixClientPeg.get().isRoomEncrypted(room.roomId)) {
return;
}
if (!room.currentState.getMember(userId)) {
return;
}
this._updateE2EStatus(room);
},
_updateE2EStatus: function(room) {
room.hasUnverifiedDevices().then((hasUnverifiedDevices) => {
this.setState({e2eStatus: hasUnverifiedDevices ? "warning" : "verified"});
});
},
updateTint: function() { updateTint: function() {
const room = this.state.room; const room = this.state.room;
if (!room) return; if (!room) return;
@ -1575,6 +1595,7 @@ module.exports = React.createClass({
room={this.state.room} room={this.state.room}
oobData={this.props.oobData} oobData={this.props.oobData}
collapsedRhs={this.props.collapsedRhs} collapsedRhs={this.props.collapsedRhs}
e2eStatus={this.state.e2eStatus}
/> />
<div className="mx_RoomView_body"> <div className="mx_RoomView_body">
<div className="mx_RoomView_auxPanel"> <div className="mx_RoomView_auxPanel">
@ -1622,6 +1643,7 @@ module.exports = React.createClass({
ref="header" ref="header"
room={this.state.room} room={this.state.room}
collapsedRhs={this.props.collapsedRhs} collapsedRhs={this.props.collapsedRhs}
e2eStatus={this.state.e2eStatus}
/> />
<div className="mx_RoomView_body"> <div className="mx_RoomView_body">
<div className="mx_RoomView_auxPanel"> <div className="mx_RoomView_auxPanel">
@ -1767,6 +1789,7 @@ module.exports = React.createClass({
disabled={this.props.disabled} disabled={this.props.disabled}
showApps={this.state.showApps} showApps={this.state.showApps}
uploadAllowed={this.isFileUploadAllowed} uploadAllowed={this.isFileUploadAllowed}
e2eStatus={this.state.e2eStatus}
/>; />;
} }
@ -1917,6 +1940,7 @@ module.exports = React.createClass({
onCancelClick={(aux && !hideCancel) ? this.onCancelClick : null} onCancelClick={(aux && !hideCancel) ? this.onCancelClick : null}
onForgetClick={(myMembership === "leave") ? this.onForgetClick : null} onForgetClick={(myMembership === "leave") ? this.onForgetClick : null}
onLeaveClick={(myMembership === "join") ? this.onLeaveClick : null} onLeaveClick={(myMembership === "join") ? this.onLeaveClick : null}
e2eStatus={this.state.e2eStatus}
/> />
<MainSplit panel={rightPanel} collapsedRhs={this.props.collapsedRhs}> <MainSplit panel={rightPanel} collapsedRhs={this.props.collapsedRhs}>
<div className={fadableSectionClasses}> <div className={fadableSectionClasses}>