Simplify references to VerificationRequest
(#11045)
* Use new `VerificationRequest.getQRCodeBytes()` * Use new `VerificationRequest.otherDeviceId` * Remove references to `VerificationRequest.channel` * Replace references to `VerificationRequest.{requesting,receiving}UserId` Normally these are guarded by `request.initiatedByMe` so we can trivially replace it with `request.otherUserId` or `client.getUserId()`. In one place we actually need to apply some logic. * increase test coverage * Even more test coverage * Even more test coverage
This commit is contained in:
parent
ac2c9cef8d
commit
34439ee652
12 changed files with 310 additions and 33 deletions
|
@ -1667,7 +1667,7 @@ export default class MatrixChat extends React.PureComponent<IProps, IState> {
|
|||
);
|
||||
} else if (request.pending) {
|
||||
ToastStore.sharedInstance().addOrReplaceToast({
|
||||
key: "verifreq_" + request.channel.transactionId,
|
||||
key: "verifreq_" + request.transactionId,
|
||||
title: _t("Verification requested"),
|
||||
icon: "verification",
|
||||
props: { request },
|
||||
|
|
|
@ -15,19 +15,18 @@ limitations under the License.
|
|||
*/
|
||||
|
||||
import React from "react";
|
||||
import { QRCodeData } from "matrix-js-sdk/src/crypto/verification/QRCode";
|
||||
|
||||
import QRCode from "../QRCode";
|
||||
|
||||
interface IProps {
|
||||
qrCodeData: QRCodeData;
|
||||
qrCodeBytes: Buffer;
|
||||
}
|
||||
|
||||
export default class VerificationQRCode extends React.PureComponent<IProps> {
|
||||
public render(): React.ReactNode {
|
||||
return (
|
||||
<QRCode
|
||||
data={[{ data: this.props.qrCodeData.getBuffer(), mode: "byte" }]}
|
||||
data={[{ data: this.props.qrCodeBytes, mode: "byte" }]}
|
||||
className="mx_VerificationQRCode"
|
||||
width={196}
|
||||
/>
|
||||
|
|
|
@ -148,7 +148,7 @@ export default class MKeyVerificationRequest extends React.Component<IProps> {
|
|||
if (accepted) {
|
||||
stateLabel = (
|
||||
<AccessibleButton onClick={this.openRequest}>
|
||||
{this.acceptedLabel(request.receivingUserId)}
|
||||
{this.acceptedLabel(request.initiatedByMe ? request.otherUserId : client.getSafeUserId())}
|
||||
</AccessibleButton>
|
||||
);
|
||||
} else if (request.phase === VerificationPhase.Cancelled) {
|
||||
|
@ -162,9 +162,9 @@ export default class MKeyVerificationRequest extends React.Component<IProps> {
|
|||
}
|
||||
|
||||
if (!request.initiatedByMe) {
|
||||
const name = getNameForEventRoom(client, request.requestingUserId, mxEvent.getRoomId()!);
|
||||
const name = getNameForEventRoom(client, request.otherUserId, mxEvent.getRoomId()!);
|
||||
title = _t("%(name)s wants to verify", { name });
|
||||
subtitle = userLabelForEventRoom(client, request.requestingUserId, mxEvent.getRoomId()!);
|
||||
subtitle = userLabelForEventRoom(client, request.otherUserId, mxEvent.getRoomId()!);
|
||||
if (request.canAccept) {
|
||||
stateNode = (
|
||||
<div className="mx_cryptoEvent_buttons">
|
||||
|
@ -180,7 +180,7 @@ export default class MKeyVerificationRequest extends React.Component<IProps> {
|
|||
} else {
|
||||
// request sent by us
|
||||
title = _t("You sent a verification request");
|
||||
subtitle = userLabelForEventRoom(client, request.receivingUserId, mxEvent.getRoomId()!);
|
||||
subtitle = userLabelForEventRoom(client, request.otherUserId, mxEvent.getRoomId()!);
|
||||
}
|
||||
|
||||
if (title) {
|
||||
|
|
|
@ -165,7 +165,7 @@ const EncryptionPanel: React.FC<IProps> = (props: IProps) => {
|
|||
onClose={onClose}
|
||||
member={member}
|
||||
request={request}
|
||||
key={request.channel.transactionId}
|
||||
key={request.transactionId}
|
||||
inDialog={layout === "dialog"}
|
||||
phase={phase}
|
||||
/>
|
||||
|
|
|
@ -67,6 +67,7 @@ export default class VerificationPanel extends React.PureComponent<IProps, IStat
|
|||
const { member, request } = this.props;
|
||||
const showSAS: boolean = request.otherPartySupportsMethod(verificationMethods.SAS);
|
||||
const showQR: boolean = request.otherPartySupportsMethod(SCAN_QR_CODE_METHOD);
|
||||
const qrCodeBytes = showQR ? request.getQRCodeBytes() : null;
|
||||
const brand = SdkConfig.get().brand;
|
||||
|
||||
const noCommonMethodError: JSX.Element | null =
|
||||
|
@ -85,11 +86,11 @@ export default class VerificationPanel extends React.PureComponent<IProps, IStat
|
|||
// HACK: This is a terrible idea.
|
||||
let qrBlockDialog: JSX.Element | undefined;
|
||||
let sasBlockDialog: JSX.Element | undefined;
|
||||
if (showQR && request.qrCodeData) {
|
||||
if (!!qrCodeBytes) {
|
||||
qrBlockDialog = (
|
||||
<div className="mx_VerificationPanel_QRPhase_startOption">
|
||||
<p>{_t("Scan this unique code")}</p>
|
||||
<VerificationQRCode qrCodeData={request.qrCodeData} />
|
||||
<VerificationQRCode qrCodeBytes={qrCodeBytes} />
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
@ -133,7 +134,7 @@ export default class VerificationPanel extends React.PureComponent<IProps, IStat
|
|||
}
|
||||
|
||||
let qrBlock: JSX.Element | undefined;
|
||||
if (showQR && request.qrCodeData) {
|
||||
if (!!qrCodeBytes) {
|
||||
qrBlock = (
|
||||
<div className="mx_UserInfo_container">
|
||||
<h3>{_t("Verify by scanning")}</h3>
|
||||
|
@ -144,7 +145,7 @@ export default class VerificationPanel extends React.PureComponent<IProps, IStat
|
|||
</p>
|
||||
|
||||
<div className="mx_VerificationPanel_qrCode">
|
||||
<VerificationQRCode qrCodeData={request.qrCodeData} />
|
||||
<VerificationQRCode qrCodeBytes={qrCodeBytes} />
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
|
@ -201,7 +202,7 @@ export default class VerificationPanel extends React.PureComponent<IProps, IStat
|
|||
};
|
||||
|
||||
private getDevice(): DeviceInfo | null {
|
||||
const deviceId = this.props.request && this.props.request.channel.deviceId;
|
||||
const deviceId = this.props.request && this.props.request.otherDeviceId;
|
||||
const userId = MatrixClientPeg.get().getUserId();
|
||||
if (deviceId && userId) {
|
||||
return MatrixClientPeg.get().getStoredDevice(userId, deviceId);
|
||||
|
@ -275,12 +276,12 @@ export default class VerificationPanel extends React.PureComponent<IProps, IStat
|
|||
if (!device) {
|
||||
// This can happen if the device is logged out while we're still showing verification
|
||||
// UI for it.
|
||||
logger.warn("Verified device we don't know about: " + this.props.request.channel.deviceId);
|
||||
logger.warn("Verified device we don't know about: " + this.props.request.otherDeviceId);
|
||||
description = _t("You've successfully verified your device!");
|
||||
} else {
|
||||
description = _t("You've successfully verified %(deviceName)s (%(deviceId)s)!", {
|
||||
deviceName: device ? device.getDisplayName() : "",
|
||||
deviceId: this.props.request.channel.deviceId,
|
||||
deviceId: this.props.request.otherDeviceId,
|
||||
});
|
||||
}
|
||||
} else {
|
||||
|
|
|
@ -74,11 +74,11 @@ export default class VerificationRequestToast extends React.PureComponent<IProps
|
|||
|
||||
if (request.isSelfVerification) {
|
||||
const cli = MatrixClientPeg.get();
|
||||
const device = request.channel.deviceId ? await cli.getDevice(request.channel.deviceId) : null;
|
||||
const device = request.otherDeviceId ? await cli.getDevice(request.otherDeviceId) : null;
|
||||
const ip = device?.last_seen_ip;
|
||||
this.setState({
|
||||
device:
|
||||
(request.channel.deviceId && cli.getStoredDevice(cli.getSafeUserId(), request.channel.deviceId)) ||
|
||||
(request.otherDeviceId && cli.getStoredDevice(cli.getSafeUserId(), request.otherDeviceId)) ||
|
||||
undefined,
|
||||
ip,
|
||||
});
|
||||
|
@ -113,10 +113,10 @@ export default class VerificationRequestToast extends React.PureComponent<IProps
|
|||
// no room id for to_device requests
|
||||
const cli = MatrixClientPeg.get();
|
||||
try {
|
||||
if (request.channel.roomId) {
|
||||
if (request.roomId) {
|
||||
dis.dispatch<ViewRoomPayload>({
|
||||
action: Action.ViewRoom,
|
||||
room_id: request.channel.roomId,
|
||||
room_id: request.roomId,
|
||||
should_peek: false,
|
||||
metricsTrigger: "VerificationRequest",
|
||||
});
|
||||
|
@ -128,7 +128,7 @@ export default class VerificationRequestToast extends React.PureComponent<IProps
|
|||
{ phase: RightPanelPhases.EncryptionPanel, state: { verificationRequest: request, member } },
|
||||
],
|
||||
undefined,
|
||||
request.channel.roomId,
|
||||
request.roomId,
|
||||
);
|
||||
} else {
|
||||
Modal.createDialog(
|
||||
|
@ -164,7 +164,7 @@ export default class VerificationRequestToast extends React.PureComponent<IProps
|
|||
}
|
||||
} else {
|
||||
const userId = request.otherUserId;
|
||||
const roomId = request.channel.roomId;
|
||||
const roomId = request.roomId;
|
||||
description = roomId ? userLabelForEventRoom(MatrixClientPeg.get(), userId, roomId) : userId;
|
||||
// for legacy to_device verification requests
|
||||
if (description === userId) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue