Look up bound mxid for the invited email address on the ID server and warn if it doesn't match our account.

pull/21833/head
David Baker 2016-03-18 15:30:27 +00:00
parent f1844a99e7
commit 97c765f457
1 changed files with 42 additions and 2 deletions

View File

@ -18,6 +18,7 @@ limitations under the License.
var React = require('react'); var React = require('react');
var sdk = require('../../../index'); var sdk = require('../../../index');
var MatrixClientPeg = require('../../../MatrixClientPeg');
module.exports = React.createClass({ module.exports = React.createClass({
displayName: 'RoomPreviewBar', displayName: 'RoomPreviewBar',
@ -45,10 +46,34 @@ module.exports = React.createClass({
}; };
}, },
getInitialState: function() {
return {
busy: false
}
},
componentWillMount: function() {
// If this is an invite and we've been told what email
// address was invited, fetch the user's list of 3pids
// so we can check them against the one that was invited
if (this.props.inviterName && this.props.invitedEmail) {
this.setState({busy: true});
MatrixClientPeg.get().lookupThreePid(
'email', this.props.invitedEmail
).finally(() => {
this.setState({busy: false});
}).done((result) => {
this.setState({invitedEmailMxid: result.mxid});
}, (err) => {
this.setState({threePidFetchError: err});
});
}
},
render: function() { render: function() {
var joinBlock, previewBlock; var joinBlock, previewBlock;
if (this.props.spinner) { if (this.props.spinner || this.state.busy) {
var Spinner = sdk.getComponent("elements.Spinner"); var Spinner = sdk.getComponent("elements.Spinner");
return (<div className="mx_RoomPreviewBar"> return (<div className="mx_RoomPreviewBar">
<Spinner /> <Spinner />
@ -56,6 +81,21 @@ module.exports = React.createClass({
} }
if (this.props.inviterName) { if (this.props.inviterName) {
var emailMatchBlock;
if (this.props.invitedEmail) {
if (this.state.threePidFetchError) {
emailMatchBlock = <div className="error">
Vector was unable to ascertain that the addres this invite was
sent to matches one associated with your account.
</div>
} else if (this.state.invitedEmailMxid != MatrixClientPeg.get().credentials.userId) {
emailMatchBlock = <div className="warning">
<img src="img/warning.svg" width="24" height="23" title= "/!\\" alt="/!\\" />
This invitation was sent to <span className="email">{this.props.invitedEmail}</span>
which is not publicly associated with your account.
</div>
}
}
joinBlock = ( joinBlock = (
<div> <div>
<div className="mx_RoomPreviewBar_invite_text"> <div className="mx_RoomPreviewBar_invite_text">
@ -64,7 +104,7 @@ module.exports = React.createClass({
<div className="mx_RoomPreviewBar_join_text"> <div className="mx_RoomPreviewBar_join_text">
Would you like to <a onClick={ this.props.onJoinClick }>accept</a> or <a onClick={ this.props.onRejectClick }>decline</a> this invitation? Would you like to <a onClick={ this.props.onJoinClick }>accept</a> or <a onClick={ this.props.onRejectClick }>decline</a> this invitation?
</div> </div>
<div>{this.props.invitedEmail} was invited</div> {emailMatchBlock}
</div> </div>
); );