Replace MatrixClient.isCryptoEnabled
by MatrixClient.getCrypto
(#140)
* Replace `MatrixClient.isCryptoEnabled` by `MatrixClient.getCrypto` * Cast `cryptoEnabled` as `boolean` * Fix `MatrixChat-test` (cherry picked from commit 950ab1940bfcea9443f03284f9175d319c13a44c)
This commit is contained in:
parent
146968da2c
commit
571ada37a7
14 changed files with 11 additions and 36 deletions
|
@ -413,7 +413,7 @@ export default class MatrixChat extends React.PureComponent<IProps, IState> {
|
||||||
|
|
||||||
private async postLoginSetup(): Promise<void> {
|
private async postLoginSetup(): Promise<void> {
|
||||||
const cli = MatrixClientPeg.safeGet();
|
const cli = MatrixClientPeg.safeGet();
|
||||||
const cryptoEnabled = cli.isCryptoEnabled();
|
const cryptoEnabled = Boolean(cli.getCrypto());
|
||||||
if (!cryptoEnabled) {
|
if (!cryptoEnabled) {
|
||||||
this.onLoggedIn();
|
this.onLoggedIn();
|
||||||
}
|
}
|
||||||
|
@ -1619,7 +1619,7 @@ export default class MatrixChat extends React.PureComponent<IProps, IState> {
|
||||||
.catch((e) => logger.error("Unable to start DecryptionFailureTracker", e));
|
.catch((e) => logger.error("Unable to start DecryptionFailureTracker", e));
|
||||||
|
|
||||||
cli.on(ClientEvent.Room, (room) => {
|
cli.on(ClientEvent.Room, (room) => {
|
||||||
if (cli.isCryptoEnabled()) {
|
if (cli.getCrypto()) {
|
||||||
const blacklistEnabled = SettingsStore.getValueAt(
|
const blacklistEnabled = SettingsStore.getValueAt(
|
||||||
SettingLevel.ROOM_DEVICE,
|
SettingLevel.ROOM_DEVICE,
|
||||||
"blacklistUnverifiedDevices",
|
"blacklistUnverifiedDevices",
|
||||||
|
@ -1707,7 +1707,7 @@ export default class MatrixChat extends React.PureComponent<IProps, IState> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (cli.isCryptoEnabled()) {
|
if (cli.getCrypto()) {
|
||||||
const blacklistEnabled = SettingsStore.getValueAt(SettingLevel.DEVICE, "blacklistUnverifiedDevices");
|
const blacklistEnabled = SettingsStore.getValueAt(SettingLevel.DEVICE, "blacklistUnverifiedDevices");
|
||||||
cli.setGlobalBlacklistUnverifiedDevices(blacklistEnabled);
|
cli.setGlobalBlacklistUnverifiedDevices(blacklistEnabled);
|
||||||
|
|
||||||
|
|
|
@ -1461,7 +1461,7 @@ export class RoomView extends React.Component<IRoomProps, IRoomState> {
|
||||||
// set the state immediately then update, so we don't scare the user into thinking the room is unencrypted
|
// set the state immediately then update, so we don't scare the user into thinking the room is unencrypted
|
||||||
this.setState({ e2eStatus });
|
this.setState({ e2eStatus });
|
||||||
|
|
||||||
if (this.context.client.isCryptoEnabled()) {
|
if (this.context.client.getCrypto()) {
|
||||||
/* At this point, the user has encryption on and cross-signing on */
|
/* At this point, the user has encryption on and cross-signing on */
|
||||||
e2eStatus = await shieldStatusForRoom(this.context.client, room);
|
e2eStatus = await shieldStatusForRoom(this.context.client, room);
|
||||||
RoomView.e2eStatusCache.set(room.roomId, e2eStatus);
|
RoomView.e2eStatusCache.set(room.roomId, e2eStatus);
|
||||||
|
|
|
@ -265,7 +265,7 @@ export class SendMessageComposer extends React.Component<ISendMessageComposerPro
|
||||||
public constructor(props: ISendMessageComposerProps, context: React.ContextType<typeof RoomContext>) {
|
public constructor(props: ISendMessageComposerProps, context: React.ContextType<typeof RoomContext>) {
|
||||||
super(props, context);
|
super(props, context);
|
||||||
|
|
||||||
if (this.props.mxClient.isCryptoEnabled() && this.props.mxClient.isRoomEncrypted(this.props.room.roomId)) {
|
if (this.props.mxClient.getCrypto() && this.props.mxClient.isRoomEncrypted(this.props.room.roomId)) {
|
||||||
this.prepareToEncrypt = throttle(
|
this.prepareToEncrypt = throttle(
|
||||||
() => {
|
() => {
|
||||||
this.props.mxClient.getCrypto()?.prepareToEncrypt(this.props.room);
|
this.props.mxClient.getCrypto()?.prepareToEncrypt(this.props.room);
|
||||||
|
|
|
@ -15,7 +15,7 @@ export function useEncryptionStatus(client: MatrixClient, room: Room): E2EStatus
|
||||||
const [e2eStatus, setE2eStatus] = useState<E2EStatus | null>(null);
|
const [e2eStatus, setE2eStatus] = useState<E2EStatus | null>(null);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (client.isCryptoEnabled()) {
|
if (client.getCrypto()) {
|
||||||
shieldStatusForRoom(client, room).then((e2eStatus) => {
|
shieldStatusForRoom(client, room).then((e2eStatus) => {
|
||||||
setE2eStatus(e2eStatus);
|
setE2eStatus(e2eStatus);
|
||||||
});
|
});
|
||||||
|
|
|
@ -141,7 +141,6 @@ export const mockClientMethodsDevice = (
|
||||||
export const mockClientMethodsCrypto = (): Partial<
|
export const mockClientMethodsCrypto = (): Partial<
|
||||||
Record<MethodLikeKeys<MatrixClient> & PropertyLikeKeys<MatrixClient>, unknown>
|
Record<MethodLikeKeys<MatrixClient> & PropertyLikeKeys<MatrixClient>, unknown>
|
||||||
> => ({
|
> => ({
|
||||||
isCryptoEnabled: jest.fn(),
|
|
||||||
isCrossSigningReady: jest.fn(),
|
isCrossSigningReady: jest.fn(),
|
||||||
isKeyBackupKeyStored: jest.fn(),
|
isKeyBackupKeyStored: jest.fn(),
|
||||||
getCrossSigningCacheCallbacks: jest.fn().mockReturnValue({ getCrossSigningKeyCache: jest.fn() }),
|
getCrossSigningCacheCallbacks: jest.fn().mockReturnValue({ getCrossSigningKeyCache: jest.fn() }),
|
||||||
|
|
|
@ -212,7 +212,6 @@ export function createTestClient(): MatrixClient {
|
||||||
relations: jest.fn().mockResolvedValue({
|
relations: jest.fn().mockResolvedValue({
|
||||||
events: [],
|
events: [],
|
||||||
}),
|
}),
|
||||||
isCryptoEnabled: jest.fn().mockReturnValue(false),
|
|
||||||
hasLazyLoadMembersEnabled: jest.fn().mockReturnValue(false),
|
hasLazyLoadMembersEnabled: jest.fn().mockReturnValue(false),
|
||||||
isInitialSyncComplete: jest.fn().mockReturnValue(true),
|
isInitialSyncComplete: jest.fn().mockReturnValue(true),
|
||||||
downloadKeys: jest.fn(),
|
downloadKeys: jest.fn(),
|
||||||
|
|
|
@ -98,7 +98,6 @@ describe("<MatrixChat />", () => {
|
||||||
getThirdpartyProtocols: jest.fn().mockResolvedValue({}),
|
getThirdpartyProtocols: jest.fn().mockResolvedValue({}),
|
||||||
getClientWellKnown: jest.fn().mockReturnValue({}),
|
getClientWellKnown: jest.fn().mockReturnValue({}),
|
||||||
isVersionSupported: jest.fn().mockResolvedValue(false),
|
isVersionSupported: jest.fn().mockResolvedValue(false),
|
||||||
isCryptoEnabled: jest.fn().mockReturnValue(false),
|
|
||||||
initRustCrypto: jest.fn(),
|
initRustCrypto: jest.fn(),
|
||||||
getRoom: jest.fn(),
|
getRoom: jest.fn(),
|
||||||
getMediaHandler: jest.fn().mockReturnValue({
|
getMediaHandler: jest.fn().mockReturnValue({
|
||||||
|
@ -1012,16 +1011,15 @@ describe("<MatrixChat />", () => {
|
||||||
setDeviceIsolationMode: jest.fn(),
|
setDeviceIsolationMode: jest.fn(),
|
||||||
userHasCrossSigningKeys: jest.fn().mockResolvedValue(false),
|
userHasCrossSigningKeys: jest.fn().mockResolvedValue(false),
|
||||||
};
|
};
|
||||||
loginClient.isCryptoEnabled.mockReturnValue(true);
|
|
||||||
loginClient.getCrypto.mockReturnValue(mockCrypto as any);
|
loginClient.getCrypto.mockReturnValue(mockCrypto as any);
|
||||||
});
|
});
|
||||||
|
|
||||||
it("should go straight to logged in view when crypto is not enabled", async () => {
|
it("should go straight to logged in view when crypto is not enabled", async () => {
|
||||||
loginClient.isCryptoEnabled.mockReturnValue(false);
|
loginClient.getCrypto.mockReturnValue(undefined);
|
||||||
|
|
||||||
await getComponentAndLogin(true);
|
await getComponentAndLogin(true);
|
||||||
|
|
||||||
expect(loginClient.getCrypto()!.userHasCrossSigningKeys).not.toHaveBeenCalled();
|
expect(screen.getByRole("heading", { name: "Welcome Ernie" })).toBeInTheDocument();
|
||||||
});
|
});
|
||||||
|
|
||||||
it("should go straight to logged in view when user does not have cross signing keys and server does not support cross signing", async () => {
|
it("should go straight to logged in view when user does not have cross signing keys and server does not support cross signing", async () => {
|
||||||
|
|
|
@ -97,6 +97,7 @@ describe("RoomView", () => {
|
||||||
stores.rightPanelStore.useUnitTestClient(cli);
|
stores.rightPanelStore.useUnitTestClient(cli);
|
||||||
|
|
||||||
jest.spyOn(VoipUserMapper.sharedInstance(), "getVirtualRoomForRoom").mockResolvedValue(undefined);
|
jest.spyOn(VoipUserMapper.sharedInstance(), "getVirtualRoomForRoom").mockResolvedValue(undefined);
|
||||||
|
jest.spyOn(cli, "getCrypto").mockReturnValue(undefined);
|
||||||
});
|
});
|
||||||
|
|
||||||
afterEach(() => {
|
afterEach(() => {
|
||||||
|
@ -230,7 +231,6 @@ describe("RoomView", () => {
|
||||||
it("updates url preview visibility on encryption state change", async () => {
|
it("updates url preview visibility on encryption state change", async () => {
|
||||||
room.getMyMembership = jest.fn().mockReturnValue(KnownMembership.Join);
|
room.getMyMembership = jest.fn().mockReturnValue(KnownMembership.Join);
|
||||||
// we should be starting unencrypted
|
// we should be starting unencrypted
|
||||||
expect(cli.isCryptoEnabled()).toEqual(false);
|
|
||||||
expect(cli.isRoomEncrypted(room.roomId)).toEqual(false);
|
expect(cli.isRoomEncrypted(room.roomId)).toEqual(false);
|
||||||
|
|
||||||
const roomViewInstance = await getRoomViewInstance();
|
const roomViewInstance = await getRoomViewInstance();
|
||||||
|
@ -246,7 +246,6 @@ describe("RoomView", () => {
|
||||||
expect(roomViewInstance.state.showUrlPreview).toBe(true);
|
expect(roomViewInstance.state.showUrlPreview).toBe(true);
|
||||||
|
|
||||||
// now enable encryption
|
// now enable encryption
|
||||||
cli.isCryptoEnabled.mockReturnValue(true);
|
|
||||||
cli.isRoomEncrypted.mockReturnValue(true);
|
cli.isRoomEncrypted.mockReturnValue(true);
|
||||||
|
|
||||||
// and fake an encryption event into the room to prompt it to re-check
|
// and fake an encryption event into the room to prompt it to re-check
|
||||||
|
|
|
@ -134,8 +134,6 @@ describe("CreateSecretStorageDialog", () => {
|
||||||
});
|
});
|
||||||
|
|
||||||
it("calls bootstrapSecretStorage once keys are restored if the backup is now trusted", async () => {
|
it("calls bootstrapSecretStorage once keys are restored if the backup is now trusted", async () => {
|
||||||
mockClient.isCryptoEnabled.mockReturnValue(true);
|
|
||||||
|
|
||||||
const result = renderComponent();
|
const result = renderComponent();
|
||||||
await result.findByText(/Enter your account password to confirm the upgrade/);
|
await result.findByText(/Enter your account password to confirm the upgrade/);
|
||||||
expect(result.container).toMatchSnapshot();
|
expect(result.container).toMatchSnapshot();
|
||||||
|
|
|
@ -142,7 +142,6 @@ beforeEach(() => {
|
||||||
isUserIgnored: jest.fn(),
|
isUserIgnored: jest.fn(),
|
||||||
getIgnoredUsers: jest.fn(),
|
getIgnoredUsers: jest.fn(),
|
||||||
setIgnoredUsers: jest.fn(),
|
setIgnoredUsers: jest.fn(),
|
||||||
isCryptoEnabled: jest.fn(),
|
|
||||||
getUserId: jest.fn(),
|
getUserId: jest.fn(),
|
||||||
getSafeUserId: jest.fn(),
|
getSafeUserId: jest.fn(),
|
||||||
getDomain: jest.fn(),
|
getDomain: jest.fn(),
|
||||||
|
@ -424,7 +423,6 @@ describe("<UserInfo />", () => {
|
||||||
|
|
||||||
describe("with crypto enabled", () => {
|
describe("with crypto enabled", () => {
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
mockClient.isCryptoEnabled.mockReturnValue(true);
|
|
||||||
mockClient.doesServerSupportUnstableFeature.mockResolvedValue(true);
|
mockClient.doesServerSupportUnstableFeature.mockResolvedValue(true);
|
||||||
mockCrypto.getUserVerificationStatus.mockResolvedValue(new UserVerificationStatus(false, false, false));
|
mockCrypto.getUserVerificationStatus.mockResolvedValue(new UserVerificationStatus(false, false, false));
|
||||||
|
|
||||||
|
@ -663,7 +661,6 @@ describe("<UserInfo />", () => {
|
||||||
|
|
||||||
describe("with an encrypted room", () => {
|
describe("with an encrypted room", () => {
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
mockClient.isCryptoEnabled.mockReturnValue(true);
|
|
||||||
mockClient.isRoomEncrypted.mockReturnValue(true);
|
mockClient.isRoomEncrypted.mockReturnValue(true);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
@ -8,15 +8,7 @@ Please see LICENSE files in the repository root for full details.
|
||||||
|
|
||||||
import React from "react";
|
import React from "react";
|
||||||
import { CallType, MatrixCall } from "matrix-js-sdk/src/webrtc/call";
|
import { CallType, MatrixCall } from "matrix-js-sdk/src/webrtc/call";
|
||||||
import {
|
import { EventType, JoinRule, MatrixEvent, PendingEventOrdering, Room, RoomMember } from "matrix-js-sdk/src/matrix";
|
||||||
EventType,
|
|
||||||
JoinRule,
|
|
||||||
MatrixClient,
|
|
||||||
MatrixEvent,
|
|
||||||
PendingEventOrdering,
|
|
||||||
Room,
|
|
||||||
RoomMember,
|
|
||||||
} from "matrix-js-sdk/src/matrix";
|
|
||||||
import { KnownMembership } from "matrix-js-sdk/src/types";
|
import { KnownMembership } from "matrix-js-sdk/src/types";
|
||||||
import {
|
import {
|
||||||
createEvent,
|
createEvent,
|
||||||
|
@ -86,6 +78,7 @@ describe("RoomHeader", () => {
|
||||||
} as unknown as DMRoomMap);
|
} as unknown as DMRoomMap);
|
||||||
|
|
||||||
setCardSpy = jest.spyOn(RightPanelStore.instance, "setCard");
|
setCardSpy = jest.spyOn(RightPanelStore.instance, "setCard");
|
||||||
|
jest.spyOn(ShieldUtils, "shieldStatusForRoom").mockResolvedValue(ShieldUtils.E2EStatus.Normal);
|
||||||
});
|
});
|
||||||
|
|
||||||
afterEach(() => {
|
afterEach(() => {
|
||||||
|
@ -595,10 +588,7 @@ describe("RoomHeader", () => {
|
||||||
});
|
});
|
||||||
|
|
||||||
describe("dm", () => {
|
describe("dm", () => {
|
||||||
let client: MatrixClient;
|
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
client = MatrixClientPeg.get()!;
|
|
||||||
|
|
||||||
// Make the mocked room a DM
|
// Make the mocked room a DM
|
||||||
mocked(DMRoomMap.shared().getUserIdForRoomId).mockImplementation((roomId) => {
|
mocked(DMRoomMap.shared().getUserIdForRoomId).mockImplementation((roomId) => {
|
||||||
if (roomId === room.roomId) return "@user:example.com";
|
if (roomId === room.roomId) return "@user:example.com";
|
||||||
|
@ -624,8 +614,6 @@ describe("RoomHeader", () => {
|
||||||
getMxcAvatarUrl: () => "mxc://avatar.url/image.png",
|
getMxcAvatarUrl: () => "mxc://avatar.url/image.png",
|
||||||
},
|
},
|
||||||
]);
|
]);
|
||||||
jest.spyOn(client, "isCryptoEnabled").mockReturnValue(true);
|
|
||||||
jest.spyOn(ShieldUtils, "shieldStatusForRoom").mockResolvedValue(ShieldUtils.E2EStatus.Normal);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
it.each([
|
it.each([
|
||||||
|
|
|
@ -571,7 +571,6 @@ describe("<SendMessageComposer/>", () => {
|
||||||
|
|
||||||
it("should call prepareToEncrypt when the user is typing", async () => {
|
it("should call prepareToEncrypt when the user is typing", async () => {
|
||||||
const cli = stubClient();
|
const cli = stubClient();
|
||||||
cli.isCryptoEnabled = jest.fn().mockReturnValue(true);
|
|
||||||
cli.isRoomEncrypted = jest.fn().mockReturnValue(true);
|
cli.isRoomEncrypted = jest.fn().mockReturnValue(true);
|
||||||
const room = mkStubRoom("!roomId:server", "Room", cli);
|
const room = mkStubRoom("!roomId:server", "Room", cli);
|
||||||
|
|
||||||
|
|
|
@ -38,7 +38,6 @@ function makeClient() {
|
||||||
getUser: jest.fn(),
|
getUser: jest.fn(),
|
||||||
isGuest: jest.fn().mockReturnValue(false),
|
isGuest: jest.fn().mockReturnValue(false),
|
||||||
isUserIgnored: jest.fn(),
|
isUserIgnored: jest.fn(),
|
||||||
isCryptoEnabled: jest.fn(),
|
|
||||||
getUserId: jest.fn(),
|
getUserId: jest.fn(),
|
||||||
on: jest.fn(),
|
on: jest.fn(),
|
||||||
isSynapseAdministrator: jest.fn().mockResolvedValue(false),
|
isSynapseAdministrator: jest.fn().mockResolvedValue(false),
|
||||||
|
|
|
@ -25,7 +25,6 @@ function makeClient(wellKnown: IClientWellKnown) {
|
||||||
getUser: jest.fn(),
|
getUser: jest.fn(),
|
||||||
isGuest: jest.fn().mockReturnValue(false),
|
isGuest: jest.fn().mockReturnValue(false),
|
||||||
isUserIgnored: jest.fn(),
|
isUserIgnored: jest.fn(),
|
||||||
isCryptoEnabled: jest.fn(),
|
|
||||||
getUserId: jest.fn(),
|
getUserId: jest.fn(),
|
||||||
on: jest.fn(),
|
on: jest.fn(),
|
||||||
isSynapseAdministrator: jest.fn().mockResolvedValue(false),
|
isSynapseAdministrator: jest.fn().mockResolvedValue(false),
|
||||||
|
|
Loading…
Reference in a new issue