From add788585eb0081898285ed766e7a6cd86ea9ac9 Mon Sep 17 00:00:00 2001 From: Graham Bucknell Date: Thu, 21 Oct 2021 09:58:41 +1100 Subject: [PATCH 1/2] add keystore commands --- README.md | 145 +++++++++++++++++++++++++++++++++++++++ lib/commands/commands.js | 42 ++++++++++++ lib/main.js | 35 ++++++++++ lib/promisesdk.js | 47 +++++++++++++ 4 files changed, 269 insertions(+) diff --git a/README.md b/README.md index 5104ca8..78fd0e3 100644 --- a/README.md +++ b/README.md @@ -34,6 +34,10 @@ You must have an account on Apigee Edge to perform any `apigeetool` functions. T * create or delete a Cache resource in Edge * create, retrieve or delete a KVM Map in Edge * create, retrieve or delete a KVM Entry in Edge +* create, retrieve or delete a Keystore in Edge +* retrieve a Keystore Reference in Edge +* retrieve a Keystore Alias in Edge +* retrieve a Certificate from a Keystore in Edge * attach, detach, or get a FlowHook * create, get, delete, list Target Servers * create, get, delete, List Roles @@ -119,6 +123,7 @@ Currently this only affects file uploads in the `deploynodeapp` command. Default * [deleteapp](#deleteapp) * [deletecache](#deletecache) * [deletedeveloper](#deletedeveloper) +* [deleteKeystore](#deleteKeystore) * [deleteKVMentry](#deleteKVMentry) * [deleteKVMmap](#deleteKVMmap) * [deleteproduct](#deleteproduct) @@ -133,14 +138,19 @@ Currently this only affects file uploads in the `deploynodeapp` command. Default * [detachFlowHook](#detachFlowHook) * [fetchproxy](#fetchproxy) * [fetchSharedflow](#fetchSharedflow) +* [getAlias](#getAlias) +* [getCertificate](#getCertificate) * [getFlowHook](#getFlowHook) * [getKVMentry](#getKVMentry) * [getKVMmap](#getKVMmap) * [getlogs](#getlogs) +* [getReference](#getReference) * [getRole](#getRole) * [getRolePermissions](#getRolePermissions) * [getTargetServer](#getTargetServer) * [listdeployments](#listdeployments) +* [listKeystores](#listKeystores) +* [listReferences](#listReferences) * [listRoles](#listRoles) * [listRoleUsers](#listRoleUsers) * [listSharedflowDeployments](#listSharedflowDeployments) @@ -1419,6 +1429,141 @@ the "-u" and "-p" parameters for username and password or preferably -N for .net `--email` (required) Email for an existing User in Edge. `--roleName` (required) The name for the role. +## Keystore Operations + +### getAlias + +Get details about certificate alias. + +#### Example +Get details about a certificate from the specific keystore "MyKeyStore-20210101" , using the cert alias "my-cert-alias". + + apigeetool getAlias --keystoreName MyKeyStore-20210101 --aliasName my-cert-alias + +#### Required parameters + +The following parameters are required. However, if any are left unspecified +on the command line, and if apigeetool is running in an interactive shell, +then apigeetool will prompt for them. + +See [Common Parameters](#commonargs) for a list of additional parameters, including +the "-u" and "-p" parameters for username and password or preferably -N for .netrc usage. + +`--organization -o` (required) The organization to target.·· +`--environment -e` (required) The environment to target.·· +`--keystoreName` (required) The keystore to query. +`--aliasName` (required) The alias to query + +### getCertificate + +Get details about a certificate in a keystore. + +#### Example +Get details about the certificate "my-cert" in the keystore "MyKeyStore-20210101" + + apigeetool getCertificate --keystoreName MyKeyStore-20210101 --certificateName my-cert + +#### Required parameters + +The following parameters are required. However, if any are left unspecified +on the command line, and if apigeetool is running in an interactive shell, +then apigeetool will prompt for them. + +See [Common Parameters](#commonargs) for a list of additional parameters, including +the "-u" and "-p" parameters for username and password or preferably -N for .netrc usage. + +`--organization -o` (required) The organization to target.·· +`--environment -e` (required) The environment to target.·· +`--keystoreName` (required) The keystore to query. +`--certificateName` (required) The certificate to query + +### getKeystore + +Get details about a keystore + +#### Example +Get details about the keystore "MyKeyStore-20210101" + + apigeetool getKeystore --keystoreName MyKeyStore-20210101 + +#### Required parameters + +The following parameters are required. However, if any are left unspecified +on the command line, and if apigeetool is running in an interactive shell, +then apigeetool will prompt for them. + +See [Common Parameters](#commonargs) for a list of additional parameters, including +the "-u" and "-p" parameters for username and password or preferably -N for .netrc usage. + +`--organization -o` (required) The organization to target.·· +`--environment -e` (required) The environment to target.·· +`--keystoreName` (required) The keystore to query. + +### getReference + +Get details about a reference + +#### Example +Get details about the reference "TLSReference" about which real keystore it is pointing at. + + apigeetool getreference --referenceName "TLSReference" + +#### Required parameters + +The following parameters are required. However, if any are left unspecified +on the command line, and if apigeetool is running in an interactive shell, +then apigeetool will prompt for them. + +See [Common Parameters](#commonargs) for a list of additional parameters, including +the "-u" and "-p" parameters for username and password or preferably -N for .netrc usage. + +`--organization -o` (required) The organization to target.·· +`--environment -e` (required) The environment to target.·· +`--referenceName` (required) The reference to query. + +### listKeystores + +List all the keystore in an Apigee Environment + +#### Example +List Keystores in the Dev Environment + + apigeetool listKeystores -e "Dev" + +#### Required parameters + +The following parameters are required. However, if any are left unspecified +on the command line, and if apigeetool is running in an interactive shell, +then apigeetool will prompt for them. + +See [Common Parameters](#commonargs) for a list of additional parameters, including +the "-u" and "-p" parameters for username and password or preferably -N for .netrc usage. + +`--organization -o` (required) The organization to target.·· +`--environment -e` (required) The environment to target.·· + +### deleteKeystore + +Delete a keystore. + +#### Example +Delete a keystore "MyKeyStore-20210101" + + apigeetool deleteKeystore --keystoreName MyKeyStore-20210101 + +#### Required parameters + +The following parameters are required. However, if any are left unspecified +on the command line, and if apigeetool is running in an interactive shell, +then apigeetool will prompt for them. + +See [Common Parameters](#commonargs) for a list of additional parameters, including +the "-u" and "-p" parameters for username and password or preferably -N for .netrc usage. + +`--organization -o` (required) The organization to target. +`--environment -e` (required) The environment to target. +`--keystoreName` (required) The keystore to delete. + # SDK Reference You could use apigeetool as an SDK to orchestrate tasks that you want to perform with Edge, for eg, deploying an api proxy or running tests etc. diff --git a/lib/commands/commands.js b/lib/commands/commands.js index 26445fb..f93ded3 100644 --- a/lib/commands/commands.js +++ b/lib/commands/commands.js @@ -276,6 +276,48 @@ var Commands = { load: function () { return require('./listRoleUsers'); } + }, + listKeystores: { + description: "List Keystores", + load: function () { + return require('./listKeystores'); + } + }, + listReferences: { + description: "List References", + load: function () { + return require('./listReferences'); + } + }, + getKeystore: { + description: "Get Keystore", + load: function () { + return require('./getKeystore'); + } + }, + deleteKeystore: { + description: "Delete Keystore", + load: function () { + return require('./deleteKeystore'); + } + }, + getReference: { + description: "Get References", + load: function () { + return require('./getReference'); + } + }, + getAlias: { + description: "Get Alias", + load: function () { + return require('./getAlias'); + } + }, + getCertificate: { + description: "Get Certificate", + load: function () { + return require('./getCertificate'); + } } }; diff --git a/lib/main.js b/lib/main.js index d100df6..74241b9 100644 --- a/lib/main.js +++ b/lib/main.js @@ -23,6 +23,16 @@ ApigeeTool.listDeployments = function(opts, cb) { runCommand(cmd, opts, cb); }; +ApigeeTool.listKeystores = function(opts, cb) { + var cmd = require('./commands/listkeystores'); + runCommand(cmd, opts, cb); +}; + +ApigeeTool.listReferences = function(opts, cb) { + var cmd = require('./commands/listreferences'); + runCommand(cmd, opts, cb); +}; + ApigeeTool.deployNodeApp = function(opts, cb) { var cmd = require('./commands/deploynodeapp'); runCommand(cmd, opts, cb); @@ -53,6 +63,31 @@ ApigeeTool.getLogs = function(opts, cb) { runCommand(cmd, opts, cb); }; +ApigeeTool.getKeystore = function(opts, cb) { + var cmd = require('./commands/getkeystore'); + runCommand(cmd, opts, cb); +}; + +ApigeeTool.deleteKeystore = function(opts, cb) { + var cmd = require('./commands/deletekeystore'); + runCommand(cmd, opts, cb); +}; + +ApigeeTool.getReference = function(opts, cb) { + var cmd = require('./commands/getreference'); + runCommand(cmd, opts, cb); +}; + +ApigeeTool.getAlias = function(opts, cb) { + var cmd = require('./commands/getalias'); + runCommand(cmd, opts, cb); +}; + +ApigeeTool.getCertificate = function(opts, cb) { + var cmd = require('./commands/getcertificate'); + runCommand(cmd, opts, cb); +}; + ApigeeTool.delete = function(opts, cb) { var cmd = require('./commands/delete'); runCommand(cmd, opts, cb); diff --git a/lib/promisesdk.js b/lib/promisesdk.js index cefb991..23a2fc8 100644 --- a/lib/promisesdk.js +++ b/lib/promisesdk.js @@ -24,6 +24,18 @@ ApigeeTool.listDeployments = function(opts) { return cb.promise }; +ApigeeTool.listKeystores = function(opts, cb) { + var cmd = require('./commands/listkeystores'); + runCommand(cmd, opts, cb); + return cb.promise +}; + +ApigeeTool.listReferences = function(opts, cb) { + var cmd = require('./commands/listreferences'); + runCommand(cmd, opts, cb); + return cb.promise +}; + ApigeeTool.listSharedflowDeployments = function(opts) { var cb = q.defer() var cmd = require('./commands/listsharedflowdeployments'); @@ -101,6 +113,41 @@ ApigeeTool.getLogs = function(opts) { return cb.promise }; +ApigeeTool.getKeystore = function(opts, cb) { + var cb = q.defer() + var cmd = require('./commands/getkeystore'); + runCommand(cmd, opts, cb); + return cb.promise +}; + +ApigeeTool.deleteKeystore = function(opts, cb) { + var cb = q.defer() + var cmd = require('./commands/deletekeystore'); + runCommand(cmd, opts, cb); + return cb.promise +}; + +ApigeeTool.getAlias = function(opts, cb) { + var cb = q.defer() + var cmd = require('./commands/getalias'); + runCommand(cmd, opts, cb); + return cb.promise +}; + +ApigeeTool.getCertificate = function(opts, cb) { + var cb = q.defer() + var cmd = require('./commands/getcertificate'); + runCommand(cmd, opts, cb); + return cb.promise +}; + +ApigeeTool.getReference = function(opts, cb) { + var cb = q.defer() + var cmd = require('./commands/getreference'); + runCommand(cmd, opts, cb); + return cb.promise +}; + ApigeeTool.delete = function(opts) { var cb = q.defer() var cmd = require('./commands/delete'); From 676151ee54ab09c97b92fe724d74db76bbae8ecc Mon Sep 17 00:00:00 2001 From: Graham Bucknell Date: Thu, 21 Oct 2021 13:47:04 +1100 Subject: [PATCH 2/2] add keystore commands --- lib/commands/deleteKeystore.js | 38 ++++++++++++++++++++++++++++++ lib/commands/getAlias.js | 43 ++++++++++++++++++++++++++++++++++ lib/commands/getCertificate.js | 43 ++++++++++++++++++++++++++++++++++ lib/commands/getKeystore.js | 38 ++++++++++++++++++++++++++++++ lib/commands/getReference.js | 38 ++++++++++++++++++++++++++++++ lib/commands/listKeystores.js | 33 ++++++++++++++++++++++++++ lib/commands/listReferences.js | 33 ++++++++++++++++++++++++++ 7 files changed, 266 insertions(+) create mode 100644 lib/commands/deleteKeystore.js create mode 100644 lib/commands/getAlias.js create mode 100644 lib/commands/getCertificate.js create mode 100644 lib/commands/getKeystore.js create mode 100644 lib/commands/getReference.js create mode 100644 lib/commands/listKeystores.js create mode 100644 lib/commands/listReferences.js diff --git a/lib/commands/deleteKeystore.js b/lib/commands/deleteKeystore.js new file mode 100644 index 0000000..9df0765 --- /dev/null +++ b/lib/commands/deleteKeystore.js @@ -0,0 +1,38 @@ +/* jshint node: true */ +'use strict'; + +var util = require('util'); +var _ = require('underscore'); + +var defaults = require('../defaults'); +var options = require('../options'); +var command_utils = require('./command-utils') + +var descriptor = defaults.defaultDescriptor({ + environment: { + name: 'Environment', + shortOption: 'e', + required: true, + prompt: true + }, + keystoreName:{ + name:'Keystore Name', + required: true, + prompt: true + } +}); + +module.exports.descriptor = descriptor; + +module.exports.run = function(opts, cb) { + if (opts.debug) { + console.log('deleteKeystore: %j', opts); + } + var uri = util.format('%s/v1/o/%s/e/%s/keystores/%s', opts.baseuri, opts.organization, opts.environment, opts.keystoreName); + var requestOptions = { + uri: uri, + method:'DELETE', + json:true + } + command_utils.run('deleteKeystore', opts,requestOptions,cb) +}; diff --git a/lib/commands/getAlias.js b/lib/commands/getAlias.js new file mode 100644 index 0000000..5b2e372 --- /dev/null +++ b/lib/commands/getAlias.js @@ -0,0 +1,43 @@ +/* jshint node: true */ +'use strict'; + +var util = require('util'); +var _ = require('underscore'); + +var defaults = require('../defaults'); +var options = require('../options'); +var command_utils = require('./command-utils') + +var descriptor = defaults.defaultDescriptor({ + environment: { + name: 'Environment', + shortOption: 'e', + required: true, + prompt: true + }, + keystoreName: { + name:'Keystore Name', + required: true, + prompt: true + }, + aliasName: { + name: 'Alias Name', + required: true, + prompt: true + } +}); + +module.exports.descriptor = descriptor; + +module.exports.run = function(opts, cb) { + if (opts.debug) { + console.log('getAlias: %j', opts); + } + var uri = util.format('%s/v1/o/%s/e/%s/keystores/%s/aliases/%s', opts.baseuri, opts.organization, opts.environment, opts.keystoreName, opts.aliasName); + var requestOptions = { + uri: uri, + method:'GET', + json:true + } + command_utils.run('getAlias', opts,requestOptions,cb) +}; diff --git a/lib/commands/getCertificate.js b/lib/commands/getCertificate.js new file mode 100644 index 0000000..e68b662 --- /dev/null +++ b/lib/commands/getCertificate.js @@ -0,0 +1,43 @@ +/* jshint node: true */ +'use strict'; + +var util = require('util'); +var _ = require('underscore'); + +var defaults = require('../defaults'); +var options = require('../options'); +var command_utils = require('./command-utils') + +var descriptor = defaults.defaultDescriptor({ + environment: { + name: 'Environment', + shortOption: 'e', + required: true, + prompt: true + }, + keystoreName: { + name:'Keystore Name', + required: true, + prompt: true + }, + certificateName: { + name: 'Certificate Name', + required: true, + prompt: true + } +}); + +module.exports.descriptor = descriptor; + +module.exports.run = function(opts, cb) { + if (opts.debug) { + console.log('getCertificate: %j', opts); + } + var uri = util.format('%s/v1/o/%s/e/%s/keystores/%s/certs/%s', opts.baseuri, opts.organization, opts.environment, opts.keystoreName, opts.certificateName); + var requestOptions = { + uri: uri, + method:'GET', + json:true + } + command_utils.run('getCertificate', opts,requestOptions,cb) +}; diff --git a/lib/commands/getKeystore.js b/lib/commands/getKeystore.js new file mode 100644 index 0000000..3144b5f --- /dev/null +++ b/lib/commands/getKeystore.js @@ -0,0 +1,38 @@ +/* jshint node: true */ +'use strict'; + +var util = require('util'); +var _ = require('underscore'); + +var defaults = require('../defaults'); +var options = require('../options'); +var command_utils = require('./command-utils') + +var descriptor = defaults.defaultDescriptor({ + environment: { + name: 'Environment', + shortOption: 'e', + required: true, + prompt: true + }, + keystoreName:{ + name:'Keystore Name', + required: true, + prompt: true + }, +}); + +module.exports.descriptor = descriptor; + +module.exports.run = function(opts, cb) { + if (opts.debug) { + console.log('getKeystore: %j', opts); + } + var uri = util.format('%s/v1/o/%s/e/%s/keystores/%s', opts.baseuri, opts.organization, opts.environment, opts.keystoreName); + var requestOptions = { + uri: uri, + method:'GET', + json:true + } + command_utils.run('getKeystore', opts,requestOptions,cb) +}; diff --git a/lib/commands/getReference.js b/lib/commands/getReference.js new file mode 100644 index 0000000..8aac1b4 --- /dev/null +++ b/lib/commands/getReference.js @@ -0,0 +1,38 @@ +/* jshint node: true */ +'use strict'; + +var util = require('util'); +var _ = require('underscore'); + +var defaults = require('../defaults'); +var options = require('../options'); +var command_utils = require('./command-utils') + +var descriptor = defaults.defaultDescriptor({ + environment: { + name: 'Environment', + shortOption: 'e', + required: true, + prompt: true + }, + referenceName: { + name:'Reference Name', + required: true, + prompt: true + } +}); + +module.exports.descriptor = descriptor; + +module.exports.run = function(opts, cb) { + if (opts.debug) { + console.log('getReference: %j', opts); + } + var uri = util.format('%s/v1/o/%s/e/%s/references/%s', opts.baseuri, opts.organization, opts.environment, opts.referenceName); + var requestOptions = { + uri: uri, + method:'GET', + json:true + } + command_utils.run('getReference', opts,requestOptions,cb) +}; diff --git a/lib/commands/listKeystores.js b/lib/commands/listKeystores.js new file mode 100644 index 0000000..e3cc602 --- /dev/null +++ b/lib/commands/listKeystores.js @@ -0,0 +1,33 @@ +/* jshint node: true */ +'use strict'; + +var util = require('util'); +var _ = require('underscore'); + +var defaults = require('../defaults'); +var options = require('../options'); +var command_utils = require('./command-utils') + +var descriptor = defaults.defaultDescriptor({ + environment: { + name: 'Environment', + shortOption: 'e', + required: true, + prompt: true + } +}); + +module.exports.descriptor = descriptor; + +module.exports.run = function(opts, cb) { + if (opts.debug) { + console.log('listKeystores: %j', opts); + } + var uri = util.format('%s/v1/o/%s/e/%s/keystores', opts.baseuri, opts.organization, opts.environment); + var requestOptions = { + uri: uri, + method:'GET', + json:true + } + command_utils.run('listKeystores', opts,requestOptions,cb) +}; diff --git a/lib/commands/listReferences.js b/lib/commands/listReferences.js new file mode 100644 index 0000000..fedd957 --- /dev/null +++ b/lib/commands/listReferences.js @@ -0,0 +1,33 @@ +/* jshint node: true */ +'use strict'; + +var util = require('util'); +var _ = require('underscore'); + +var defaults = require('../defaults'); +var options = require('../options'); +var command_utils = require('./command-utils') + +var descriptor = defaults.defaultDescriptor({ + environment: { + name: 'Environment', + shortOption: 'e', + required: true, + prompt: true + } +}); + +module.exports.descriptor = descriptor; + +module.exports.run = function(opts, cb) { + if (opts.debug) { + console.log('listReferences: %j', opts); + } + var uri = util.format('%s/v1/o/%s/e/%s/references', opts.baseuri, opts.organization, opts.environment); + var requestOptions = { + uri: uri, + method:'GET', + json:true + } + command_utils.run('listReferences', opts,requestOptions,cb) +};