From 1de6c2884b36d739d408f9b1a478c79359458d32 Mon Sep 17 00:00:00 2001 From: Kyle Spearrin Date: Tue, 1 Oct 2019 11:29:25 -0400 Subject: [PATCH] org collection list command --- src/commands/list.command.ts | 45 +++++++++++++++++++++++++++++++++++- src/program.ts | 2 +- 2 files changed, 45 insertions(+), 2 deletions(-) diff --git a/src/commands/list.command.ts b/src/commands/list.command.ts index 0bb417f0f75..dbe99d69b0e 100644 --- a/src/commands/list.command.ts +++ b/src/commands/list.command.ts @@ -2,12 +2,23 @@ import * as program from 'commander'; import { CipherView } from 'jslib/models/view/cipherView'; +import { ApiService } from 'jslib/abstractions/api.service'; import { CipherService } from 'jslib/abstractions/cipher.service'; import { CollectionService } from 'jslib/abstractions/collection.service'; import { FolderService } from 'jslib/abstractions/folder.service'; import { SearchService } from 'jslib/abstractions/search.service'; import { UserService } from 'jslib/abstractions/user.service'; +import { + CollectionDetailsResponse as ApiCollectionDetailsResponse, + CollectionResponse as ApiCollectionResponse, +} from 'jslib/models/response/collectionResponse'; +import { ListResponse as ApiListResponse } from 'jslib/models/response/listResponse'; + +import { CollectionData } from 'jslib/models/data/collectionData'; + +import { Collection } from 'jslib/models/domain/collection'; + import { Response } from 'jslib/cli/models/response'; import { ListResponse } from 'jslib/cli/models/response/listResponse'; @@ -18,10 +29,12 @@ import { OrganizationResponse } from '../models/response/organizationResponse'; import { CliUtils } from '../utils'; +import { Utils } from 'jslib/misc/utils'; + export class ListCommand { constructor(private cipherService: CipherService, private folderService: FolderService, private collectionService: CollectionService, private userService: UserService, - private searchService: SearchService) { } + private searchService: SearchService, private apiService: ApiService) { } async run(object: string, cmd: program.Command): Promise { switch (object.toLowerCase()) { @@ -31,6 +44,8 @@ export class ListCommand { return await this.listFolders(cmd); case 'collections': return await this.listCollections(cmd); + case 'org-collections': + return await this.listOrganizationCollections(cmd); case 'organizations': return await this.listOrganizations(cmd); default: @@ -123,6 +138,34 @@ export class ListCommand { return Response.success(res); } + private async listOrganizationCollections(cmd: program.Command) { + if (cmd.organizationid == null || cmd.organizationid === '') { + return Response.badRequest('--organizationid required.'); + } + if (!Utils.isGuid(cmd.organizationid)) { + return Response.error('`' + cmd.organizationid + '` is not a GUID.'); + } + const organization = await this.userService.getOrganization(cmd.organizationid); + if (organization == null) { + return Response.error('Organization not found.'); + } + + let response: ApiListResponse; + if (organization.isAdmin) { + response = await this.apiService.getCollections(cmd.organizationId); + } else { + response = await this.apiService.getUserCollections(); + } + const collections = response.data.filter((c) => c.organizationId === cmd.organizationId).map((r) => + new Collection(new CollectionData(r as ApiCollectionDetailsResponse))); + let decCollections = await this.collectionService.decryptMany(collections); + if (cmd.search != null && cmd.search.trim() !== '') { + decCollections = CliUtils.searchCollections(decCollections, cmd.search); + } + const res = new ListResponse(decCollections.map((o) => new CollectionResponse(o))); + return Response.success(res); + } + private async listOrganizations(cmd: program.Command) { let organizations = await this.userService.getAllOrganizations(); diff --git a/src/program.ts b/src/program.ts index 08b098d33a9..4378a988968 100644 --- a/src/program.ts +++ b/src/program.ts @@ -254,7 +254,7 @@ export class Program extends BaseProgram { .action(async (object, cmd) => { await this.exitIfLocked(); const command = new ListCommand(this.main.cipherService, this.main.folderService, - this.main.collectionService, this.main.userService, this.main.searchService); + this.main.collectionService, this.main.userService, this.main.searchService, this.main.apiService); const response = await command.run(object, cmd); this.processResponse(response); });