1
0
mirror of https://github.com/bitwarden/browser synced 2025-12-19 17:53:39 +00:00

[PM-23628] Require userId for fetching provider keys (#16993)

* remove getProviderKey and expose providerKeys$

* update consumers
This commit is contained in:
Thomas Avery
2025-10-27 11:04:17 -05:00
committed by GitHub
parent b335987213
commit bd89c0ce6d
9 changed files with 223 additions and 64 deletions

View File

@@ -39,7 +39,7 @@ import {
FakeSingleUserState,
} from "@bitwarden/common/spec";
import { CsprngArray } from "@bitwarden/common/types/csprng";
import { OrganizationId, UserId } from "@bitwarden/common/types/guid";
import { OrganizationId, ProviderId, UserId } from "@bitwarden/common/types/guid";
import {
UserKey,
MasterKey,
@@ -1314,6 +1314,49 @@ describe("keyService", () => {
});
});
describe("providerKeys$", () => {
let mockUserPrivateKey: Uint8Array;
let mockProviderKeys: Record<ProviderId, ProviderKey>;
beforeEach(() => {
mockUserPrivateKey = makeStaticByteArray(64, 1);
mockProviderKeys = {
["provider1" as ProviderId]: makeSymmetricCryptoKey<ProviderKey>(64),
["provider2" as ProviderId]: makeSymmetricCryptoKey<ProviderKey>(64),
};
});
it("returns null when userPrivateKey is null", async () => {
jest.spyOn(keyService, "userPrivateKey$").mockReturnValue(of(null));
const result = await firstValueFrom(keyService.providerKeys$(mockUserId));
expect(result).toBeNull();
});
it("returns provider keys when userPrivateKey is available", async () => {
jest.spyOn(keyService, "userPrivateKey$").mockReturnValue(of(mockUserPrivateKey as any));
jest.spyOn(keyService as any, "providerKeysHelper$").mockReturnValue(of(mockProviderKeys));
const result = await firstValueFrom(keyService.providerKeys$(mockUserId));
expect(result).toEqual(mockProviderKeys);
expect((keyService as any).providerKeysHelper$).toHaveBeenCalledWith(
mockUserId,
mockUserPrivateKey,
);
});
it("returns null when providerKeysHelper$ returns null", async () => {
jest.spyOn(keyService, "userPrivateKey$").mockReturnValue(of(mockUserPrivateKey as any));
jest.spyOn(keyService as any, "providerKeysHelper$").mockReturnValue(of(null));
const result = await firstValueFrom(keyService.providerKeys$(mockUserId));
expect(result).toBeNull();
});
});
describe("makeKeyPair", () => {
test.each([null as unknown as SymmetricCryptoKey, undefined as unknown as SymmetricCryptoKey])(
"throws when the provided key is %s",