mirror of
https://github.com/bitwarden/browser
synced 2025-12-15 07:43:35 +00:00
[PS-2390] Passing folder and collection id on import (#4802)
* PS-2390 - Passing folder and collection id on import Reading groupingid from lastpass csv as collection or folder id * PS-2390 - Added toDomain and toModel on FolderWithIdExport model and created CollectionWithIdExport model * PS-2390 - renamed groupingid into bwcollectionid on lastpass importer * PS-2390 - Updated collection/folder-with-id export to reuse parent toDomain and toView * PS-2390 Undo the lastpass importer groupingId rename * PS-2390 Undo lastpass importer changes * PS-2390 - Removed externalId set. Cleaning collection-with-id-request to user parent properties * Lint prettier
This commit is contained in:
@@ -0,0 +1,14 @@
|
|||||||
|
import { Collection } from "../domain/collection";
|
||||||
|
import { CollectionRequest } from "../request/collection.request";
|
||||||
|
|
||||||
|
export class CollectionWithIdRequest extends CollectionRequest {
|
||||||
|
id: string;
|
||||||
|
|
||||||
|
constructor(collection?: Collection) {
|
||||||
|
if (collection == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
super(collection);
|
||||||
|
this.id = collection.id;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -6,6 +6,16 @@ import { CollectionExport } from "./collection.export";
|
|||||||
export class CollectionWithIdExport extends CollectionExport {
|
export class CollectionWithIdExport extends CollectionExport {
|
||||||
id: string;
|
id: string;
|
||||||
|
|
||||||
|
static toView(req: CollectionWithIdExport, view = new CollectionView()) {
|
||||||
|
view.id = req.id;
|
||||||
|
return super.toView(req, view);
|
||||||
|
}
|
||||||
|
|
||||||
|
static toDomain(req: CollectionWithIdExport, domain = new CollectionDomain()) {
|
||||||
|
domain.id = req.id;
|
||||||
|
return super.toDomain(req, domain);
|
||||||
|
}
|
||||||
|
|
||||||
// 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: CollectionView | CollectionDomain) {
|
build(o: CollectionView | CollectionDomain) {
|
||||||
this.id = o.id;
|
this.id = o.id;
|
||||||
|
|||||||
@@ -6,6 +6,16 @@ import { FolderExport } from "./folder.export";
|
|||||||
export class FolderWithIdExport extends FolderExport {
|
export class FolderWithIdExport extends FolderExport {
|
||||||
id: string;
|
id: string;
|
||||||
|
|
||||||
|
static toView(req: FolderWithIdExport, view = new FolderView()) {
|
||||||
|
view.id = req.id;
|
||||||
|
return super.toView(req, view);
|
||||||
|
}
|
||||||
|
|
||||||
|
static toDomain(req: FolderWithIdExport, domain = new FolderDomain()) {
|
||||||
|
domain.id = req.id;
|
||||||
|
return super.toDomain(req, domain);
|
||||||
|
}
|
||||||
|
|
||||||
// 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: FolderView | FolderDomain) {
|
||||||
this.id = o.id;
|
this.id = o.id;
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
import { CipherRequest } from "../../vault/models/request/cipher.request";
|
import { CipherRequest } from "../../vault/models/request/cipher.request";
|
||||||
import { FolderRequest } from "../../vault/models/request/folder.request";
|
import { FolderWithIdRequest } from "../../vault/models/request/folder-with-id.request";
|
||||||
|
|
||||||
import { KvpRequest } from "./kvp.request";
|
import { KvpRequest } from "./kvp.request";
|
||||||
|
|
||||||
export class ImportCiphersRequest {
|
export class ImportCiphersRequest {
|
||||||
ciphers: CipherRequest[] = [];
|
ciphers: CipherRequest[] = [];
|
||||||
folders: FolderRequest[] = [];
|
folders: FolderWithIdRequest[] = [];
|
||||||
folderRelationships: KvpRequest<number, number>[] = [];
|
folderRelationships: KvpRequest<number, number>[] = [];
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
import { CollectionRequest } from "../../admin-console/models/request/collection.request";
|
import { CollectionWithIdRequest } from "../../admin-console/models/request/collection-with-id.request";
|
||||||
import { CipherRequest } from "../../vault/models/request/cipher.request";
|
import { CipherRequest } from "../../vault/models/request/cipher.request";
|
||||||
|
|
||||||
import { KvpRequest } from "./kvp.request";
|
import { KvpRequest } from "./kvp.request";
|
||||||
|
|
||||||
export class ImportOrganizationCiphersRequest {
|
export class ImportOrganizationCiphersRequest {
|
||||||
ciphers: CipherRequest[] = [];
|
ciphers: CipherRequest[] = [];
|
||||||
collections: CollectionRequest[] = [];
|
collections: CollectionWithIdRequest[] = [];
|
||||||
collectionRelationships: KvpRequest<number, number>[] = [];
|
collectionRelationships: KvpRequest<number, number>[] = [];
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -335,6 +335,7 @@ export abstract class BaseImporter {
|
|||||||
result.collections = result.folders.map((f) => {
|
result.collections = result.folders.map((f) => {
|
||||||
const collection = new CollectionView();
|
const collection = new CollectionView();
|
||||||
collection.name = f.name;
|
collection.name = f.name;
|
||||||
|
collection.id = f.id;
|
||||||
return collection;
|
return collection;
|
||||||
});
|
});
|
||||||
result.folderRelationships = [];
|
result.folderRelationships = [];
|
||||||
|
|||||||
@@ -62,7 +62,6 @@ export class BitwardenJsonImporter extends BaseImporter implements Importer {
|
|||||||
for (const c of this.results.collections as CollectionWithIdExport[]) {
|
for (const c of this.results.collections as CollectionWithIdExport[]) {
|
||||||
const collection = CollectionWithIdExport.toDomain(c);
|
const collection = CollectionWithIdExport.toDomain(c);
|
||||||
if (collection != null) {
|
if (collection != null) {
|
||||||
collection.id = null;
|
|
||||||
collection.organizationId = this.organizationId;
|
collection.organizationId = this.organizationId;
|
||||||
const view = await collection.decrypt();
|
const view = await collection.decrypt();
|
||||||
groupingsMap.set(c.id, this.result.collections.length);
|
groupingsMap.set(c.id, this.result.collections.length);
|
||||||
@@ -73,7 +72,6 @@ export class BitwardenJsonImporter extends BaseImporter implements Importer {
|
|||||||
for (const f of this.results.folders as FolderWithIdExport[]) {
|
for (const f of this.results.folders as FolderWithIdExport[]) {
|
||||||
const folder = FolderWithIdExport.toDomain(f);
|
const folder = FolderWithIdExport.toDomain(f);
|
||||||
if (folder != null) {
|
if (folder != null) {
|
||||||
folder.id = null;
|
|
||||||
const view = await folder.decrypt();
|
const view = await folder.decrypt();
|
||||||
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);
|
||||||
@@ -85,7 +83,6 @@ export class BitwardenJsonImporter extends BaseImporter implements Importer {
|
|||||||
const cipher = CipherWithIdExport.toDomain(c);
|
const cipher = CipherWithIdExport.toDomain(c);
|
||||||
// reset ids incase they were set for some reason
|
// reset ids incase they were set for some reason
|
||||||
cipher.id = null;
|
cipher.id = null;
|
||||||
cipher.folderId = null;
|
|
||||||
cipher.organizationId = this.organizationId;
|
cipher.organizationId = this.organizationId;
|
||||||
cipher.collectionIds = null;
|
cipher.collectionIds = null;
|
||||||
|
|
||||||
@@ -124,7 +121,6 @@ export class BitwardenJsonImporter extends BaseImporter implements Importer {
|
|||||||
this.results.collections.forEach((c: CollectionWithIdExport) => {
|
this.results.collections.forEach((c: CollectionWithIdExport) => {
|
||||||
const collection = CollectionWithIdExport.toView(c);
|
const collection = CollectionWithIdExport.toView(c);
|
||||||
if (collection != null) {
|
if (collection != null) {
|
||||||
collection.id = null;
|
|
||||||
collection.organizationId = null;
|
collection.organizationId = null;
|
||||||
groupingsMap.set(c.id, this.result.collections.length);
|
groupingsMap.set(c.id, this.result.collections.length);
|
||||||
this.result.collections.push(collection);
|
this.result.collections.push(collection);
|
||||||
@@ -134,7 +130,6 @@ export class BitwardenJsonImporter extends BaseImporter implements Importer {
|
|||||||
this.results.folders.forEach((f: FolderWithIdExport) => {
|
this.results.folders.forEach((f: FolderWithIdExport) => {
|
||||||
const folder = FolderWithIdExport.toView(f);
|
const folder = FolderWithIdExport.toView(f);
|
||||||
if (folder != null) {
|
if (folder != null) {
|
||||||
folder.id = null;
|
|
||||||
groupingsMap.set(f.id, this.result.folders.length);
|
groupingsMap.set(f.id, this.result.folders.length);
|
||||||
this.result.folders.push(folder);
|
this.result.folders.push(folder);
|
||||||
}
|
}
|
||||||
@@ -145,7 +140,6 @@ export class BitwardenJsonImporter extends BaseImporter implements Importer {
|
|||||||
const cipher = CipherWithIdExport.toView(c);
|
const cipher = CipherWithIdExport.toView(c);
|
||||||
// reset ids incase they were set for some reason
|
// reset ids incase they were set for some reason
|
||||||
cipher.id = null;
|
cipher.id = null;
|
||||||
cipher.folderId = null;
|
|
||||||
cipher.organizationId = null;
|
cipher.organizationId = null;
|
||||||
cipher.collectionIds = null;
|
cipher.collectionIds = null;
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import { CryptoService } from "@bitwarden/common/abstractions/crypto.service";
|
import { CryptoService } from "@bitwarden/common/abstractions/crypto.service";
|
||||||
import { I18nService } from "@bitwarden/common/abstractions/i18n.service";
|
import { I18nService } from "@bitwarden/common/abstractions/i18n.service";
|
||||||
import { CollectionService } from "@bitwarden/common/admin-console/abstractions/collection.service";
|
import { CollectionService } from "@bitwarden/common/admin-console/abstractions/collection.service";
|
||||||
import { CollectionRequest } from "@bitwarden/common/admin-console/models/request/collection.request";
|
import { CollectionWithIdRequest } from "@bitwarden/common/admin-console/models/request/collection-with-id.request";
|
||||||
import { Utils } from "@bitwarden/common/misc/utils";
|
import { Utils } from "@bitwarden/common/misc/utils";
|
||||||
import { ImportCiphersRequest } from "@bitwarden/common/models/request/import-ciphers.request";
|
import { ImportCiphersRequest } from "@bitwarden/common/models/request/import-ciphers.request";
|
||||||
import { ImportOrganizationCiphersRequest } from "@bitwarden/common/models/request/import-organization-ciphers.request";
|
import { ImportOrganizationCiphersRequest } from "@bitwarden/common/models/request/import-organization-ciphers.request";
|
||||||
@@ -11,7 +11,7 @@ import { CipherService } from "@bitwarden/common/vault/abstractions/cipher.servi
|
|||||||
import { FolderService } from "@bitwarden/common/vault/abstractions/folder/folder.service.abstraction";
|
import { FolderService } from "@bitwarden/common/vault/abstractions/folder/folder.service.abstraction";
|
||||||
import { CipherType } from "@bitwarden/common/vault/enums/cipher-type";
|
import { CipherType } from "@bitwarden/common/vault/enums/cipher-type";
|
||||||
import { CipherRequest } from "@bitwarden/common/vault/models/request/cipher.request";
|
import { CipherRequest } from "@bitwarden/common/vault/models/request/cipher.request";
|
||||||
import { FolderRequest } from "@bitwarden/common/vault/models/request/folder.request";
|
import { FolderWithIdRequest } from "@bitwarden/common/vault/models/request/folder-with-id.request";
|
||||||
import { CipherView } from "@bitwarden/common/vault/models/view/cipher.view";
|
import { CipherView } from "@bitwarden/common/vault/models/view/cipher.view";
|
||||||
|
|
||||||
import {
|
import {
|
||||||
@@ -304,7 +304,7 @@ export class ImportService implements ImportServiceAbstraction {
|
|||||||
if (importResult.folders != null) {
|
if (importResult.folders != null) {
|
||||||
for (let i = 0; i < importResult.folders.length; i++) {
|
for (let i = 0; i < importResult.folders.length; i++) {
|
||||||
const f = await this.folderService.encrypt(importResult.folders[i]);
|
const f = await this.folderService.encrypt(importResult.folders[i]);
|
||||||
request.folders.push(new FolderRequest(f));
|
request.folders.push(new FolderWithIdRequest(f));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (importResult.folderRelationships != null) {
|
if (importResult.folderRelationships != null) {
|
||||||
@@ -324,7 +324,7 @@ export class ImportService implements ImportServiceAbstraction {
|
|||||||
for (let i = 0; i < importResult.collections.length; i++) {
|
for (let i = 0; i < importResult.collections.length; i++) {
|
||||||
importResult.collections[i].organizationId = organizationId;
|
importResult.collections[i].organizationId = organizationId;
|
||||||
const c = await this.collectionService.encrypt(importResult.collections[i]);
|
const c = await this.collectionService.encrypt(importResult.collections[i]);
|
||||||
request.collections.push(new CollectionRequest(c));
|
request.collections.push(new CollectionWithIdRequest(c));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (importResult.collectionRelationships != null) {
|
if (importResult.collectionRelationships != null) {
|
||||||
|
|||||||
Reference in New Issue
Block a user