mirror of
https://github.com/bitwarden/jslib
synced 2025-12-06 00:03:29 +00:00
Rename FolderView to FolderDecrypted
This commit is contained in:
@@ -25,7 +25,7 @@ import { Cipher } from "jslib-common/models/domain/cipher";
|
|||||||
import { CardView } from "jslib-common/models/view/cardView";
|
import { CardView } from "jslib-common/models/view/cardView";
|
||||||
import { CipherView } from "jslib-common/models/view/cipherView";
|
import { CipherView } from "jslib-common/models/view/cipherView";
|
||||||
import { CollectionView } from "jslib-common/models/view/collectionView";
|
import { CollectionView } from "jslib-common/models/view/collectionView";
|
||||||
import { FolderView } from "jslib-common/models/view/folderView";
|
import { FolderDecrypted } from "jslib-common/models/view/folderDecrypted";
|
||||||
import { IdentityView } from "jslib-common/models/view/identityView";
|
import { IdentityView } from "jslib-common/models/view/identityView";
|
||||||
import { LoginUriView } from "jslib-common/models/view/loginUriView";
|
import { LoginUriView } from "jslib-common/models/view/loginUriView";
|
||||||
import { LoginView } from "jslib-common/models/view/loginView";
|
import { LoginView } from "jslib-common/models/view/loginView";
|
||||||
@@ -51,7 +51,7 @@ export class AddEditComponent implements OnInit {
|
|||||||
|
|
||||||
editMode = false;
|
editMode = false;
|
||||||
cipher: CipherView;
|
cipher: CipherView;
|
||||||
folders: FolderView[];
|
folders: FolderDecrypted[];
|
||||||
collections: CollectionView[] = [];
|
collections: CollectionView[] = [];
|
||||||
title: string;
|
title: string;
|
||||||
formPromise: Promise<any>;
|
formPromise: Promise<any>;
|
||||||
|
|||||||
@@ -5,16 +5,16 @@ 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";
|
||||||
import { PlatformUtilsService } from "jslib-common/abstractions/platformUtils.service";
|
import { PlatformUtilsService } from "jslib-common/abstractions/platformUtils.service";
|
||||||
import { FolderView } from "jslib-common/models/view/folderView";
|
import { FolderDecrypted } from "jslib-common/models/view/folderDecrypted";
|
||||||
|
|
||||||
@Directive()
|
@Directive()
|
||||||
export class FolderAddEditComponent implements OnInit {
|
export class FolderAddEditComponent implements OnInit {
|
||||||
@Input() folderId: string;
|
@Input() folderId: string;
|
||||||
@Output() onSavedFolder = new EventEmitter<FolderView>();
|
@Output() onSavedFolder = new EventEmitter<FolderDecrypted>();
|
||||||
@Output() onDeletedFolder = new EventEmitter<FolderView>();
|
@Output() onDeletedFolder = new EventEmitter<FolderDecrypted>();
|
||||||
|
|
||||||
editMode = false;
|
editMode = false;
|
||||||
folder: FolderView = new FolderView();
|
folder: FolderDecrypted = new FolderDecrypted();
|
||||||
title: string;
|
title: string;
|
||||||
formPromise: Promise<any>;
|
formPromise: Promise<any>;
|
||||||
deletePromise: Promise<any>;
|
deletePromise: Promise<any>;
|
||||||
@@ -90,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 FolderView.fromFolder(this.cryptoService, folder);
|
this.folder = await FolderDecrypted.fromFolder(this.cryptoService, folder);
|
||||||
} else {
|
} else {
|
||||||
this.title = this.i18nService.t("addFolder");
|
this.title = this.i18nService.t("addFolder");
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ import { StateService } from "jslib-common/abstractions/state.service";
|
|||||||
import { CipherType } from "jslib-common/enums/cipherType";
|
import { CipherType } from "jslib-common/enums/cipherType";
|
||||||
import { TreeNode } from "jslib-common/models/domain/treeNode";
|
import { TreeNode } from "jslib-common/models/domain/treeNode";
|
||||||
import { CollectionView } from "jslib-common/models/view/collectionView";
|
import { CollectionView } from "jslib-common/models/view/collectionView";
|
||||||
import { FolderView } from "jslib-common/models/view/folderView";
|
import { FolderDecrypted } from "jslib-common/models/view/folderDecrypted";
|
||||||
|
|
||||||
@Directive()
|
@Directive()
|
||||||
export class GroupingsComponent {
|
export class GroupingsComponent {
|
||||||
@@ -19,13 +19,13 @@ export class GroupingsComponent {
|
|||||||
@Output() onFavoritesClicked = new EventEmitter();
|
@Output() onFavoritesClicked = new EventEmitter();
|
||||||
@Output() onTrashClicked = new EventEmitter();
|
@Output() onTrashClicked = new EventEmitter();
|
||||||
@Output() onCipherTypeClicked = new EventEmitter<CipherType>();
|
@Output() onCipherTypeClicked = new EventEmitter<CipherType>();
|
||||||
@Output() onFolderClicked = new EventEmitter<FolderView>();
|
@Output() onFolderClicked = new EventEmitter<FolderDecrypted>();
|
||||||
@Output() onAddFolder = new EventEmitter();
|
@Output() onAddFolder = new EventEmitter();
|
||||||
@Output() onEditFolder = new EventEmitter<FolderView>();
|
@Output() onEditFolder = new EventEmitter<FolderDecrypted>();
|
||||||
@Output() onCollectionClicked = new EventEmitter<CollectionView>();
|
@Output() onCollectionClicked = new EventEmitter<CollectionView>();
|
||||||
|
|
||||||
folders: FolderView[];
|
folders: FolderDecrypted[];
|
||||||
nestedFolders: TreeNode<FolderView>[];
|
nestedFolders: TreeNode<FolderDecrypted>[];
|
||||||
collections: CollectionView[];
|
collections: CollectionView[];
|
||||||
nestedCollections: TreeNode<CollectionView>[];
|
nestedCollections: TreeNode<CollectionView>[];
|
||||||
loaded = false;
|
loaded = false;
|
||||||
@@ -107,7 +107,7 @@ export class GroupingsComponent {
|
|||||||
this.onCipherTypeClicked.emit(type);
|
this.onCipherTypeClicked.emit(type);
|
||||||
}
|
}
|
||||||
|
|
||||||
selectFolder(folder: FolderView) {
|
selectFolder(folder: FolderDecrypted) {
|
||||||
this.clearSelections();
|
this.clearSelections();
|
||||||
this.selectedFolder = true;
|
this.selectedFolder = true;
|
||||||
this.selectedFolderId = folder.id;
|
this.selectedFolderId = folder.id;
|
||||||
@@ -118,7 +118,7 @@ export class GroupingsComponent {
|
|||||||
this.onAddFolder.emit();
|
this.onAddFolder.emit();
|
||||||
}
|
}
|
||||||
|
|
||||||
editFolder(folder: FolderView) {
|
editFolder(folder: FolderDecrypted) {
|
||||||
this.onEditFolder.emit(folder);
|
this.onEditFolder.emit(folder);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -138,7 +138,7 @@ export class GroupingsComponent {
|
|||||||
this.selectedCollectionId = null;
|
this.selectedCollectionId = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
async collapse(grouping: FolderView | CollectionView, idPrefix = "") {
|
async collapse(grouping: FolderDecrypted | CollectionView, idPrefix = "") {
|
||||||
if (grouping.id == null) {
|
if (grouping.id == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -151,7 +151,7 @@ export class GroupingsComponent {
|
|||||||
await this.stateService.setCollapsedGroupings(Array.from(this.collapsedGroupings));
|
await this.stateService.setCollapsedGroupings(Array.from(this.collapsedGroupings));
|
||||||
}
|
}
|
||||||
|
|
||||||
isCollapsed(grouping: FolderView | CollectionView, idPrefix = "") {
|
isCollapsed(grouping: FolderDecrypted | CollectionView, idPrefix = "") {
|
||||||
return this.collapsedGroupings.has(idPrefix + grouping.id);
|
return this.collapsedGroupings.has(idPrefix + grouping.id);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ import Substitute from "@fluffy-spoon/substitute";
|
|||||||
import { CryptoService } from "jslib-common/abstractions/crypto.service";
|
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 { Folder } from "jslib-common/models/domain/folder";
|
||||||
import { FolderView } from "jslib-common/models/view/folderView";
|
import { FolderDecrypted } from "jslib-common/models/view/folderDecrypted";
|
||||||
|
|
||||||
import { mockEnc } from "../utils";
|
import { mockEnc } from "../utils";
|
||||||
|
|
||||||
@@ -31,7 +31,7 @@ describe("Folder", () => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
const cryptoService = Substitute.for<CryptoService>();
|
const cryptoService = Substitute.for<CryptoService>();
|
||||||
const view = await FolderView.fromFolder(cryptoService, folder);
|
const view = await FolderDecrypted.fromFolder(cryptoService, folder);
|
||||||
|
|
||||||
expect(view).toEqual({
|
expect(view).toEqual({
|
||||||
id: "id",
|
id: "id",
|
||||||
|
|||||||
@@ -1,15 +1,15 @@
|
|||||||
import { FolderData } from "../models/data/folderData";
|
import { FolderData } from "../models/data/folderData";
|
||||||
import { Folder } from "../models/domain/folder";
|
import { Folder } from "../models/domain/folder";
|
||||||
import { TreeNode } from "../models/domain/treeNode";
|
import { TreeNode } from "../models/domain/treeNode";
|
||||||
import { FolderView } from "../models/view/folderView";
|
import { FolderDecrypted } from "../models/view/folderDecrypted";
|
||||||
|
|
||||||
export abstract class FolderService {
|
export abstract class FolderService {
|
||||||
clearCache: (userId?: string) => Promise<void>;
|
clearCache: (userId?: string) => Promise<void>;
|
||||||
get: (id: string) => Promise<Folder>;
|
get: (id: string) => Promise<Folder>;
|
||||||
getAll: () => Promise<Folder[]>;
|
getAll: () => Promise<Folder[]>;
|
||||||
getAllDecrypted: () => Promise<FolderView[]>;
|
getAllDecrypted: () => Promise<FolderDecrypted[]>;
|
||||||
getAllNested: () => Promise<TreeNode<FolderView>[]>;
|
getAllNested: () => Promise<TreeNode<FolderDecrypted>[]>;
|
||||||
getNested: (id: string) => Promise<TreeNode<FolderView>>;
|
getNested: (id: string) => Promise<TreeNode<FolderDecrypted>>;
|
||||||
saveWithServer: (folder: Folder) => Promise<any>;
|
saveWithServer: (folder: Folder) => Promise<any>;
|
||||||
upsert: (folder: FolderData) => Promise<any>;
|
upsert: (folder: FolderData) => Promise<any>;
|
||||||
replace: (folders: { [id: string]: FolderData }) => Promise<any>;
|
replace: (folders: { [id: string]: FolderData }) => Promise<any>;
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ import { SymmetricCryptoKey } from "../models/domain/symmetricCryptoKey";
|
|||||||
import { WindowState } from "../models/domain/windowState";
|
import { WindowState } from "../models/domain/windowState";
|
||||||
import { CipherView } from "../models/view/cipherView";
|
import { CipherView } from "../models/view/cipherView";
|
||||||
import { CollectionView } from "../models/view/collectionView";
|
import { CollectionView } from "../models/view/collectionView";
|
||||||
import { FolderView } from "../models/view/folderView";
|
import { FolderDecrypted } from "../models/view/folderDecrypted";
|
||||||
import { SendView } from "../models/view/sendView";
|
import { SendView } from "../models/view/sendView";
|
||||||
|
|
||||||
export abstract class StateService<T extends Account = Account> {
|
export abstract class StateService<T extends Account = Account> {
|
||||||
@@ -84,8 +84,8 @@ export abstract class StateService<T extends Account = Account> {
|
|||||||
value: SymmetricCryptoKey,
|
value: SymmetricCryptoKey,
|
||||||
options?: StorageOptions
|
options?: StorageOptions
|
||||||
) => Promise<void>;
|
) => Promise<void>;
|
||||||
getDecryptedFolders: (options?: StorageOptions) => Promise<FolderView[]>;
|
getDecryptedFolders: (options?: StorageOptions) => Promise<FolderDecrypted[]>;
|
||||||
setDecryptedFolders: (value: FolderView[], options?: StorageOptions) => Promise<void>;
|
setDecryptedFolders: (value: FolderDecrypted[], options?: StorageOptions) => Promise<void>;
|
||||||
getDecryptedOrganizationKeys: (
|
getDecryptedOrganizationKeys: (
|
||||||
options?: StorageOptions
|
options?: StorageOptions
|
||||||
) => Promise<Map<string, SymmetricCryptoKey>>;
|
) => Promise<Map<string, SymmetricCryptoKey>>;
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ import { ImportResult } from "../models/domain/importResult";
|
|||||||
import { CipherView } from "../models/view/cipherView";
|
import { CipherView } from "../models/view/cipherView";
|
||||||
import { CollectionView } from "../models/view/collectionView";
|
import { CollectionView } from "../models/view/collectionView";
|
||||||
import { FieldView } from "../models/view/fieldView";
|
import { FieldView } from "../models/view/fieldView";
|
||||||
import { FolderView } from "../models/view/folderView";
|
import { FolderDecrypted } from "../models/view/folderDecrypted";
|
||||||
import { LoginUriView } from "../models/view/loginUriView";
|
import { LoginUriView } from "../models/view/loginUriView";
|
||||||
import { LoginView } from "../models/view/loginView";
|
import { LoginView } from "../models/view/loginView";
|
||||||
import { SecureNoteView } from "../models/view/secureNoteView";
|
import { SecureNoteView } from "../models/view/secureNoteView";
|
||||||
@@ -425,7 +425,7 @@ export abstract class BaseImporter {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (addFolder) {
|
if (addFolder) {
|
||||||
const f = new FolderView();
|
const f = new FolderDecrypted();
|
||||||
f.name = folderName;
|
f.name = folderName;
|
||||||
result.folders.push(f);
|
result.folders.push(f);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { FolderView } from "jslib-common/models/view/folderView";
|
import { FolderDecrypted } from "jslib-common/models/view/folderDecrypted";
|
||||||
|
|
||||||
import { CryptoService } from "../abstractions/crypto.service";
|
import { CryptoService } from "../abstractions/crypto.service";
|
||||||
import { I18nService } from "../abstractions/i18n.service";
|
import { I18nService } from "../abstractions/i18n.service";
|
||||||
@@ -76,7 +76,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 FolderView.fromFolder(this.cryptoService, folder);
|
const view = await FolderDecrypted.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);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ import { FieldType } from "../enums/fieldType";
|
|||||||
import { ImportResult } from "../models/domain/importResult";
|
import { ImportResult } from "../models/domain/importResult";
|
||||||
import { CardView } from "../models/view/cardView";
|
import { CardView } from "../models/view/cardView";
|
||||||
import { CipherView } from "../models/view/cipherView";
|
import { CipherView } from "../models/view/cipherView";
|
||||||
import { FolderView } from "../models/view/folderView";
|
import { FolderDecrypted } from "../models/view/folderDecrypted";
|
||||||
|
|
||||||
import { BaseImporter } from "./baseImporter";
|
import { BaseImporter } from "./baseImporter";
|
||||||
import { Importer } from "./importer";
|
import { Importer } from "./importer";
|
||||||
@@ -23,7 +23,7 @@ export class EnpassJsonImporter extends BaseImporter implements Importer {
|
|||||||
this.flattenFolderTree(null, folderTree, foldersMap);
|
this.flattenFolderTree(null, folderTree, foldersMap);
|
||||||
foldersMap.forEach((val, key) => {
|
foldersMap.forEach((val, key) => {
|
||||||
foldersIndexMap.set(key, result.folders.length);
|
foldersIndexMap.set(key, result.folders.length);
|
||||||
const f = new FolderView();
|
const f = new FolderDecrypted();
|
||||||
f.name = val;
|
f.name = val;
|
||||||
result.folders.push(f);
|
result.folders.push(f);
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import { FieldType } from "../enums/fieldType";
|
import { FieldType } from "../enums/fieldType";
|
||||||
import { ImportResult } from "../models/domain/importResult";
|
import { ImportResult } from "../models/domain/importResult";
|
||||||
import { FolderView } from "../models/view/folderView";
|
import { FolderDecrypted } from "../models/view/folderDecrypted";
|
||||||
|
|
||||||
import { BaseImporter } from "./baseImporter";
|
import { BaseImporter } from "./baseImporter";
|
||||||
import { Importer } from "./importer";
|
import { Importer } from "./importer";
|
||||||
@@ -42,7 +42,7 @@ export class KeePass2XmlImporter extends BaseImporter implements Importer {
|
|||||||
}
|
}
|
||||||
const nameEl = this.querySelectorDirectChild(node, "Name");
|
const nameEl = this.querySelectorDirectChild(node, "Name");
|
||||||
groupName += nameEl == null ? "-" : nameEl.textContent;
|
groupName += nameEl == null ? "-" : nameEl.textContent;
|
||||||
const folder = new FolderView();
|
const folder = new FolderDecrypted();
|
||||||
folder.name = groupName;
|
folder.name = groupName;
|
||||||
this.result.folders.push(folder);
|
this.result.folders.push(folder);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ import { SecureNoteType } from "../enums/secureNoteType";
|
|||||||
import { ImportResult } from "../models/domain/importResult";
|
import { ImportResult } from "../models/domain/importResult";
|
||||||
import { CardView } from "../models/view/cardView";
|
import { CardView } from "../models/view/cardView";
|
||||||
import { CipherView } from "../models/view/cipherView";
|
import { CipherView } from "../models/view/cipherView";
|
||||||
import { FolderView } from "../models/view/folderView";
|
import { FolderDecrypted } from "../models/view/folderDecrypted";
|
||||||
import { IdentityView } from "../models/view/identityView";
|
import { IdentityView } from "../models/view/identityView";
|
||||||
import { LoginView } from "../models/view/loginView";
|
import { LoginView } from "../models/view/loginView";
|
||||||
import { SecureNoteView } from "../models/view/secureNoteView";
|
import { SecureNoteView } from "../models/view/secureNoteView";
|
||||||
@@ -70,7 +70,7 @@ export class LastPassCsvImporter extends BaseImporter implements Importer {
|
|||||||
result.ciphers.push(cipher);
|
result.ciphers.push(cipher);
|
||||||
|
|
||||||
if (addFolder) {
|
if (addFolder) {
|
||||||
const f = new FolderView();
|
const f = new FolderDecrypted();
|
||||||
f.name = grouping;
|
f.name = grouping;
|
||||||
result.folders.push(f);
|
result.folders.push(f);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import { CipherType } from "../enums/cipherType";
|
import { CipherType } from "../enums/cipherType";
|
||||||
import { ImportResult } from "../models/domain/importResult";
|
import { ImportResult } from "../models/domain/importResult";
|
||||||
import { CardView } from "../models/view/cardView";
|
import { CardView } from "../models/view/cardView";
|
||||||
import { FolderView } from "../models/view/folderView";
|
import { FolderDecrypted } from "../models/view/folderDecrypted";
|
||||||
|
|
||||||
import { BaseImporter } from "./baseImporter";
|
import { BaseImporter } from "./baseImporter";
|
||||||
import { Importer } from "./importer";
|
import { Importer } from "./importer";
|
||||||
@@ -22,7 +22,7 @@ export class PasswordBossJsonImporter extends BaseImporter implements Importer {
|
|||||||
const foldersIndexMap = new Map<string, number>();
|
const foldersIndexMap = new Map<string, number>();
|
||||||
foldersMap.forEach((val, key) => {
|
foldersMap.forEach((val, key) => {
|
||||||
foldersIndexMap.set(key, result.folders.length);
|
foldersIndexMap.set(key, result.folders.length);
|
||||||
const f = new FolderView();
|
const f = new FolderDecrypted();
|
||||||
f.name = val;
|
f.name = val;
|
||||||
result.folders.push(f);
|
result.folders.push(f);
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ import { SecureNoteType } from "../enums/secureNoteType";
|
|||||||
import { ImportResult } from "../models/domain/importResult";
|
import { ImportResult } from "../models/domain/importResult";
|
||||||
import { CipherView } from "../models/view/cipherView";
|
import { CipherView } from "../models/view/cipherView";
|
||||||
import { FieldView } from "../models/view/fieldView";
|
import { FieldView } from "../models/view/fieldView";
|
||||||
import { FolderView } from "../models/view/folderView";
|
import { FolderDecrypted } from "../models/view/folderDecrypted";
|
||||||
import { SecureNoteView } from "../models/view/secureNoteView";
|
import { SecureNoteView } from "../models/view/secureNoteView";
|
||||||
|
|
||||||
import { BaseImporter } from "./baseImporter";
|
import { BaseImporter } from "./baseImporter";
|
||||||
@@ -33,7 +33,7 @@ export class SafeInCloudXmlImporter extends BaseImporter implements Importer {
|
|||||||
const id = labelEl.getAttribute("id");
|
const id = labelEl.getAttribute("id");
|
||||||
if (!this.isNullOrWhitespace(name) && !this.isNullOrWhitespace(id)) {
|
if (!this.isNullOrWhitespace(name) && !this.isNullOrWhitespace(id)) {
|
||||||
foldersMap.set(id, result.folders.length);
|
foldersMap.set(id, result.folders.length);
|
||||||
const folder = new FolderView();
|
const folder = new FolderDecrypted();
|
||||||
folder.name = name;
|
folder.name = name;
|
||||||
result.folders.push(folder);
|
result.folders.push(folder);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ import { ProviderData } from "../data/providerData";
|
|||||||
import { SendData } from "../data/sendData";
|
import { SendData } from "../data/sendData";
|
||||||
import { CipherView } from "../view/cipherView";
|
import { CipherView } from "../view/cipherView";
|
||||||
import { CollectionView } from "../view/collectionView";
|
import { CollectionView } from "../view/collectionView";
|
||||||
import { FolderView } from "../view/folderView";
|
import { FolderDecrypted } from "../view/folderDecrypted";
|
||||||
import { SendView } from "../view/sendView";
|
import { SendView } from "../view/sendView";
|
||||||
|
|
||||||
import { EncString } from "./encString";
|
import { EncString } from "./encString";
|
||||||
@@ -35,9 +35,9 @@ export class AccountData {
|
|||||||
CipherData,
|
CipherData,
|
||||||
CipherView
|
CipherView
|
||||||
>();
|
>();
|
||||||
folders?: DataEncryptionPair<FolderData, FolderView> = new DataEncryptionPair<
|
folders?: DataEncryptionPair<FolderData, FolderDecrypted> = new DataEncryptionPair<
|
||||||
FolderData,
|
FolderData,
|
||||||
FolderView
|
FolderDecrypted
|
||||||
>();
|
>();
|
||||||
localData?: any;
|
localData?: any;
|
||||||
sends?: DataEncryptionPair<SendData, SendView> = new DataEncryptionPair<SendData, SendView>();
|
sends?: DataEncryptionPair<SendData, SendView> = new DataEncryptionPair<SendData, SendView>();
|
||||||
|
|||||||
@@ -1,13 +1,13 @@
|
|||||||
import { CipherView } from "../view/cipherView";
|
import { CipherView } from "../view/cipherView";
|
||||||
import { CollectionView } from "../view/collectionView";
|
import { CollectionView } from "../view/collectionView";
|
||||||
import { FolderView } from "../view/folderView";
|
import { FolderDecrypted } from "../view/folderDecrypted";
|
||||||
|
|
||||||
export class ImportResult {
|
export class ImportResult {
|
||||||
success = false;
|
success = false;
|
||||||
missingPassword = false;
|
missingPassword = false;
|
||||||
errorMessage: string;
|
errorMessage: string;
|
||||||
ciphers: CipherView[] = [];
|
ciphers: CipherView[] = [];
|
||||||
folders: FolderView[] = [];
|
folders: FolderDecrypted[] = [];
|
||||||
folderRelationships: [number, number][] = [];
|
folderRelationships: [number, number][] = [];
|
||||||
collections: CollectionView[] = [];
|
collections: CollectionView[] = [];
|
||||||
collectionRelationships: [number, number][] = [];
|
collectionRelationships: [number, number][] = [];
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import { EncString } from "../domain/encString";
|
import { EncString } from "../domain/encString";
|
||||||
import { Folder as FolderDomain } from "../domain/folder";
|
import { Folder as FolderDomain } from "../domain/folder";
|
||||||
import { FolderView } from "../view/folderView";
|
import { FolderDecrypted } from "../view/folderDecrypted";
|
||||||
|
|
||||||
export class FolderExport {
|
export class FolderExport {
|
||||||
static template(): FolderExport {
|
static template(): FolderExport {
|
||||||
@@ -9,7 +9,7 @@ export class FolderExport {
|
|||||||
return req;
|
return req;
|
||||||
}
|
}
|
||||||
|
|
||||||
static toView(req: FolderExport, view = new FolderView()) {
|
static toView(req: FolderExport, view = new FolderDecrypted()) {
|
||||||
view.name = req.name;
|
view.name = req.name;
|
||||||
return view;
|
return view;
|
||||||
}
|
}
|
||||||
@@ -22,8 +22,8 @@ export class FolderExport {
|
|||||||
name: string;
|
name: string;
|
||||||
|
|
||||||
// Use build method instead of ctor so that we can control order of JSON stringify for pretty print
|
// Use build method instead of ctor so that we can control order of JSON stringify for pretty print
|
||||||
build(o: FolderView | FolderDomain) {
|
build(o: FolderDecrypted | FolderDomain) {
|
||||||
if (o instanceof FolderView) {
|
if (o instanceof FolderDecrypted) {
|
||||||
this.name = o.name;
|
this.name = o.name;
|
||||||
} else {
|
} else {
|
||||||
this.name = o.name?.encryptedString;
|
this.name = o.name?.encryptedString;
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import { Folder as FolderDomain } from "../domain/folder";
|
import { Folder as FolderDomain } from "../domain/folder";
|
||||||
import { FolderView } from "../view/folderView";
|
import { FolderDecrypted } from "../view/folderDecrypted";
|
||||||
|
|
||||||
import { FolderExport } from "./folderExport";
|
import { FolderExport } from "./folderExport";
|
||||||
|
|
||||||
@@ -7,7 +7,7 @@ export class FolderWithIdExport extends FolderExport {
|
|||||||
id: string;
|
id: string;
|
||||||
|
|
||||||
// Use build method instead of ctor so that we can control order of JSON stringify for pretty print
|
// Use build method instead of ctor so that we can control order of JSON stringify for pretty print
|
||||||
build(o: FolderView | FolderDomain) {
|
build(o: FolderDecrypted | FolderDomain) {
|
||||||
this.id = o.id;
|
this.id = o.id;
|
||||||
super.build(o);
|
super.build(o);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ import { CryptoService } from "jslib-common/abstractions/crypto.service";
|
|||||||
import { Folder } from "../domain/folder";
|
import { Folder } from "../domain/folder";
|
||||||
import { ITreeNodeObject } from "../domain/treeNode";
|
import { ITreeNodeObject } from "../domain/treeNode";
|
||||||
|
|
||||||
export class FolderView implements ITreeNodeObject {
|
export class FolderDecrypted implements ITreeNodeObject {
|
||||||
id: string = null;
|
id: string = null;
|
||||||
name: string = null;
|
name: string = null;
|
||||||
revisionDate: Date = null;
|
revisionDate: Date = null;
|
||||||
@@ -16,8 +16,8 @@ export class FolderView implements ITreeNodeObject {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
static async fromFolder(cryptoService: CryptoService, folder: Folder): Promise<FolderView> {
|
static async fromFolder(cryptoService: CryptoService, folder: Folder): Promise<FolderDecrypted> {
|
||||||
const view = new FolderView();
|
const view = new FolderDecrypted();
|
||||||
view.id = folder.id;
|
view.id = folder.id;
|
||||||
view.name = await folder.name.decryptWithCryptoService(cryptoService);
|
view.name = await folder.name.decryptWithCryptoService(cryptoService);
|
||||||
view.revisionDate = folder.revisionDate;
|
view.revisionDate = folder.revisionDate;
|
||||||
@@ -25,7 +25,7 @@ import { CollectionDetailsResponse } from "../models/response/collectionResponse
|
|||||||
import { CipherView } from "../models/view/cipherView";
|
import { CipherView } from "../models/view/cipherView";
|
||||||
import { CollectionView } from "../models/view/collectionView";
|
import { CollectionView } from "../models/view/collectionView";
|
||||||
import { EventView } from "../models/view/eventView";
|
import { EventView } from "../models/view/eventView";
|
||||||
import { FolderView } from "../models/view/folderView";
|
import { FolderDecrypted } from "../models/view/folderDecrypted";
|
||||||
|
|
||||||
export class ExportService implements ExportServiceAbstraction {
|
export class ExportService implements ExportServiceAbstraction {
|
||||||
constructor(
|
constructor(
|
||||||
@@ -110,7 +110,7 @@ export class ExportService implements ExportServiceAbstraction {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private async getDecryptedExport(format: "json" | "csv"): Promise<string> {
|
private async getDecryptedExport(format: "json" | "csv"): Promise<string> {
|
||||||
let decFolders: FolderView[] = [];
|
let decFolders: FolderDecrypted[] = [];
|
||||||
let decCiphers: CipherView[] = [];
|
let decCiphers: CipherView[] = [];
|
||||||
const promises = [];
|
const promises = [];
|
||||||
|
|
||||||
@@ -129,7 +129,7 @@ export class ExportService implements ExportServiceAbstraction {
|
|||||||
await Promise.all(promises);
|
await Promise.all(promises);
|
||||||
|
|
||||||
if (format === "csv") {
|
if (format === "csv") {
|
||||||
const foldersMap = new Map<string, FolderView>();
|
const foldersMap = new Map<string, FolderDecrypted>();
|
||||||
decFolders.forEach((f) => {
|
decFolders.forEach((f) => {
|
||||||
if (f.id != null) {
|
if (f.id != null) {
|
||||||
foldersMap.set(f.id, f);
|
foldersMap.set(f.id, f);
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ import { Folder } from "../models/domain/folder";
|
|||||||
import { TreeNode } from "../models/domain/treeNode";
|
import { TreeNode } from "../models/domain/treeNode";
|
||||||
import { FolderRequest } from "../models/request/folderRequest";
|
import { FolderRequest } from "../models/request/folderRequest";
|
||||||
import { FolderResponse } from "../models/response/folderResponse";
|
import { FolderResponse } from "../models/response/folderResponse";
|
||||||
import { FolderView } from "../models/view/folderView";
|
import { FolderDecrypted } from "../models/view/folderDecrypted";
|
||||||
|
|
||||||
const NestingDelimiter = "/";
|
const NestingDelimiter = "/";
|
||||||
|
|
||||||
@@ -41,7 +41,7 @@ export class FolderService implements FolderServiceAbstraction {
|
|||||||
return Object.values(folders).map((f) => f.toFolder());
|
return Object.values(folders).map((f) => f.toFolder());
|
||||||
}
|
}
|
||||||
|
|
||||||
async getAllDecrypted(): Promise<FolderView[]> {
|
async getAllDecrypted(): Promise<FolderDecrypted[]> {
|
||||||
const decryptedFolders = await this.stateService.getDecryptedFolders();
|
const decryptedFolders = await this.stateService.getDecryptedFolders();
|
||||||
if (decryptedFolders != null) {
|
if (decryptedFolders != null) {
|
||||||
return decryptedFolders;
|
return decryptedFolders;
|
||||||
@@ -52,19 +52,19 @@ export class FolderService implements FolderServiceAbstraction {
|
|||||||
throw new Error("No key.");
|
throw new Error("No key.");
|
||||||
}
|
}
|
||||||
|
|
||||||
const decFolders: FolderView[] = [];
|
const decFolders: FolderDecrypted[] = [];
|
||||||
const promises: Promise<any>[] = [];
|
const promises: Promise<any>[] = [];
|
||||||
const folders = await this.getAll();
|
const folders = await this.getAll();
|
||||||
folders.forEach((folder) => {
|
folders.forEach((folder) => {
|
||||||
promises.push(
|
promises.push(
|
||||||
FolderView.fromFolder(this.cryptoService, folder).then((f) => decFolders.push(f))
|
FolderDecrypted.fromFolder(this.cryptoService, folder).then((f) => decFolders.push(f))
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
await Promise.all(promises);
|
await Promise.all(promises);
|
||||||
decFolders.sort(Utils.getSortFunction(this.i18nService, "name"));
|
decFolders.sort(Utils.getSortFunction(this.i18nService, "name"));
|
||||||
|
|
||||||
const noneFolder = new FolderView();
|
const noneFolder = new FolderDecrypted();
|
||||||
noneFolder.name = this.i18nService.t("noneFolder");
|
noneFolder.name = this.i18nService.t("noneFolder");
|
||||||
decFolders.push(noneFolder);
|
decFolders.push(noneFolder);
|
||||||
|
|
||||||
@@ -72,11 +72,11 @@ export class FolderService implements FolderServiceAbstraction {
|
|||||||
return decFolders;
|
return decFolders;
|
||||||
}
|
}
|
||||||
|
|
||||||
async getAllNested(): Promise<TreeNode<FolderView>[]> {
|
async getAllNested(): Promise<TreeNode<FolderDecrypted>[]> {
|
||||||
const folders = await this.getAllDecrypted();
|
const folders = await this.getAllDecrypted();
|
||||||
const nodes: TreeNode<FolderView>[] = [];
|
const nodes: TreeNode<FolderDecrypted>[] = [];
|
||||||
folders.forEach((f) => {
|
folders.forEach((f) => {
|
||||||
const folderCopy = new FolderView();
|
const folderCopy = new FolderDecrypted();
|
||||||
folderCopy.id = f.id;
|
folderCopy.id = f.id;
|
||||||
folderCopy.revisionDate = f.revisionDate;
|
folderCopy.revisionDate = f.revisionDate;
|
||||||
const parts = f.name != null ? f.name.replace(/^\/+|\/+$/g, "").split(NestingDelimiter) : [];
|
const parts = f.name != null ? f.name.replace(/^\/+|\/+$/g, "").split(NestingDelimiter) : [];
|
||||||
@@ -85,9 +85,9 @@ export class FolderService implements FolderServiceAbstraction {
|
|||||||
return nodes;
|
return nodes;
|
||||||
}
|
}
|
||||||
|
|
||||||
async getNested(id: string): Promise<TreeNode<FolderView>> {
|
async getNested(id: string): Promise<TreeNode<FolderDecrypted>> {
|
||||||
const folders = await this.getAllNested();
|
const folders = await this.getAllNested();
|
||||||
return ServiceUtils.getTreeNodeObject(folders, id) as TreeNode<FolderView>;
|
return ServiceUtils.getTreeNodeObject(folders, id) as TreeNode<FolderDecrypted>;
|
||||||
}
|
}
|
||||||
|
|
||||||
async saveWithServer(folder: Folder): Promise<any> {
|
async saveWithServer(folder: Folder): Promise<any> {
|
||||||
|
|||||||
@@ -30,7 +30,7 @@ import { SymmetricCryptoKey } from "../models/domain/symmetricCryptoKey";
|
|||||||
import { WindowState } from "../models/domain/windowState";
|
import { WindowState } from "../models/domain/windowState";
|
||||||
import { CipherView } from "../models/view/cipherView";
|
import { CipherView } from "../models/view/cipherView";
|
||||||
import { CollectionView } from "../models/view/collectionView";
|
import { CollectionView } from "../models/view/collectionView";
|
||||||
import { FolderView } from "../models/view/folderView";
|
import { FolderDecrypted } from "../models/view/folderDecrypted";
|
||||||
import { SendView } from "../models/view/sendView";
|
import { SendView } from "../models/view/sendView";
|
||||||
|
|
||||||
const keys = {
|
const keys = {
|
||||||
@@ -562,12 +562,12 @@ export class StateService<
|
|||||||
await this.saveAccount(account, this.reconcileOptions(options, this.defaultInMemoryOptions));
|
await this.saveAccount(account, this.reconcileOptions(options, this.defaultInMemoryOptions));
|
||||||
}
|
}
|
||||||
|
|
||||||
async getDecryptedFolders(options?: StorageOptions): Promise<FolderView[]> {
|
async getDecryptedFolders(options?: StorageOptions): Promise<FolderDecrypted[]> {
|
||||||
return (await this.getAccount(this.reconcileOptions(options, this.defaultInMemoryOptions)))
|
return (await this.getAccount(this.reconcileOptions(options, this.defaultInMemoryOptions)))
|
||||||
?.data?.folders?.decrypted;
|
?.data?.folders?.decrypted;
|
||||||
}
|
}
|
||||||
|
|
||||||
async setDecryptedFolders(value: FolderView[], options?: StorageOptions): Promise<void> {
|
async setDecryptedFolders(value: FolderDecrypted[], options?: StorageOptions): Promise<void> {
|
||||||
const account = await this.getAccount(
|
const account = await this.getAccount(
|
||||||
this.reconcileOptions(options, this.defaultInMemoryOptions)
|
this.reconcileOptions(options, this.defaultInMemoryOptions)
|
||||||
);
|
);
|
||||||
|
|||||||
Reference in New Issue
Block a user