1
0
mirror of https://github.com/matrix-org/matrix-react-sdk.git synced 2025-07-22 18:41:57 +03:00

Replace SecurityCustomisations with CryptoSetupExtension (#12342)

* Changed call sites from customisations/security to ModuleRunner.extensions

* Updated depenndecy and added tests

* Fixed style and formatting with prettier

* Fix according to Element PR comments

* Fixing issues raised in PR review

* Removed commented code. Improved encapsulation. Removed noisy logging

* Improved language of comment about calling the factory

* Refactor to get better encapsulation

* Find a better name. Provide explicit reset function. Provide more TSDoc

* Simplify mock for cryptoSetup, and add assertion for exception message.

* Remove unused className property. Adjust TSDoc comments

* Fix linting  and code style issues

* Added test to ensure we canregister anduse experimental extensions

* Fix linting and code-style issues

* Added test to ensure only on registration of experimental extensions

* Added test toensure call to getDehydratedDeviceCallback()

* Test what happens when there is no implementation

* Iterating cryptoSetup tests

* Lint/prettier fix

* Assert both branches when checking for dehydrationkey callback

* Update src/modules/ModuleRunner.ts

Language and formatting

Co-authored-by: Richard van der Hoff <1389908+richvdh@users.noreply.github.com>

* Update src/modules/ModuleRunner.ts

Reset by setting a fresh ExtensionsManager

Co-authored-by: Richard van der Hoff <1389908+richvdh@users.noreply.github.com>

* Update src/modules/ModuleRunner.ts

Use regular comment instead of TSDoc style comment

Co-authored-by: Richard van der Hoff <1389908+richvdh@users.noreply.github.com>

* Update test/MatrixClientPeg-test.ts

No need to extend the base class

Co-authored-by: Richard van der Hoff <1389908+richvdh@users.noreply.github.com>

* Update src/modules/ModuleRunner.ts

Fix spelling

Co-authored-by: Richard van der Hoff <1389908+richvdh@users.noreply.github.com>

* Update src/modules/ModuleRunner.ts

Fix spelling

Co-authored-by: Richard van der Hoff <1389908+richvdh@users.noreply.github.com>

* Update src/modules/ModuleRunner.ts

Fix TSDoc formatting

Co-authored-by: Richard van der Hoff <1389908+richvdh@users.noreply.github.com>

* Simplify mock setup

* Simplified mock and cleaned up a bit

* Keeping track of extensions is an implementation detail internal to ExtensionsManager.  Language and punctuation

* Addressed issues and comments from PR review

* Update src/modules/ModuleRunner.ts

Keep the flags to track implementations as direct properties

Co-authored-by: Richard van der Hoff <1389908+richvdh@users.noreply.github.com>

* Fix flattening of implementation map

* Update src/modules/ModuleRunner.ts

Fix whitespace

Co-authored-by: Richard van der Hoff <1389908+richvdh@users.noreply.github.com>

---------

Co-authored-by: Richard van der Hoff <1389908+richvdh@users.noreply.github.com>
This commit is contained in:
Thor Arne Johansen
2024-04-12 17:15:17 +02:00
committed by GitHub
parent 313b556044
commit 6392759bec
13 changed files with 361 additions and 28 deletions

View File

@ -16,7 +16,12 @@ limitations under the License.
import { RoomPreviewOpts, RoomViewLifecycle } from "@matrix-org/react-sdk-module-api/lib/lifecycles/RoomViewLifecycle";
import { MockModule, registerMockModule } from "./MockModule";
import {
MockModule,
registerMockModule,
registerMockModuleWithCryptoSetupExtension,
registerMockModuleWithExperimentalExtension,
} from "./MockModule";
import { ModuleRunner } from "../../src/modules/ModuleRunner";
describe("ModuleRunner", () => {
@ -49,4 +54,48 @@ describe("ModuleRunner", () => {
]);
});
});
describe("extensions", () => {
it("should return default values when no crypto-setup extensions are provided by a registered module", async () => {
registerMockModule();
const result = ModuleRunner.instance.extensions.cryptoSetup.getSecretStorageKey();
expect(result).toBeNull();
});
it("should return default values when no experimental extensions are provided by a registered module", async () => {
registerMockModule();
const result = ModuleRunner.instance.extensions?.experimental.experimentalMethod();
expect(result).toBeNull();
});
it("should return value from crypto-setup-extensions provided by a registered module", async () => {
registerMockModuleWithCryptoSetupExtension();
const result = ModuleRunner.instance.extensions.cryptoSetup.getSecretStorageKey();
expect(result).toEqual(Uint8Array.from([0x11, 0x22, 0x99]));
});
it("should return value from experimental-extensions provided by a registered module", async () => {
registerMockModuleWithExperimentalExtension();
const result = ModuleRunner.instance.extensions.experimental.experimentalMethod();
expect(result).toEqual(Uint8Array.from([0x22, 0x44, 0x88]));
});
it("must not allow multiple modules to provide cryptoSetup extension", async () => {
registerMockModuleWithCryptoSetupExtension();
const t = () => registerMockModuleWithCryptoSetupExtension();
expect(t).toThrow(Error);
expect(t).toThrow(
"adding cryptoSetup extension implementation from module MockModuleWithCryptoSetupExtension but an implementation was already provided",
);
});
it("must not allow multiple modules to provide experimental extension", async () => {
registerMockModuleWithExperimentalExtension();
const t = () => registerMockModuleWithExperimentalExtension();
expect(t).toThrow(Error);
expect(t).toThrow(
"adding experimental extension implementation from module MockModuleWithExperimentalExtension but an implementation was already provided",
);
});
});
});