mirror of
https://github.com/bitwarden/jslib
synced 2025-12-18 09:13:19 +00:00
Move decrypt to FolderView
This commit is contained in:
@@ -1,5 +1,6 @@
|
|||||||
import { Directive, EventEmitter, Input, OnInit, Output } from "@angular/core";
|
import { Directive, EventEmitter, Input, OnInit, Output } from "@angular/core";
|
||||||
|
|
||||||
|
import { CryptoService } from "jslib-common/abstractions/crypto.service";
|
||||||
import { FolderService } from "jslib-common/abstractions/folder.service";
|
import { FolderService } from "jslib-common/abstractions/folder.service";
|
||||||
import { I18nService } from "jslib-common/abstractions/i18n.service";
|
import { I18nService } from "jslib-common/abstractions/i18n.service";
|
||||||
import { LogService } from "jslib-common/abstractions/log.service";
|
import { LogService } from "jslib-common/abstractions/log.service";
|
||||||
@@ -19,10 +20,11 @@ export class FolderAddEditComponent implements OnInit {
|
|||||||
deletePromise: Promise<any>;
|
deletePromise: Promise<any>;
|
||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
|
protected cryptoService: CryptoService,
|
||||||
protected folderService: FolderService,
|
protected folderService: FolderService,
|
||||||
protected i18nService: I18nService,
|
protected i18nService: I18nService,
|
||||||
protected platformUtilsService: PlatformUtilsService,
|
protected logService: LogService,
|
||||||
private logService: LogService
|
protected platformUtilsService: PlatformUtilsService
|
||||||
) {}
|
) {}
|
||||||
|
|
||||||
async ngOnInit() {
|
async ngOnInit() {
|
||||||
@@ -88,7 +90,7 @@ export class FolderAddEditComponent implements OnInit {
|
|||||||
this.editMode = true;
|
this.editMode = true;
|
||||||
this.title = this.i18nService.t("editFolder");
|
this.title = this.i18nService.t("editFolder");
|
||||||
const folder = await this.folderService.get(this.folderId);
|
const folder = await this.folderService.get(this.folderId);
|
||||||
this.folder = await this.folderService.decrypt(folder);
|
this.folder = await FolderView.fromFolder(this.cryptoService, folder);
|
||||||
} else {
|
} else {
|
||||||
this.title = this.i18nService.t("addFolder");
|
this.title = this.i18nService.t("addFolder");
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,11 @@
|
|||||||
|
import Substitute from "@fluffy-spoon/substitute";
|
||||||
|
|
||||||
|
import { CryptoService } from "jslib-common/abstractions/crypto.service";
|
||||||
import { FolderData } from "jslib-common/models/data/folderData";
|
import { FolderData } from "jslib-common/models/data/folderData";
|
||||||
|
import { Folder } from "jslib-common/models/domain/folder";
|
||||||
|
import { FolderView } from "jslib-common/models/view/folderView";
|
||||||
|
|
||||||
|
import { mockEnc } from "../utils";
|
||||||
|
|
||||||
describe("Folder", () => {
|
describe("Folder", () => {
|
||||||
it("Convert", () => {
|
it("Convert", () => {
|
||||||
@@ -15,4 +22,21 @@ describe("Folder", () => {
|
|||||||
revisionDate: new Date("2022-01-31T12:00:00.000Z"),
|
revisionDate: new Date("2022-01-31T12:00:00.000Z"),
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it("Decrypt", async () => {
|
||||||
|
const folder: Folder = {
|
||||||
|
id: "id",
|
||||||
|
name: mockEnc("encName"),
|
||||||
|
revisionDate: new Date("2022-01-31T12:00:00.000Z"),
|
||||||
|
};
|
||||||
|
|
||||||
|
const cryptoService = Substitute.for<CryptoService>();
|
||||||
|
const view = await FolderView.fromFolder(cryptoService, folder);
|
||||||
|
|
||||||
|
expect(view).toEqual({
|
||||||
|
id: "id",
|
||||||
|
name: "encName",
|
||||||
|
revisionDate: new Date("2022-01-31T12:00:00.000Z"),
|
||||||
|
});
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -111,20 +111,4 @@ describe("FolderService", () => {
|
|||||||
expect(folders).toHaveLength(0);
|
expect(folders).toHaveLength(0);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
it("Decrypt", async () => {
|
|
||||||
const folder: Folder = {
|
|
||||||
id: "id",
|
|
||||||
name: mockEnc("encName"),
|
|
||||||
revisionDate: new Date("2022-01-31T12:00:00.000Z"),
|
|
||||||
};
|
|
||||||
|
|
||||||
const view = await folderService.decrypt(folder);
|
|
||||||
|
|
||||||
expect(view).toEqual({
|
|
||||||
id: "id",
|
|
||||||
name: "encName",
|
|
||||||
revisionDate: new Date("2022-01-31T12:00:00.000Z"),
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -7,7 +7,6 @@ import { FolderView } from "../models/view/folderView";
|
|||||||
export abstract class FolderService {
|
export abstract class FolderService {
|
||||||
clearCache: (userId?: string) => Promise<void>;
|
clearCache: (userId?: string) => Promise<void>;
|
||||||
encrypt: (model: FolderView, key?: SymmetricCryptoKey) => Promise<Folder>;
|
encrypt: (model: FolderView, key?: SymmetricCryptoKey) => Promise<Folder>;
|
||||||
decrypt: (model: Folder, key?: SymmetricCryptoKey) => Promise<FolderView>;
|
|
||||||
get: (id: string) => Promise<Folder>;
|
get: (id: string) => Promise<Folder>;
|
||||||
getAll: () => Promise<Folder[]>;
|
getAll: () => Promise<Folder[]>;
|
||||||
getAllDecrypted: () => Promise<FolderView[]>;
|
getAllDecrypted: () => Promise<FolderView[]>;
|
||||||
|
|||||||
@@ -81,7 +81,7 @@ export class BitwardenJsonImporter extends BaseImporter implements Importer {
|
|||||||
const folder = FolderWithIdExport.toDomain(f);
|
const folder = FolderWithIdExport.toDomain(f);
|
||||||
if (folder != null) {
|
if (folder != null) {
|
||||||
folder.id = null;
|
folder.id = null;
|
||||||
const view = await this.folderService.decrypt(folder);
|
const view = await FolderView.fromFolder(this.cryptoService, folder);
|
||||||
groupingsMap.set(f.id, this.result.folders.length);
|
groupingsMap.set(f.id, this.result.folders.length);
|
||||||
this.result.folders.push(view);
|
this.result.folders.push(view);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -96,11 +96,10 @@ export class EncString {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @deprecated As of 2022-04-20, use {@link decryptWithCryptoService} instead
|
||||||
|
*/
|
||||||
async decrypt(orgId: string, key: SymmetricCryptoKey = null): Promise<string> {
|
async decrypt(orgId: string, key: SymmetricCryptoKey = null): Promise<string> {
|
||||||
if (this.decryptedValue != null) {
|
|
||||||
return this.decryptedValue;
|
|
||||||
}
|
|
||||||
|
|
||||||
let cryptoService: CryptoService;
|
let cryptoService: CryptoService;
|
||||||
const containerService = (Utils.global as any).bitwardenContainerService;
|
const containerService = (Utils.global as any).bitwardenContainerService;
|
||||||
if (containerService) {
|
if (containerService) {
|
||||||
@@ -109,8 +108,20 @@ export class EncString {
|
|||||||
throw new Error("global bitwardenContainerService not initialized.");
|
throw new Error("global bitwardenContainerService not initialized.");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return this.decryptWithCryptoService(cryptoService, orgId, key);
|
||||||
|
}
|
||||||
|
|
||||||
|
async decryptWithCryptoService(
|
||||||
|
cryptoService: CryptoService,
|
||||||
|
orgId?: string,
|
||||||
|
key: SymmetricCryptoKey = null
|
||||||
|
): Promise<string> {
|
||||||
|
if (this.decryptedValue != null) {
|
||||||
|
return this.decryptedValue;
|
||||||
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
if (key == null) {
|
if (orgId != null && key == null) {
|
||||||
key = await cryptoService.getOrgKey(orgId);
|
key = await cryptoService.getOrgKey(orgId);
|
||||||
}
|
}
|
||||||
this.decryptedValue = await cryptoService.decryptToUtf8(this, key);
|
this.decryptedValue = await cryptoService.decryptToUtf8(this, key);
|
||||||
|
|||||||
@@ -1,9 +1,24 @@
|
|||||||
|
import { CryptoService } from "jslib-common/abstractions/crypto.service";
|
||||||
|
|
||||||
|
import { Folder } from "../domain/folder";
|
||||||
|
import { SymmetricCryptoKey } from "../domain/symmetricCryptoKey";
|
||||||
import { ITreeNodeObject } from "../domain/treeNode";
|
import { ITreeNodeObject } from "../domain/treeNode";
|
||||||
|
|
||||||
import { View } from "./view";
|
export class FolderView implements ITreeNodeObject {
|
||||||
|
|
||||||
export class FolderView implements View, ITreeNodeObject {
|
|
||||||
id: string = null;
|
id: string = null;
|
||||||
name: string = null;
|
name: string = null;
|
||||||
revisionDate: Date = null;
|
revisionDate: Date = null;
|
||||||
|
|
||||||
|
static async fromFolder(
|
||||||
|
cryptoService: CryptoService,
|
||||||
|
folder: Folder,
|
||||||
|
key?: SymmetricCryptoKey
|
||||||
|
): Promise<FolderView> {
|
||||||
|
const view = new FolderView();
|
||||||
|
view.id = folder.id;
|
||||||
|
view.name = await folder.name.decryptWithCryptoService(cryptoService, null, key);
|
||||||
|
view.revisionDate = folder.revisionDate;
|
||||||
|
|
||||||
|
return view;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user