mirror of https://github.com/vector-im/riot-web
				
				
				
			Add new session verification details dialog
This gives more info on the session you're about to verify, including device name and ID. Fixes https://github.com/vector-im/riot-web/issues/11977pull/21833/head
							parent
							
								
									a168461e8b
								
							
						
					
					
						commit
						d014c5239b
					
				|  | @ -65,6 +65,7 @@ | |||
| @import "./views/dialogs/_IncomingSasDialog.scss"; | ||||
| @import "./views/dialogs/_InviteDialog.scss"; | ||||
| @import "./views/dialogs/_MessageEditHistoryDialog.scss"; | ||||
| @import "./views/dialogs/_NewSessionReviewDialog.scss"; | ||||
| @import "./views/dialogs/_RoomSettingsDialog.scss"; | ||||
| @import "./views/dialogs/_RoomUpgradeDialog.scss"; | ||||
| @import "./views/dialogs/_RoomUpgradeWarningDialog.scss"; | ||||
|  |  | |||
|  | @ -0,0 +1,37 @@ | |||
| /* | ||||
| Copyright 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. | ||||
| You may obtain a copy of the License at | ||||
| 
 | ||||
|     http://www.apache.org/licenses/LICENSE-2.0 | ||||
| 
 | ||||
| Unless required by applicable law or agreed to in writing, software | ||||
| distributed under the License is distributed on an "AS IS" BASIS, | ||||
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||
| See the License for the specific language governing permissions and | ||||
| limitations under the License. | ||||
| */ | ||||
| 
 | ||||
| .mx_NewSessionReviewDialog_header { | ||||
|     display: flex; | ||||
|     align-items: center; | ||||
|     margin-top: 0; | ||||
| } | ||||
| 
 | ||||
| .mx_NewSessionReviewDialog_headerIcon { | ||||
|     width: 24px; | ||||
|     height: 24px; | ||||
|     margin-right: 4px; | ||||
|     position: relative; | ||||
| } | ||||
| 
 | ||||
| .mx_NewSessionReviewDialog_deviceName { | ||||
|     font-weight: 600; | ||||
| } | ||||
| 
 | ||||
| .mx_NewSessionReviewDialog_deviceID { | ||||
|     font-size: 12px; | ||||
|     color: $notice-secondary-color; | ||||
| } | ||||
|  | @ -0,0 +1,92 @@ | |||
| /* | ||||
| Copyright 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. | ||||
| You may obtain a copy of the License at | ||||
| 
 | ||||
|     http://www.apache.org/licenses/LICENSE-2.0
 | ||||
| 
 | ||||
| Unless required by applicable law or agreed to in writing, software | ||||
| distributed under the License is distributed on an "AS IS" BASIS, | ||||
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||
| See the License for the specific language governing permissions and | ||||
| limitations under the License. | ||||
| */ | ||||
| 
 | ||||
| import React from 'react'; | ||||
| import PropTypes from 'prop-types'; | ||||
| import * as sdk from "../../../index"; | ||||
| import { _t } from '../../../languageHandler'; | ||||
| import Modal from "../../../Modal"; | ||||
| 
 | ||||
| export default class NewSessionReviewDialog extends React.PureComponent { | ||||
|     static propTypes = { | ||||
|         userId: PropTypes.string.isRequired, | ||||
|         device: PropTypes.object.isRequired, | ||||
|         onFinished: PropTypes.func.isRequired, | ||||
|     } | ||||
| 
 | ||||
|     onCancelClick = () => { | ||||
|         this.props.onFinished(false); | ||||
|     } | ||||
| 
 | ||||
|     onContinueClick = () => { | ||||
|         const DeviceVerifyDialog = | ||||
|             sdk.getComponent('views.dialogs.DeviceVerifyDialog'); | ||||
|         const { userId, device } = this.props; | ||||
|         Modal.createTrackedDialog('New Session Verification', 'Starting dialog', DeviceVerifyDialog, { | ||||
|             userId, | ||||
|             device, | ||||
|         }, null, /* priority = */ false, /* static = */ true); | ||||
|     } | ||||
| 
 | ||||
|     render() { | ||||
|         const BaseDialog = sdk.getComponent('views.dialogs.BaseDialog'); | ||||
|         const DialogButtons = sdk.getComponent("views.elements.DialogButtons"); | ||||
| 
 | ||||
|         const { device } = this.props; | ||||
| 
 | ||||
|         const icon = <span className="mx_NewSessionReviewDialog_headerIcon mx_E2EIcon_warning"></span>; | ||||
|         const titleText = _t("New session"); | ||||
| 
 | ||||
|         const title = <h2 className="mx_NewSessionReviewDialog_header"> | ||||
|             {icon} | ||||
|             {titleText} | ||||
|         </h2>; | ||||
| 
 | ||||
|         return ( | ||||
|             <BaseDialog | ||||
|                 title={title} | ||||
|                 onFinished={this.props.onFinished} | ||||
|             > | ||||
|                 <div className="mx_NewSessionReviewDialog_body"> | ||||
|                     <p>{_t( | ||||
|                         "Use this session to verify your new one, " + | ||||
|                         "granting it access to encrypted messages:", | ||||
|                     )}</p> | ||||
|                     <div className="mx_NewSessionReviewDialog_deviceInfo"> | ||||
|                         <div> | ||||
|                             <span className="mx_NewSessionReviewDialog_deviceName"> | ||||
|                                 {device.getDisplayName()} | ||||
|                             </span> <span className="mx_NewSessionReviewDialog_deviceID"> | ||||
|                                 ({device.deviceId}) | ||||
|                             </span> | ||||
|                         </div> | ||||
|                     </div> | ||||
|                     <p>{_t( | ||||
|                         "If you didn’t sign in to this session, " + | ||||
|                         "your account may be compromised.", | ||||
|                     )}</p> | ||||
|                     <DialogButtons | ||||
|                         cancelButton={_t("This wasn't me")} | ||||
|                         cancelButtonClass="danger" | ||||
|                         primaryButton={_t("Continue")} | ||||
|                         onCancel={this.onCancelClick} | ||||
|                         onPrimaryButtonClick={this.onContinueClick} | ||||
|                     /> | ||||
|                 </div> | ||||
|             </BaseDialog> | ||||
|         ); | ||||
|     } | ||||
| } | ||||
|  | @ -83,7 +83,7 @@ export default createReactClass({ | |||
|                 // primary in the DOM so will get form submissions unless we make it not a submit.
 | ||||
|                 type="button" | ||||
|                 onClick={this._onCancelClick} | ||||
| 		className={this.props.cancelButtonClass} | ||||
|                 className={this.props.cancelButtonClass} | ||||
|                 disabled={this.props.disabled} | ||||
|             > | ||||
|                 { this.props.cancelButton || _t("Cancel") } | ||||
|  |  | |||
|  | @ -34,11 +34,12 @@ export default class VerifySessionToast extends React.PureComponent { | |||
| 
 | ||||
|     _onReviewClick = async () => { | ||||
|         const cli = MatrixClientPeg.get(); | ||||
|         const DeviceVerifyDialog = sdk.getComponent('views.dialogs.DeviceVerifyDialog'); | ||||
|         const NewSessionReviewDialog = | ||||
|             sdk.getComponent('views.dialogs.NewSessionReviewDialog'); | ||||
| 
 | ||||
|         const device = await cli.getStoredDevice(cli.getUserId(), this.props.deviceId); | ||||
| 
 | ||||
|         Modal.createTrackedDialog('New Session Verify', 'Starting dialog', DeviceVerifyDialog, { | ||||
|         Modal.createTrackedDialog('New Session Review', 'Starting dialog', NewSessionReviewDialog, { | ||||
|             userId: MatrixClientPeg.get().getUserId(), | ||||
|             device, | ||||
|         }, null, /* priority = */ false, /* static = */ true); | ||||
|  |  | |||
|  | @ -1508,6 +1508,10 @@ | |||
|     "Are you sure you want to sign out?": "Are you sure you want to sign out?", | ||||
|     "Your homeserver doesn't seem to support this feature.": "Your homeserver doesn't seem to support this feature.", | ||||
|     "Message edits": "Message edits", | ||||
|     "New session": "New session", | ||||
|     "Use this session to verify your new one, granting it access to encrypted messages:": "Use this session to verify your new one, granting it access to encrypted messages:", | ||||
|     "If you didn’t sign in to this session, your account may be compromised.": "If you didn’t sign in to this session, your account may be compromised.", | ||||
|     "This wasn't me": "This wasn't me", | ||||
|     "If you run into any bugs or have feedback you'd like to share, please let us know on GitHub.": "If you run into any bugs or have feedback you'd like to share, please let us know on GitHub.", | ||||
|     "To help avoid duplicate issues, please <existingIssuesLink>view existing issues</existingIssuesLink> first (and add a +1) or <newIssueLink>create a new issue</newIssueLink> if you can't find it.": "To help avoid duplicate issues, please <existingIssuesLink>view existing issues</existingIssuesLink> first (and add a +1) or <newIssueLink>create a new issue</newIssueLink> if you can't find it.", | ||||
|     "Report bugs & give feedback": "Report bugs & give feedback", | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	 J. Ryan Stinnett
						J. Ryan Stinnett