accept requestJson for create/edit as stdin
This commit is contained in:
parent
9cce555899
commit
07cb4d5ff8
|
@ -9,13 +9,23 @@ import { StringResponse } from '../models/response/stringResponse';
|
|||
import { Cipher } from '../models/cipher';
|
||||
import { Folder } from '../models/folder';
|
||||
|
||||
import { CliUtils } from '../utils';
|
||||
|
||||
export class CreateCommand {
|
||||
constructor(private cipherService: CipherService, private folderService: FolderService) { }
|
||||
|
||||
async run(object: string, requestData: string, cmd: program.Command): Promise<Response> {
|
||||
async run(object: string, requestJson: string, cmd: program.Command): Promise<Response> {
|
||||
if (requestJson == null || requestJson === '') {
|
||||
requestJson = await CliUtils.readStdin();
|
||||
}
|
||||
|
||||
if (requestJson == null || requestJson === '') {
|
||||
return Response.badRequest('`requestJson` was not provided.');
|
||||
}
|
||||
|
||||
let req: any = null;
|
||||
try {
|
||||
const reqJson = new Buffer(requestData, 'base64').toString();
|
||||
const reqJson = new Buffer(requestJson, 'base64').toString();
|
||||
req = JSON.parse(reqJson);
|
||||
} catch (e) {
|
||||
return Response.badRequest('Error parsing the encoded request data.');
|
||||
|
|
|
@ -8,13 +8,23 @@ import { Response } from '../models/response';
|
|||
import { Cipher } from '../models/cipher';
|
||||
import { Folder } from '../models/folder';
|
||||
|
||||
import { CliUtils } from 'src/utils';
|
||||
|
||||
export class EditCommand {
|
||||
constructor(private cipherService: CipherService, private folderService: FolderService) { }
|
||||
|
||||
async run(object: string, id: string, requestData: string, cmd: program.Command): Promise<Response> {
|
||||
async run(object: string, id: string, requestJson: string, cmd: program.Command): Promise<Response> {
|
||||
if (requestJson == null || requestJson === '') {
|
||||
requestJson = await CliUtils.readStdin();
|
||||
}
|
||||
|
||||
if (requestJson == null || requestJson === '') {
|
||||
return Response.badRequest('`requestJson` was not provided.');
|
||||
}
|
||||
|
||||
let req: any = null;
|
||||
try {
|
||||
const reqJson = new Buffer(requestData, 'base64').toString();
|
||||
const reqJson = new Buffer(requestJson, 'base64').toString();
|
||||
req = JSON.parse(reqJson);
|
||||
} catch (e) {
|
||||
return Response.badRequest('Error parsing the encoded request data.');
|
||||
|
|
|
@ -3,29 +3,16 @@ import * as program from 'commander';
|
|||
import { Response } from '../models/response';
|
||||
import { StringResponse } from '../models/response/stringResponse';
|
||||
|
||||
export class EncodeCommand {
|
||||
run(cmd: program.Command): Promise<Response> {
|
||||
if (process.stdin == null || process.stdin.isTTY) {
|
||||
return Promise.resolve(Response.badRequest('No stdin was piped in.'));
|
||||
}
|
||||
import { CliUtils } from '../utils';
|
||||
|
||||
return new Promise((resolve, reject) => {
|
||||
let input: string = '';
|
||||
process.stdin.setEncoding('utf8');
|
||||
process.stdin.on('readable', () => {
|
||||
while (true) {
|
||||
const chunk = process.stdin.read();
|
||||
if (chunk == null) {
|
||||
break;
|
||||
}
|
||||
input += chunk;
|
||||
}
|
||||
});
|
||||
process.stdin.on('end', () => {
|
||||
const b64 = new Buffer(input, 'utf8').toString('base64');
|
||||
const res = new StringResponse(b64);
|
||||
resolve(Response.success(res));
|
||||
});
|
||||
});
|
||||
export class EncodeCommand {
|
||||
async run(cmd: program.Command): Promise<Response> {
|
||||
if (process.stdin.isTTY) {
|
||||
return Response.badRequest('No stdin was piped in.');
|
||||
}
|
||||
const input = await CliUtils.readStdin();
|
||||
const b64 = new Buffer(input, 'utf8').toString('base64');
|
||||
const res = new StringResponse(b64);
|
||||
return Response.success(res);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -161,22 +161,22 @@ export class Program {
|
|||
});
|
||||
|
||||
program
|
||||
.command('create <object> <encodedData>')
|
||||
.command('create <object> [encodedJson]')
|
||||
.description('Create an object.')
|
||||
.action(async (object, encodedData, cmd) => {
|
||||
.action(async (object, encodedJson, cmd) => {
|
||||
await this.exitIfLocked();
|
||||
const command = new CreateCommand(this.main.cipherService, this.main.folderService);
|
||||
const response = await command.run(object, encodedData, cmd);
|
||||
const response = await command.run(object, encodedJson, cmd);
|
||||
this.processResponse(response);
|
||||
});
|
||||
|
||||
program
|
||||
.command('edit <object> <id> <encodedData>')
|
||||
.command('edit <object> <id> [encodedJson]')
|
||||
.description('Edit an object.')
|
||||
.action(async (object, id, encodedData, cmd) => {
|
||||
.action(async (object, id, encodedJson, cmd) => {
|
||||
await this.exitIfLocked();
|
||||
const command = new EditCommand(this.main.cipherService, this.main.folderService);
|
||||
const response = await command.run(object, id, encodedData, cmd);
|
||||
const response = await command.run(object, id, encodedJson, cmd);
|
||||
this.processResponse(response);
|
||||
});
|
||||
|
||||
|
|
26
src/utils.ts
26
src/utils.ts
|
@ -3,6 +3,32 @@ import { CollectionView } from 'jslib/models/view/collectionView';
|
|||
import { FolderView } from 'jslib/models/view/folderView';
|
||||
|
||||
export class CliUtils {
|
||||
static readStdin(): Promise<string> {
|
||||
return new Promise((resolve, reject) => {
|
||||
let input: string = '';
|
||||
|
||||
if (process.stdin.isTTY) {
|
||||
resolve(input);
|
||||
return;
|
||||
}
|
||||
|
||||
process.stdin.setEncoding('utf8');
|
||||
process.stdin.on('readable', () => {
|
||||
while (true) {
|
||||
const chunk = process.stdin.read();
|
||||
if (chunk == null) {
|
||||
break;
|
||||
}
|
||||
input += chunk;
|
||||
}
|
||||
});
|
||||
|
||||
process.stdin.on('end', () => {
|
||||
resolve(input);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
static searchCiphers(ciphers: CipherView[], search: string) {
|
||||
search = search.toLowerCase();
|
||||
return ciphers.filter((c) => {
|
||||
|
|
Loading…
Reference in New Issue