From b5507813abca49ebee686c980a53c37d906a083a Mon Sep 17 00:00:00 2001 From: Kyle Spearrin Date: Mon, 14 May 2018 21:19:49 -0400 Subject: [PATCH] sub out create command --- src/commands/create.command.ts | 46 +++++++++++++++++++++++++++++ src/models/request/cipherRequest.ts | 9 ++++++ src/models/request/folderRequest.ts | 8 +++++ src/program.ts | 12 +++++++- 4 files changed, 74 insertions(+), 1 deletion(-) create mode 100644 src/commands/create.command.ts diff --git a/src/commands/create.command.ts b/src/commands/create.command.ts new file mode 100644 index 0000000000..37b8517ec5 --- /dev/null +++ b/src/commands/create.command.ts @@ -0,0 +1,46 @@ +import * as program from 'commander'; + +import { CipherService } from 'jslib/abstractions/cipher.service'; +import { FolderService } from 'jslib/services/folder.service'; + +import { Response } from '../models/response'; + +import { CipherRequest } from '../models/request/cipherRequest'; +import { FolderRequest } from '../models/request/folderRequest'; + +export class CreateCommand { + constructor(private cipherService: CipherService, private folderService: FolderService) { } + + async run(object: string, requestData: string, cmd: program.Command): Promise { + const reqJson = new Buffer(requestData, 'base64').toString(); + const req = JSON.parse(reqJson); + switch (object.toLowerCase()) { + case 'item': + return await this.createCipher(req); + case 'folder': + return await this.createFolder(req); + default: + return Response.badRequest('Unknown object.'); + } + } + + private async createCipher(req: CipherRequest) { + const cipher = await this.cipherService.encrypt(CipherRequest.toView(req)); + try { + await this.cipherService.saveWithServer(cipher); + return Response.success(); + } catch (e) { + return Response.error(e.toString()); + } + } + + private async createFolder(req: FolderRequest) { + const folder = await this.folderService.encrypt(FolderRequest.toView(req)); + try { + await this.folderService.saveWithServer(folder); + return Response.success(); + } catch (e) { + return Response.error(e.toString()); + } + } +} diff --git a/src/models/request/cipherRequest.ts b/src/models/request/cipherRequest.ts index 360766f4f8..736317dbfa 100644 --- a/src/models/request/cipherRequest.ts +++ b/src/models/request/cipherRequest.ts @@ -1,10 +1,13 @@ import { CipherType } from 'jslib/enums/cipherType'; + import { LoginRequest } from './loginRequest'; import { SecureNoteRequest } from './secureNoteRequest'; import { CardRequest } from './cardRequest'; import { IdentityRequest } from './identityRequest'; import { FieldRequest } from './fieldRequest'; +import { CipherView } from 'jslib/models/view/cipherView'; + export class CipherRequest { static template(): CipherRequest { var req = new CipherRequest(); @@ -22,6 +25,12 @@ export class CipherRequest { return req; } + static toView(req: CipherRequest) { + const view = new CipherView(); + view.name = req.name; + return view; + } + type: CipherType; folderId: string; organizationId: string; diff --git a/src/models/request/folderRequest.ts b/src/models/request/folderRequest.ts index a1dbcac4fc..2e969a98ee 100644 --- a/src/models/request/folderRequest.ts +++ b/src/models/request/folderRequest.ts @@ -1,3 +1,11 @@ +import { FolderView } from 'jslib/models/view/folderView'; + export class FolderRequest { + static toView(req: FolderRequest) { + const view = new FolderView(); + view.name = req.name; + return view; + } + name: string; } diff --git a/src/program.ts b/src/program.ts index b05724e651..99e1d79b1f 100644 --- a/src/program.ts +++ b/src/program.ts @@ -9,10 +9,11 @@ import { SyncCommand } from './commands/sync.command'; import { Main } from './main'; import { Response } from './models/response'; +import { CreateCommand } from './commands/create.command'; +import { EncodeCommand } from './commands/encode.command'; import { ListResponse } from './models/response/listResponse'; import { StringResponse } from './models/response/stringResponse'; import { TemplateResponse } from './models/response/templateResponse'; -import { EncodeCommand } from './commands/encode.command'; export class Program { constructor(private main: Main) { } @@ -70,6 +71,15 @@ export class Program { this.processResponse(response); }); + program + .command('create ') + .description('Create an object.') + .action(async (object, encodedData, cmd) => { + const command = new CreateCommand(this.main.cipherService, this.main.folderService); + const response = await command.run(object, encodedData, cmd); + this.processResponse(response); + }); + program .command('edit ') .description('Edit an object.')