From e23b0d14ebc5e9c3d6e83d1aae34e3651bbc2034 Mon Sep 17 00:00:00 2001 From: Addison Beck Date: Fri, 10 Jul 2020 15:18:00 -0500 Subject: [PATCH 01/12] Added custom field consideration to basic search function --- src/services/search.service.ts | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/services/search.service.ts b/src/services/search.service.ts index a7149cafba..b6041c72fa 100644 --- a/src/services/search.service.ts +++ b/src/services/search.service.ts @@ -164,6 +164,20 @@ export class SearchService implements SearchServiceAbstraction { if (c.login && c.login.uri != null && c.login.uri.toLowerCase().indexOf(query) > -1) { return true; } + + + if(c.hasFields){ + for (let field of c.fields) { + if (field.value.toLowerCase().indexOf(query) > -1) { + return true; + } + + if(field.name.toLowerCase().indexOf(query) > -1) { + return true; + } + } + } + return false; }); } From 031a30518c8499fb7e34629851ae916501087dbf Mon Sep 17 00:00:00 2001 From: Addison Beck Date: Fri, 10 Jul 2020 15:19:14 -0500 Subject: [PATCH 02/12] Removed an extra line --- src/services/search.service.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/src/services/search.service.ts b/src/services/search.service.ts index b6041c72fa..e1bdfc925a 100644 --- a/src/services/search.service.ts +++ b/src/services/search.service.ts @@ -165,7 +165,6 @@ export class SearchService implements SearchServiceAbstraction { return true; } - if(c.hasFields){ for (let field of c.fields) { if (field.value.toLowerCase().indexOf(query) > -1) { From 00426fe9be92b3ce6f1651c59aa881052b7f3ba4 Mon Sep 17 00:00:00 2001 From: Addison Beck Date: Fri, 10 Jul 2020 15:23:05 -0500 Subject: [PATCH 03/12] fix a formatting issue --- src/services/search.service.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/services/search.service.ts b/src/services/search.service.ts index e1bdfc925a..e5bebf4368 100644 --- a/src/services/search.service.ts +++ b/src/services/search.service.ts @@ -165,7 +165,7 @@ export class SearchService implements SearchServiceAbstraction { return true; } - if(c.hasFields){ + if(c.hasFields) { for (let field of c.fields) { if (field.value.toLowerCase().indexOf(query) > -1) { return true; From dad0e2ce6e4880dd1288ae28e9793a2d78fb11b3 Mon Sep 17 00:00:00 2001 From: Addison Beck Date: Fri, 10 Jul 2020 15:40:32 -0500 Subject: [PATCH 04/12] fixed a formatting issue --- src/services/search.service.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/services/search.service.ts b/src/services/search.service.ts index e5bebf4368..a96724f6e6 100644 --- a/src/services/search.service.ts +++ b/src/services/search.service.ts @@ -165,7 +165,7 @@ export class SearchService implements SearchServiceAbstraction { return true; } - if(c.hasFields) { + if (c.hasFields) { for (let field of c.fields) { if (field.value.toLowerCase().indexOf(query) > -1) { return true; From 2af179ba334662066a9b2299354cd48b59187ed7 Mon Sep 17 00:00:00 2001 From: Addison Beck Date: Fri, 10 Jul 2020 15:44:42 -0500 Subject: [PATCH 05/12] yet another formatting issue --- src/services/search.service.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/services/search.service.ts b/src/services/search.service.ts index a96724f6e6..fa7510d359 100644 --- a/src/services/search.service.ts +++ b/src/services/search.service.ts @@ -171,7 +171,7 @@ export class SearchService implements SearchServiceAbstraction { return true; } - if(field.name.toLowerCase().indexOf(query) > -1) { + if (field.name.toLowerCase().indexOf(query) > -1) { return true; } } From 5dcd69bc62816c405480b2e112f0c873310fbdcd Mon Sep 17 00:00:00 2001 From: Addison Beck Date: Fri, 10 Jul 2020 15:51:01 -0500 Subject: [PATCH 06/12] changed let to const --- src/services/search.service.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/services/search.service.ts b/src/services/search.service.ts index fa7510d359..9787b19aa9 100644 --- a/src/services/search.service.ts +++ b/src/services/search.service.ts @@ -166,7 +166,7 @@ export class SearchService implements SearchServiceAbstraction { } if (c.hasFields) { - for (let field of c.fields) { + for (const field of c.fields) { if (field.value.toLowerCase().indexOf(query) > -1) { return true; } From 80c5ded7855862d82539a57c0d65af3947da328f Mon Sep 17 00:00:00 2001 From: Addison Beck Date: Thu, 16 Jul 2020 15:39:19 -0500 Subject: [PATCH 07/12] moved some cipher selection logic to base component --- src/angular/components/ciphers.component.ts | 27 +++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/src/angular/components/ciphers.component.ts b/src/angular/components/ciphers.component.ts index 50beab2f54..0b0b8b1978 100644 --- a/src/angular/components/ciphers.component.ts +++ b/src/angular/components/ciphers.component.ts @@ -31,6 +31,8 @@ export class CiphersComponent { private pagedCiphersCount = 0; private refreshing = false; + private maxCheckedCount = 500; + constructor(protected searchService: SearchService) { } async load(filter: (cipher: CipherView) => boolean = null, deleted: boolean = false) { @@ -126,4 +128,29 @@ export class CiphersComponent { this.pagedCiphers = []; this.loadMore(); } + + selectAll(select: boolean) { + if (select) { + this.selectAll(false); + } + const selectCount = select && this.ciphers.length > this.maxCheckedCount ? this.maxCheckedCount : this.ciphers.length; + for (let i = 0; i < selectCount; i++) { + this.checkCipher(this.ciphers[i], select); + } + } + + checkCipher(c: CipherView, select?: boolean) { + (c as any).checked = select == null ? !(c as any).checked : select; + } + + getSelected(): CipherView[] { + if (this.ciphers == null) { + return []; + } + return this.ciphers.filter((c) => !!(c as any).checked); + } + + getSelectedIds(): string[] { + return this.getSelected().map((c) => c.id); + } } From 5a95c429379edc38fb49a55d2e9c600e64609079 Mon Sep 17 00:00:00 2001 From: Addison Beck Date: Thu, 16 Jul 2020 15:44:39 -0500 Subject: [PATCH 08/12] removed leaky code --- src/services/search.service.ts | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/src/services/search.service.ts b/src/services/search.service.ts index 9787b19aa9..a7149cafba 100644 --- a/src/services/search.service.ts +++ b/src/services/search.service.ts @@ -164,19 +164,6 @@ export class SearchService implements SearchServiceAbstraction { if (c.login && c.login.uri != null && c.login.uri.toLowerCase().indexOf(query) > -1) { return true; } - - if (c.hasFields) { - for (const field of c.fields) { - if (field.value.toLowerCase().indexOf(query) > -1) { - return true; - } - - if (field.name.toLowerCase().indexOf(query) > -1) { - return true; - } - } - } - return false; }); } From 137ca87668ed967199f3d65f1d7e10e691bbd20c Mon Sep 17 00:00:00 2001 From: Addison Beck Date: Thu, 16 Jul 2020 16:10:00 -0500 Subject: [PATCH 09/12] broke up a long line --- src/angular/components/ciphers.component.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/angular/components/ciphers.component.ts b/src/angular/components/ciphers.component.ts index 0b0b8b1978..674f9b3efe 100644 --- a/src/angular/components/ciphers.component.ts +++ b/src/angular/components/ciphers.component.ts @@ -133,7 +133,9 @@ export class CiphersComponent { if (select) { this.selectAll(false); } - const selectCount = select && this.ciphers.length > this.maxCheckedCount ? this.maxCheckedCount : this.ciphers.length; + const selectCount = select && this.ciphers.length > this.maxCheckedCount + ? this.maxCheckedCount + : this.ciphers.length; for (let i = 0; i < selectCount; i++) { this.checkCipher(this.ciphers[i], select); } From 2a38c8a9de362abbc96030d14abf646f53ef8a87 Mon Sep 17 00:00:00 2001 From: Addison Beck Date: Sun, 19 Jul 2020 22:26:45 -0500 Subject: [PATCH 10/12] added api service methods for delete many w/admin calls --- src/abstractions/api.service.ts | 2 ++ src/services/api.service.ts | 8 ++++++++ 2 files changed, 10 insertions(+) diff --git a/src/abstractions/api.service.ts b/src/abstractions/api.service.ts index 337b260b9e..a0adc7e50a 100644 --- a/src/abstractions/api.service.ts +++ b/src/abstractions/api.service.ts @@ -162,6 +162,7 @@ export abstract class ApiService { deleteCipher: (id: string) => Promise; deleteCipherAdmin: (id: string) => Promise; deleteManyCiphers: (request: CipherBulkDeleteRequest) => Promise; + deleteManyCiphersAdmin: (request: CipherBulkDeleteRequest) => Promise; putMoveCiphers: (request: CipherBulkMoveRequest) => Promise; putShareCipher: (id: string, request: CipherShareRequest) => Promise; putShareCiphers: (request: CipherBulkShareRequest) => Promise; @@ -173,6 +174,7 @@ export abstract class ApiService { putDeleteCipher: (id: string) => Promise; putDeleteCipherAdmin: (id: string) => Promise; putDeleteManyCiphers: (request: CipherBulkDeleteRequest) => Promise; + putDeleteManyCiphersAdmin: (request: CipherBulkDeleteRequest) => Promise; putRestoreCipher: (id: string) => Promise; putRestoreCipherAdmin: (id: string) => Promise; putRestoreManyCiphers: (request: CipherBulkRestoreRequest) => Promise; diff --git a/src/services/api.service.ts b/src/services/api.service.ts index f86a4efcff..02d0bd4be7 100644 --- a/src/services/api.service.ts +++ b/src/services/api.service.ts @@ -414,6 +414,10 @@ export class ApiService implements ApiServiceAbstraction { return this.send('DELETE', '/ciphers', request, true, false); } + deleteManyCiphersAdmin(request: CipherBulkDeleteRequest): Promise { + return this.send('DELETE', '/ciphers/admin', request, true, false); + } + putMoveCiphers(request: CipherBulkMoveRequest): Promise { return this.send('PUT', '/ciphers/move', request, true, false); } @@ -463,6 +467,10 @@ export class ApiService implements ApiServiceAbstraction { return this.send('PUT', '/ciphers/delete', request, true, false); } + putDeleteManyCiphersAdmin(request: CipherBulkDeleteRequest): Promise { + return this.send('PUT', '/ciphers/delete-admin', request, true, false); + } + putRestoreCipher(id: string): Promise { return this.send('PUT', '/ciphers/' + id + '/restore', null, true, false); } From 46551df51fa0517c9d9a5d163238de0333ec9551 Mon Sep 17 00:00:00 2001 From: Addison Beck Date: Mon, 20 Jul 2020 17:48:27 -0500 Subject: [PATCH 11/12] added org id to the bulk delete request model --- src/models/request/cipherBulkDeleteRequest.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/models/request/cipherBulkDeleteRequest.ts b/src/models/request/cipherBulkDeleteRequest.ts index fb19523a20..97fab41b46 100644 --- a/src/models/request/cipherBulkDeleteRequest.ts +++ b/src/models/request/cipherBulkDeleteRequest.ts @@ -1,7 +1,9 @@ export class CipherBulkDeleteRequest { ids: string[]; + organizationId: string; - constructor(ids: string[]) { + constructor(ids: string[], organizationId?: string) { this.ids = ids == null ? [] : ids; + this.organizationId = organizationId; } } From ff98bdcce4c64f2dfc73e59fe6595fef864d6f47 Mon Sep 17 00:00:00 2001 From: Addison Beck Date: Mon, 3 Aug 2020 22:12:31 -0400 Subject: [PATCH 12/12] moved some logic back to web project for cipher selection --- src/angular/components/ciphers.component.ts | 29 --------------------- 1 file changed, 29 deletions(-) diff --git a/src/angular/components/ciphers.component.ts b/src/angular/components/ciphers.component.ts index 674f9b3efe..50beab2f54 100644 --- a/src/angular/components/ciphers.component.ts +++ b/src/angular/components/ciphers.component.ts @@ -31,8 +31,6 @@ export class CiphersComponent { private pagedCiphersCount = 0; private refreshing = false; - private maxCheckedCount = 500; - constructor(protected searchService: SearchService) { } async load(filter: (cipher: CipherView) => boolean = null, deleted: boolean = false) { @@ -128,31 +126,4 @@ export class CiphersComponent { this.pagedCiphers = []; this.loadMore(); } - - selectAll(select: boolean) { - if (select) { - this.selectAll(false); - } - const selectCount = select && this.ciphers.length > this.maxCheckedCount - ? this.maxCheckedCount - : this.ciphers.length; - for (let i = 0; i < selectCount; i++) { - this.checkCipher(this.ciphers[i], select); - } - } - - checkCipher(c: CipherView, select?: boolean) { - (c as any).checked = select == null ? !(c as any).checked : select; - } - - getSelected(): CipherView[] { - if (this.ciphers == null) { - return []; - } - return this.ciphers.filter((c) => !!(c as any).checked); - } - - getSelectedIds(): string[] { - return this.getSelected().map((c) => c.id); - } }