You've already forked matrix-js-sdk
mirror of
https://github.com/matrix-org/matrix-js-sdk.git
synced 2025-11-23 17:02:25 +03:00
Add API to withdraw verification requirement CryptoAPI.withdrawVerificationRequirement (#4646)
* API to withdraw verification `CryptoAPi.withdrawVerificationRequirement` * review: use set up function instead of beforeEach
This commit is contained in:
@@ -1582,6 +1582,57 @@ describe("RustCrypto", () => {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe("withdraw verification", () => {
|
||||||
|
function createTestSetup(): { olmMachine: Mocked<RustSdkCryptoJs.OlmMachine>; rustCrypto: RustCrypto } {
|
||||||
|
const olmMachine = {
|
||||||
|
getIdentity: jest.fn(),
|
||||||
|
} as unknown as Mocked<RustSdkCryptoJs.OlmMachine>;
|
||||||
|
const rustCrypto = new RustCrypto(
|
||||||
|
logger,
|
||||||
|
olmMachine,
|
||||||
|
{} as MatrixClient["http"],
|
||||||
|
TEST_USER,
|
||||||
|
TEST_DEVICE_ID,
|
||||||
|
{} as ServerSideSecretStorage,
|
||||||
|
{} as CryptoCallbacks,
|
||||||
|
);
|
||||||
|
return { olmMachine, rustCrypto };
|
||||||
|
}
|
||||||
|
|
||||||
|
it("throws an error for an unknown user", async () => {
|
||||||
|
const { rustCrypto } = createTestSetup();
|
||||||
|
await expect(rustCrypto.withdrawVerificationRequirement("@alice:example.com")).rejects.toThrow(
|
||||||
|
"Cannot withdraw verification of unknown user",
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
it("Calls withdraw for other identity", async () => {
|
||||||
|
const { olmMachine, rustCrypto } = createTestSetup();
|
||||||
|
const identity = {
|
||||||
|
withdrawVerification: jest.fn(),
|
||||||
|
} as unknown as Mocked<RustSdkCryptoJs.OtherUserIdentity>;
|
||||||
|
|
||||||
|
olmMachine.getIdentity.mockResolvedValue(identity);
|
||||||
|
|
||||||
|
await rustCrypto.withdrawVerificationRequirement("@bob:example.com");
|
||||||
|
|
||||||
|
expect(identity.withdrawVerification).toHaveBeenCalled();
|
||||||
|
});
|
||||||
|
|
||||||
|
it("Calls withdraw for own identity", async () => {
|
||||||
|
const { olmMachine, rustCrypto } = createTestSetup();
|
||||||
|
const ownIdentity = {
|
||||||
|
withdrawVerification: jest.fn(),
|
||||||
|
} as unknown as Mocked<RustSdkCryptoJs.OwnUserIdentity>;
|
||||||
|
|
||||||
|
olmMachine.getIdentity.mockResolvedValue(ownIdentity);
|
||||||
|
|
||||||
|
await rustCrypto.withdrawVerificationRequirement("@alice:example.com");
|
||||||
|
|
||||||
|
expect(ownIdentity.withdrawVerification).toHaveBeenCalled();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
describe("key backup", () => {
|
describe("key backup", () => {
|
||||||
it("is started when rust crypto is created", async () => {
|
it("is started when rust crypto is created", async () => {
|
||||||
// `RustCrypto.checkKeyBackupAndEnable` async call is made in background in the RustCrypto constructor.
|
// `RustCrypto.checkKeyBackupAndEnable` async call is made in background in the RustCrypto constructor.
|
||||||
|
|||||||
@@ -221,6 +221,15 @@ export interface CryptoApi {
|
|||||||
*/
|
*/
|
||||||
pinCurrentUserIdentity(userId: string): Promise<void>;
|
pinCurrentUserIdentity(userId: string): Promise<void>;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Remove the requirement for this identity to be verified, and pin it.
|
||||||
|
*
|
||||||
|
* This is useful if the user was previously verified but is not anymore
|
||||||
|
* ({@link UserVerificationStatus.wasCrossSigningVerified}) and it is not possible to verify him again now.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
withdrawVerificationRequirement(userId: string): Promise<void>;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the verification status of a given device.
|
* Get the verification status of a given device.
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -1576,6 +1576,13 @@ export class Crypto extends TypedEventEmitter<CryptoEvent, CryptoEventHandlerMap
|
|||||||
throw new Error("not implemented");
|
throw new Error("not implemented");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Implementation of {@link Crypto.CryptoApi.withdrawVerificationRequirement}.
|
||||||
|
*/
|
||||||
|
public async withdrawVerificationRequirement(userId: string): Promise<void> {
|
||||||
|
throw new Error("not implemented");
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Check whether a given device is trusted.
|
* Check whether a given device is trusted.
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -699,6 +699,20 @@ export class RustCrypto extends TypedEventEmitter<RustCryptoEvents, CryptoEventH
|
|||||||
await userIdentity.pinCurrentMasterKey();
|
await userIdentity.pinCurrentMasterKey();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Implementation of {@link CryptoApi#withdrawVerificationRequirement}.
|
||||||
|
*/
|
||||||
|
public async withdrawVerificationRequirement(userId: string): Promise<void> {
|
||||||
|
const userIdentity: RustSdkCryptoJs.OtherUserIdentity | RustSdkCryptoJs.OwnUserIdentity | undefined =
|
||||||
|
await this.getOlmMachineOrThrow().getIdentity(new RustSdkCryptoJs.UserId(userId));
|
||||||
|
|
||||||
|
if (userIdentity === undefined) {
|
||||||
|
throw new Error("Cannot withdraw verification of unknown user");
|
||||||
|
}
|
||||||
|
|
||||||
|
await userIdentity.withdrawVerification();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Implementation of {@link CryptoApi#isCrossSigningReady}
|
* Implementation of {@link CryptoApi#isCrossSigningReady}
|
||||||
*/
|
*/
|
||||||
|
|||||||
Reference in New Issue
Block a user