Skip to content

Commit

Permalink
Remove references to MatrixClient.crypto (#28204)
Browse files Browse the repository at this point in the history
* Remove `VerificationExplorer`

* Remove `remakeolm` slash command

* Remove call to `crypto.cancelAndResendAllOutgoingKeyRequests`

* Remove crypto mock in `LoginWithQR-test.tsx`

* Remove `StopGadWidgetDriver.sendToDevice`

* Remove remaining mock
  • Loading branch information
florianduros authored Oct 16, 2024
1 parent f26b51c commit f56f814
Show file tree
Hide file tree
Showing 12 changed files with 0 additions and 380 deletions.
28 changes: 0 additions & 28 deletions src/SlashCommands.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -736,34 +736,6 @@ export const Commands = [
category: CommandCategories.advanced,
renderingTypes: [TimelineRenderingType.Room],
}),
new Command({
command: "remakeolm",
description: _td("slash_command|remakeolm"),
isEnabled: (cli) => {
return SettingsStore.getValue("developerMode") && !isCurrentLocalRoom(cli);
},
runFn: (cli, roomId) => {
try {
const room = cli.getRoom(roomId);

cli.forceDiscardSession(roomId);

return success(
room?.getEncryptionTargetMembers().then((members) => {
// noinspection JSIgnoredPromiseFromCall
cli.crypto?.ensureOlmSessionsForUsers(
members.map((m) => m.userId),
true,
);
}),
);
} catch (e) {
return reject(e instanceof Error ? e.message : e);
}
},
category: CommandCategories.advanced,
renderingTypes: [TimelineRenderingType.Room],
}),
new Command({
command: "rainbow",
description: _td("slash_command|rainbow"),
Expand Down
2 changes: 0 additions & 2 deletions src/components/views/dialogs/DevtoolsDialog.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,6 @@ import MatrixClientContext from "../../../contexts/MatrixClientContext";
import BaseDialog from "./BaseDialog";
import { TimelineEventEditor } from "./devtools/Event";
import ServersInRoom from "./devtools/ServersInRoom";
import VerificationExplorer from "./devtools/VerificationExplorer";
import SettingExplorer from "./devtools/SettingExplorer";
import { RoomStateExplorer } from "./devtools/RoomState";
import BaseTool, { DevtoolsContext, IDevtoolsProps } from "./devtools/BaseTool";
Expand Down Expand Up @@ -45,7 +44,6 @@ const Tools: Record<Category, [label: TranslationKey, tool: Tool][]> = {
[_td("devtools|explore_room_account_data"), RoomAccountDataExplorer],
[_td("devtools|view_servers_in_room"), ServersInRoom],
[_td("devtools|notifications_debug"), RoomNotifications],
[_td("devtools|verification_explorer"), VerificationExplorer],
[_td("devtools|active_widgets"), WidgetExplorer],
],
[Category.Other]: [
Expand Down
98 changes: 0 additions & 98 deletions src/components/views/dialogs/devtools/VerificationExplorer.tsx
Original file line number Diff line number Diff line change
@@ -1,98 +0,0 @@
/*
Copyright 2024 New Vector Ltd.
Copyright 2023 The Matrix.org Foundation C.I.C.
Copyright 2022 Michael Telatynski <[email protected]>
SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only
Please see LICENSE files in the repository root for full details.
*/

import React, { useContext, useEffect, useState } from "react";
import {
VerificationPhase as Phase,
VerificationRequest,
VerificationRequestEvent,
CryptoEvent,
} from "matrix-js-sdk/src/crypto-api";

import { useTypedEventEmitter, useTypedEventEmitterState } from "../../../../hooks/useEventEmitter";
import { _t, _td, TranslationKey } from "../../../../languageHandler";
import MatrixClientContext from "../../../../contexts/MatrixClientContext";
import BaseTool, { DevtoolsContext, IDevtoolsProps } from "./BaseTool";
import { Tool } from "../DevtoolsDialog";

const PHASE_MAP: Record<Phase, TranslationKey> = {
[Phase.Unsent]: _td("common|unsent"),
[Phase.Requested]: _td("devtools|phase_requested"),
[Phase.Ready]: _td("devtools|phase_ready"),
[Phase.Done]: _td("action|done"),
[Phase.Started]: _td("devtools|phase_started"),
[Phase.Cancelled]: _td("devtools|phase_cancelled"),
};

const VerificationRequestExplorer: React.FC<{
txnId: string;
request: VerificationRequest;
}> = ({ txnId, request }) => {
const [, updateState] = useState();
const [timeout, setRequestTimeout] = useState(request.timeout);

/* Re-render if something changes state */
useTypedEventEmitter(request, VerificationRequestEvent.Change, updateState);

/* Keep re-rendering if there's a timeout */
useEffect(() => {
if (request.timeout == 0) return;

/* Note that request.timeout is a getter, so its value changes */
const id = window.setInterval(() => {
setRequestTimeout(request.timeout);
}, 500);

return () => {
clearInterval(id);
};
}, [request]);

return (
<div className="mx_DevTools_VerificationRequest">
<dl>
<dt>{_t("devtools|phase_transaction")}</dt>
<dd>{txnId}</dd>
<dt>{_t("devtools|phase")}</dt>
<dd>{PHASE_MAP[request.phase] ? _t(PHASE_MAP[request.phase]) : request.phase}</dd>
<dt>{_t("devtools|timeout")}</dt>
<dd>{timeout === null ? _t("devtools|timeout_none") : Math.floor(timeout / 1000)}</dd>
<dt>{_t("devtools|methods")}</dt>
<dd>{request.methods && request.methods.join(", ")}</dd>
<dt>{_t("devtools|other_user")}</dt>
<dd>{request.otherUserId}</dd>
</dl>
</div>
);
};

const VerificationExplorer: Tool = ({ onBack }: IDevtoolsProps) => {
const cli = useContext(MatrixClientContext);
const context = useContext(DevtoolsContext);

const requests = useTypedEventEmitterState(cli, CryptoEvent.VerificationRequestReceived, () => {
return (
cli.crypto?.inRoomVerificationRequests["requestsByRoomId"]?.get(context.room.roomId) ??
new Map<string, VerificationRequest>()
);
});

return (
<BaseTool onBack={onBack}>
{Array.from(requests.entries())
.reverse()
.map(([txnId, request]) => (
<VerificationRequestExplorer txnId={txnId} request={request} key={txnId} />
))}
{requests.size < 1 && _t("devtools|no_verification_requests_found")}
</BaseTool>
);
};

export default VerificationExplorer;
14 changes: 0 additions & 14 deletions src/i18n/strings/en_EN.json
Original file line number Diff line number Diff line change
Expand Up @@ -579,7 +579,6 @@
"unmute": "Unmute",
"unnamed_room": "Unnamed Room",
"unnamed_space": "Unnamed Space",
"unsent": "Unsent",
"unverified": "Unverified",
"updating": "Updating...",
"user": "User",
Expand Down Expand Up @@ -764,20 +763,11 @@
"low_bandwidth_mode": "Low bandwidth mode",
"low_bandwidth_mode_description": "Requires compatible homeserver.",
"main_timeline": "Main timeline",
"methods": "Methods",
"no_receipt_found": "No receipt found",
"no_verification_requests_found": "No verification requests found",
"notification_state": "Notification state is <strong>%(notificationState)s</strong>",
"notifications_debug": "Notifications debug",
"number_of_users": "Number of users",
"original_event_source": "Original event source",
"other_user": "Other user",
"phase": "Phase",
"phase_cancelled": "Cancelled",
"phase_ready": "Ready",
"phase_requested": "Requested",
"phase_started": "Started",
"phase_transaction": "Transaction",
"room_encrypted": "Room is <strong>encrypted ✅</strong>",
"room_id": "Room ID: %(roomId)s",
"room_not_encrypted": "Room is <strong>not encrypted 🚨</strong>",
Expand Down Expand Up @@ -815,8 +805,6 @@
"state_key": "State Key",
"thread_root_id": "Thread Root ID: %(threadRootId)s",
"threads_timeline": "Threads timeline",
"timeout": "Timeout",
"timeout_none": "None",
"title": "Developer tools",
"toggle_event": "toggle event",
"toolbox": "Toolbox",
Expand All @@ -833,7 +821,6 @@
"values_explicit_colon": "Values at explicit levels:",
"values_explicit_room": "Values at explicit levels in this room",
"values_explicit_this_room_colon": "Values at explicit levels in this room:",
"verification_explorer": "Verification explorer",
"view_servers_in_room": "View servers in room",
"view_source_decrypted_event_source": "Decrypted event source",
"view_source_decrypted_event_source_unavailable": "Decrypted source unavailable",
Expand Down Expand Up @@ -3038,7 +3025,6 @@
"rageshake": "Send a bug report with logs",
"rainbow": "Sends the given message coloured as a rainbow",
"rainbowme": "Sends the given emote coloured as a rainbow",
"remakeolm": "Developer command: Discards the current outbound group session and sets up new Olm sessions",
"remove": "Removes user with given id from this room",
"roomavatar": "Changes the avatar of the current room",
"roomname": "Sets the room name",
Expand Down
2 changes: 0 additions & 2 deletions src/stores/SetupEncryptionStore.ts
Original file line number Diff line number Diff line change
Expand Up @@ -284,8 +284,6 @@ export class SetupEncryptionStore extends EventEmitter {
public done(): void {
this.phase = Phase.Finished;
this.emit("update");
// async - ask other clients for keys, if necessary
MatrixClientPeg.safeGet().crypto?.cancelAndResendAllOutgoingKeyRequests();
}

private async setActiveVerificationRequest(request: VerificationRequest): Promise<void> {
Expand Down
49 changes: 0 additions & 49 deletions src/stores/widgets/StopGapWidgetDriver.ts
Original file line number Diff line number Diff line change
Expand Up @@ -414,55 +414,6 @@ export class StopGapWidgetDriver extends WidgetDriver {
await client._unstable_updateDelayedEvent(delayId, action);
}

public async sendToDevice(
eventType: string,
encrypted: boolean,
contentMap: { [userId: string]: { [deviceId: string]: object } },
): Promise<void> {
const client = MatrixClientPeg.safeGet();

if (encrypted) {
const deviceInfoMap = await client.crypto!.deviceList.downloadKeys(Object.keys(contentMap), false);

await Promise.all(
Object.entries(contentMap).flatMap(([userId, userContentMap]) =>
Object.entries(userContentMap).map(async ([deviceId, content]): Promise<void> => {
const devices = deviceInfoMap.get(userId);
if (!devices) return;

if (deviceId === "*") {
// Send the message to all devices we have keys for
await client.encryptAndSendToDevices(
Array.from(devices.values()).map((deviceInfo) => ({
userId,
deviceInfo,
})),
content,
);
} else if (devices.has(deviceId)) {
// Send the message to a specific device
await client.encryptAndSendToDevices(
[{ userId, deviceInfo: devices.get(deviceId)! }],
content,
);
}
}),
),
);
} else {
await client.queueToDevice({
eventType,
batch: Object.entries(contentMap).flatMap(([userId, userContentMap]) =>
Object.entries(userContentMap).map(([deviceId, content]) => ({
userId,
deviceId,
payload: content,
})),
),
});
}
}

private pickRooms(roomIds?: (string | Symbols.AnyRoom)[]): Room[] {
const client = MatrixClientPeg.get();
if (!client) throw new Error("Not attached to a client");
Expand Down
5 changes: 0 additions & 5 deletions test/test-utils/test-utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -119,11 +119,6 @@ export function createTestClient(): MatrixClient {
removeRoom: jest.fn(),
},

crypto: {
deviceList: {
downloadKeys: jest.fn(),
},
},
getCrypto: jest.fn().mockReturnValue({
getOwnDeviceKeys: jest.fn(),
getUserDeviceInfo: jest.fn(),
Expand Down
44 changes: 0 additions & 44 deletions test/unit-tests/SlashCommands-test.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -236,50 +236,6 @@ describe("SlashCommands", () => {
});
});

describe("/remakeolm", () => {
beforeEach(() => {
command = findCommand("remakeolm")!;
});

describe("isEnabled", () => {
describe("when developer mode is enabled", () => {
beforeEach(() => {
jest.spyOn(SettingsStore, "getValue").mockImplementation((settingName: string) => {
if (settingName === "developerMode") return true;
});
});

it("should return true for Room", () => {
setCurrentRoom();
expect(command.isEnabled(client)).toBe(true);
});

it("should return false for LocalRoom", () => {
setCurrentLocalRoom();
expect(command.isEnabled(client)).toBe(false);
});
});

describe("when developer mode is not enabled", () => {
beforeEach(() => {
jest.spyOn(SettingsStore, "getValue").mockImplementation((settingName: string) => {
if (settingName === "developerMode") return false;
});
});

it("should return false for Room", () => {
setCurrentRoom();
expect(command.isEnabled(client)).toBe(false);
});

it("should return false for LocalRoom", () => {
setCurrentLocalRoom();
expect(command.isEnabled(client)).toBe(false);
});
});
});
});

describe("/part", () => {
it("should part room matching alias if found", async () => {
const room1 = new Room("room-id", client, client.getSafeUserId());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -75,11 +75,6 @@ exports[`DevtoolsDialog renders the devtools dialog 1`] = `
>
Notifications debug
</button>
<button
class="mx_DevTools_button"
>
Verification explorer
</button>
<button
class="mx_DevTools_button"
>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,6 @@ function makeClient() {
},
getClientWellKnown: jest.fn().mockReturnValue({}),
getCrypto: jest.fn().mockReturnValue({}),
crypto: {},
} as unknown as MatrixClient);
}

Expand Down Expand Up @@ -194,7 +193,6 @@ describe("<LoginWithQR />", () => {
});

test("approve - no crypto", async () => {
(client as any).crypto = undefined;
(client as any).getCrypto = () => undefined;
const onFinished = jest.fn();
render(getComponent({ client, onFinished }));
Expand Down
Loading

0 comments on commit f56f814

Please sign in to comment.