mirror of
https://github.com/bitwarden/browser
synced 2025-12-10 21:33:27 +00:00
* Remove deprecated cryptoservice functions * Use getUserkeyWithLegacySupport to get userkey * Fix tests * Fix tests * Fix tests * Remove unused cryptoservice instances * Fix build * Remove unused apiService in constructor * Fix encryption * Ensure passed in key is used if present * Fix sends and folders * Fix tests * Remove logged key * Fix import for account restricted keys
149 lines
4.4 KiB
TypeScript
149 lines
4.4 KiB
TypeScript
import { mock } from "jest-mock-extended";
|
|
|
|
import { SymmetricCryptoKey } from "@bitwarden/common/platform/models/domain/symmetric-crypto-key";
|
|
import { UserKey } from "@bitwarden/common/types/key";
|
|
|
|
import { makeStaticByteArray, mockEnc } from "../../../../../spec";
|
|
import { CryptoService } from "../../../../platform/abstractions/crypto.service";
|
|
import { EncryptService } from "../../../../platform/abstractions/encrypt.service";
|
|
import { ContainerService } from "../../../../platform/services/container.service";
|
|
import { SendType } from "../../enums/send-type";
|
|
import { SendData } from "../data/send.data";
|
|
|
|
import { Send } from "./send";
|
|
import { SendText } from "./send-text";
|
|
|
|
describe("Send", () => {
|
|
let data: SendData;
|
|
|
|
beforeEach(() => {
|
|
data = {
|
|
id: "id",
|
|
accessId: "accessId",
|
|
type: SendType.Text,
|
|
name: "encName",
|
|
notes: "encNotes",
|
|
text: {
|
|
text: "encText",
|
|
hidden: true,
|
|
},
|
|
file: null,
|
|
key: "encKey",
|
|
maxAccessCount: null,
|
|
accessCount: 10,
|
|
revisionDate: "2022-01-31T12:00:00.000Z",
|
|
expirationDate: "2022-01-31T12:00:00.000Z",
|
|
deletionDate: "2022-01-31T12:00:00.000Z",
|
|
password: "password",
|
|
disabled: false,
|
|
hideEmail: true,
|
|
};
|
|
});
|
|
|
|
it("Convert from empty", () => {
|
|
const data = new SendData();
|
|
const send = new Send(data);
|
|
|
|
expect(send).toEqual({
|
|
id: null,
|
|
accessId: null,
|
|
type: undefined,
|
|
name: null,
|
|
notes: null,
|
|
text: undefined,
|
|
file: undefined,
|
|
key: null,
|
|
maxAccessCount: undefined,
|
|
accessCount: undefined,
|
|
revisionDate: null,
|
|
expirationDate: null,
|
|
deletionDate: null,
|
|
password: undefined,
|
|
disabled: undefined,
|
|
hideEmail: undefined,
|
|
});
|
|
});
|
|
|
|
it("Convert", () => {
|
|
const send = new Send(data);
|
|
|
|
expect(send).toEqual({
|
|
id: "id",
|
|
accessId: "accessId",
|
|
type: SendType.Text,
|
|
name: { encryptedString: "encName", encryptionType: 0 },
|
|
notes: { encryptedString: "encNotes", encryptionType: 0 },
|
|
text: {
|
|
text: { encryptedString: "encText", encryptionType: 0 },
|
|
hidden: true,
|
|
},
|
|
key: { encryptedString: "encKey", encryptionType: 0 },
|
|
maxAccessCount: null,
|
|
accessCount: 10,
|
|
revisionDate: new Date("2022-01-31T12:00:00.000Z"),
|
|
expirationDate: new Date("2022-01-31T12:00:00.000Z"),
|
|
deletionDate: new Date("2022-01-31T12:00:00.000Z"),
|
|
password: "password",
|
|
disabled: false,
|
|
hideEmail: true,
|
|
});
|
|
});
|
|
|
|
it("Decrypt", async () => {
|
|
const text = mock<SendText>();
|
|
text.decrypt.mockResolvedValue("textView" as any);
|
|
const userKey = new SymmetricCryptoKey(new Uint8Array(32)) as UserKey;
|
|
|
|
const send = new Send();
|
|
send.id = "id";
|
|
send.accessId = "accessId";
|
|
send.type = SendType.Text;
|
|
send.name = mockEnc("name");
|
|
send.notes = mockEnc("notes");
|
|
send.text = text;
|
|
send.key = mockEnc("key");
|
|
send.accessCount = 10;
|
|
send.revisionDate = new Date("2022-01-31T12:00:00.000Z");
|
|
send.expirationDate = new Date("2022-01-31T12:00:00.000Z");
|
|
send.deletionDate = new Date("2022-01-31T12:00:00.000Z");
|
|
send.password = "password";
|
|
send.disabled = false;
|
|
send.hideEmail = true;
|
|
|
|
const encryptService = mock<EncryptService>();
|
|
const cryptoService = mock<CryptoService>();
|
|
encryptService.decryptToBytes
|
|
.calledWith(send.key, userKey)
|
|
.mockResolvedValue(makeStaticByteArray(32));
|
|
cryptoService.makeSendKey.mockResolvedValue("cryptoKey" as any);
|
|
cryptoService.getUserKey.mockResolvedValue(userKey);
|
|
|
|
(window as any).bitwardenContainerService = new ContainerService(cryptoService, encryptService);
|
|
|
|
const view = await send.decrypt();
|
|
|
|
expect(text.decrypt).toHaveBeenNthCalledWith(1, "cryptoKey");
|
|
expect(send.name.decrypt).toHaveBeenNthCalledWith(1, null, "cryptoKey");
|
|
|
|
expect(view).toMatchObject({
|
|
id: "id",
|
|
accessId: "accessId",
|
|
name: "name",
|
|
notes: "notes",
|
|
type: 0,
|
|
key: expect.anything(),
|
|
cryptoKey: "cryptoKey",
|
|
file: expect.anything(),
|
|
text: "textView",
|
|
maxAccessCount: undefined,
|
|
accessCount: 10,
|
|
revisionDate: new Date("2022-01-31T12:00:00.000Z"),
|
|
expirationDate: new Date("2022-01-31T12:00:00.000Z"),
|
|
deletionDate: new Date("2022-01-31T12:00:00.000Z"),
|
|
password: "password",
|
|
disabled: false,
|
|
hideEmail: true,
|
|
});
|
|
});
|
|
});
|