From 2a463a7c671f0f628b868494b99ae2e93d820d8d Mon Sep 17 00:00:00 2001 From: Bhagya Silva Date: Sun, 28 Oct 2018 03:13:57 +0100 Subject: [PATCH] v1.2.4 --- README.adoc | 6 ++- package.json | 2 +- src/index.ts | 104 +++++++++++++++++++++++++++++++++++++++------------ 3 files changed, 87 insertions(+), 25 deletions(-) diff --git a/README.adoc b/README.adoc index 74d9447..c746ebc 100644 --- a/README.adoc +++ b/README.adoc @@ -18,6 +18,7 @@ Interact with the Alfresco repository with an interactive command line. == Features - Performs Alfresco operations from the terminal. - Autocompletes node names for valid operations. +- Performs glob pattern matching for filename related operations. - Maintains a session with a valid token, automatically persists within terminal sessions. - Maintains a local command history @@ -82,6 +83,9 @@ None == Version History +* 1.2.4 - 20181028 +- *Major:* Improved `login` command. + * 1.2.3 - 20181026 - Added search results auto completion in the results history. - Added `alias set|clear` commands for adding aliases for search queries. @@ -94,7 +98,7 @@ None * 1.2.1 - 20181025 - Added `list versions` command. * 1.2 - 20181025 -- [MAJOR] Adding folder name auto completion +- *Major:* Adding folder name auto completion - Added `delete` command with support for deleting child nodes. * 1.1 - 20181024 diff --git a/package.json b/package.json index 866c244..fae5254 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "alfresco-cli", - "version": "1.2.3" , + "version": "1.2.4" , "description": "Alfresco CLI - Command line interface for Alfresco", "main": "src/index.js", "bin": "dist/bundle.js", diff --git a/src/index.ts b/src/index.ts index deacf2f..be20429 100755 --- a/src/index.ts +++ b/src/index.ts @@ -11,6 +11,8 @@ import AsciiTable = require("ascii-table"); var minimatch = require("minimatch") import {throws} from "assert"; +import {promises} from "fs"; +import {log} from "util"; let parseNodeRef = (nodeRef?: string) => { return nodeRef; @@ -48,34 +50,82 @@ let nodeNameAutoCompletion = async (input, callback) => { vorpal - .command('login [password] [host]', 'Login to an Alfresco instance.') - .option('-p', '--password', 'Password') - .option('-h', '--host', "Host") + .command('login ', 'Login to an Alfresco instance.') + .option('-p, --password ', 'Password') + .option('-h, --host ', "Host") + .option('-s, --save', "Save host") .action(function (args, callback) { let self = this; self.log(chalk.default.green('logging in..')); - let password; + let loginToAlfresco = (username, password) => { + return new Promise((resolve, reject) => { + return alfrescoJsApi.login(username, password) + .then(function (data) { + self.log('API authentication performed successfully. Login ticket:' + data); + vorpal.localStorage.setItem('ticket', data); + resolve(); + }, function (data) { + let error = JSON.parse(data.response.text).error.briefSummary; + reject(error); + }).catch(error => reject(error)); + }) + }; + + let getParameter = (parameter, type ='input') => { + return new Promise((resolve, reject) => + { + let storedValue = vorpal.localStorage.getItem(parameter); + if (storedValue) { + return resolve(storedValue); + } - self.log(JSON.stringify(args)); - if (args.host) { - host = args.host; - this.log("Updating host: " + args.host); - vorpal.localStorage.setItem('host', args.host); + if (args[parameter]){ + return resolve(args[parameter]); + } + if (args.options[parameter]) { + return resolve(args.options[parameter]); + } else { + return self.prompt({ + type: type, + name: parameter, + default: null, + message: `Please enter the ${parameter}: `, + }, results => { + let result = results[parameter]; + if (result){ + resolve(result); + }else{ + reject('Please try again.') + } + }, error => { + reject(error); + }); + } + }); + }; + + let updateHost = async (host) => { + this.log(`Using host: ${host}. Change host by passing host as an argument.`); alfrescoJsApi.changeEcmHost(host); - } - if (args.password) { - password = args.password; - } else { - //prompt for password - } + if (args.options.save){ + vorpal.localStorage.setItem('host', host); + } + }; - alfrescoJsApi.login(args.username, password).then(function (data) { - self.log('API authentication performed successfully. Login ticket:' + data); - vorpal.localStorage.setItem('ticket', data); - }, function (error) { - vorpal.log(error); - }).then(callback); + let authenticate = new Promise((resolve, reject) => { + return getParameter('host').then((host => { + return updateHost(host).then(() => { + return getParameter('password', 'password').then(password => { + return loginToAlfresco(args.username, password).then(() => { + return resolve(); + }).catch(reject); + }).catch(reject) + }); + })); + }); + + authenticate.catch(callback).then(callback); }); @@ -114,7 +164,7 @@ vorpal i[item.entry.id] = item.entry.title + (item.entry.description ? " - " + item.entry.description : ""); } return i; - }) + }); let rows = flatten(sites); var table = new AsciiTable(); @@ -460,7 +510,10 @@ function printNodeList(entries) { table.addRow(item.entry.id, item.entry.name, item.entry.nodeType); }); if(found) - vorpal.log(table.toString()); + {vorpal.log(table.toString());} + else{ + vorpal.log(`no results`) + } } function cacheResults(entries){ @@ -679,6 +732,11 @@ function getCurrentNodeRef() { async function getNodeRef(nodeRef: string, explicit = false):Promise { let storedNodeRef = getCurrentNodeRef(); + //check for connectivity. + if (!alfrescoJsApi.isLoggedIn()){ + throw new Error("Unable to connect to the repository, please login again."); + } + if (nodeRef === "..") { return await getParent(storedNodeRef); }