@rockcarver/frodo-lib 0.12.0 → 0.12.2-0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +22 -2
- package/cjs/api/AuthenticateApi.js +44 -14
- package/cjs/api/AuthenticateApi.js.map +1 -1
- package/cjs/api/BaseApi.js +171 -90
- package/cjs/api/BaseApi.js.map +1 -1
- package/cjs/api/CirclesOfTrustApi.js +87 -31
- package/cjs/api/CirclesOfTrustApi.js.map +1 -1
- package/cjs/api/EmailTemplateApi.js +48 -9
- package/cjs/api/EmailTemplateApi.js.map +1 -1
- package/cjs/api/IdmConfigApi.js +91 -25
- package/cjs/api/IdmConfigApi.js.map +1 -1
- package/cjs/api/LogApi.js +84 -29
- package/cjs/api/LogApi.js.map +1 -1
- package/cjs/api/ManagedObjectApi.js +66 -19
- package/cjs/api/ManagedObjectApi.js.map +1 -1
- package/cjs/api/NodeApi.js +190 -0
- package/cjs/api/NodeApi.js.map +1 -0
- package/cjs/api/NodeApi.test.js.map +1 -0
- package/cjs/api/OAuth2ClientApi.js +73 -27
- package/cjs/api/OAuth2ClientApi.js.map +1 -1
- package/cjs/api/OAuth2OIDCApi.js +82 -31
- package/cjs/api/OAuth2OIDCApi.js.map +1 -1
- package/cjs/api/OAuth2ProviderApi.js +39 -14
- package/cjs/api/OAuth2ProviderApi.js.map +1 -1
- package/cjs/api/RealmApi.js +100 -36
- package/cjs/api/RealmApi.js.map +1 -1
- package/cjs/api/Saml2Api.js +162 -74
- package/cjs/api/Saml2Api.js.map +1 -1
- package/cjs/api/ScriptApi.js +84 -29
- package/cjs/api/ScriptApi.js.map +1 -1
- package/cjs/api/SecretsApi.js +188 -69
- package/cjs/api/SecretsApi.js.map +1 -1
- package/cjs/api/ServerInfoApi.js +48 -14
- package/cjs/api/ServerInfoApi.js.map +1 -1
- package/cjs/api/SocialIdentityProvidersApi.js +103 -37
- package/cjs/api/SocialIdentityProvidersApi.js.map +1 -1
- package/cjs/api/StartupApi.js +74 -26
- package/cjs/api/StartupApi.js.map +1 -1
- package/cjs/api/StartupApi.test.js.map +1 -0
- package/cjs/api/ThemeApi.js +188 -96
- package/cjs/api/ThemeApi.js.map +1 -1
- package/cjs/api/TreeApi.js +96 -113
- package/cjs/api/TreeApi.js.map +1 -1
- package/cjs/api/TreeApi.test.js.map +1 -0
- package/cjs/api/VariablesApi.js +106 -39
- package/cjs/api/VariablesApi.js.map +1 -1
- package/cjs/api/utils/ApiUtils.js +41 -21
- package/cjs/api/utils/ApiUtils.js.map +1 -1
- package/cjs/api/utils/ApiUtils.test.js.map +1 -1
- package/cjs/api/utils/Base64.js +35 -10
- package/cjs/api/utils/Base64.js.map +1 -1
- package/cjs/index.js +126 -41
- package/cjs/index.js.map +1 -1
- package/cjs/index.test.js.map +1 -1
- package/cjs/ops/AdminOps.js +649 -480
- package/cjs/ops/AdminOps.js.map +1 -1
- package/cjs/ops/AuthenticateOps.js +302 -211
- package/cjs/ops/AuthenticateOps.js.map +1 -1
- package/cjs/ops/AuthenticateOps.test.js.map +1 -1
- package/cjs/ops/CirclesOfTrustOps.js +356 -219
- package/cjs/ops/CirclesOfTrustOps.js.map +1 -1
- package/cjs/ops/ConnectionProfileOps.js +200 -122
- package/cjs/ops/ConnectionProfileOps.js.map +1 -1
- package/cjs/ops/ConnectionProfileOps.test.js.map +1 -1
- package/cjs/ops/EmailTemplateOps.js +301 -192
- package/cjs/ops/EmailTemplateOps.js.map +1 -1
- package/cjs/ops/IdmOps.js +190 -121
- package/cjs/ops/IdmOps.js.map +1 -1
- package/cjs/ops/IdpOps.js +327 -196
- package/cjs/ops/IdpOps.js.map +1 -1
- package/cjs/ops/JourneyOps.js +1402 -1131
- package/cjs/ops/JourneyOps.js.map +1 -1
- package/cjs/ops/LogOps.js +125 -75
- package/cjs/ops/LogOps.js.map +1 -1
- package/cjs/ops/ManagedObjectOps.js +43 -16
- package/cjs/ops/ManagedObjectOps.js.map +1 -1
- package/cjs/ops/OAuth2ClientOps.js +155 -87
- package/cjs/ops/OAuth2ClientOps.js.map +1 -1
- package/cjs/ops/OrganizationOps.js +89 -56
- package/cjs/ops/OrganizationOps.js.map +1 -1
- package/cjs/ops/RealmOps.js +131 -83
- package/cjs/ops/RealmOps.js.map +1 -1
- package/cjs/ops/SamlOps.js +497 -331
- package/cjs/ops/SamlOps.js.map +1 -1
- package/cjs/ops/ScriptOps.js +215 -133
- package/cjs/ops/ScriptOps.js.map +1 -1
- package/cjs/ops/SecretsOps.js +269 -156
- package/cjs/ops/SecretsOps.js.map +1 -1
- package/cjs/ops/StartupOps.js +100 -75
- package/cjs/ops/StartupOps.js.map +1 -1
- package/cjs/ops/ThemeOps.js +373 -221
- package/cjs/ops/ThemeOps.js.map +1 -1
- package/cjs/ops/VariablesOps.js +168 -90
- package/cjs/ops/VariablesOps.js.map +1 -1
- package/cjs/ops/utils/Console.js +68 -33
- package/cjs/ops/utils/Console.js.map +1 -1
- package/cjs/ops/utils/DataProtection.js +100 -64
- package/cjs/ops/utils/DataProtection.js.map +1 -1
- package/cjs/ops/utils/DataProtection.test.js.map +1 -1
- package/cjs/ops/utils/ExportImportUtils.js +86 -47
- package/cjs/ops/utils/ExportImportUtils.js.map +1 -1
- package/cjs/ops/utils/ExportImportUtils.test.js.map +1 -1
- package/cjs/ops/utils/OpsUtils.js +47 -20
- package/cjs/ops/utils/OpsUtils.js.map +1 -1
- package/cjs/ops/utils/Wordwrap.js +10 -2
- package/cjs/ops/utils/Wordwrap.js.map +1 -1
- package/cjs/storage/SessionStorage.js +20 -8
- package/cjs/storage/SessionStorage.js.map +1 -1
- package/cjs/storage/StaticStorage.js +26 -10
- package/cjs/storage/StaticStorage.js.map +1 -1
- package/esm/api/BaseApi.mjs +35 -7
- package/esm/api/NodeApi.mjs +114 -0
- package/esm/api/NodeApi.test.mjs +105 -0
- package/esm/api/StartupApi.mjs +18 -8
- package/esm/api/StartupApi.test.mjs +56 -0
- package/esm/api/TreeApi.mjs +27 -99
- package/esm/api/TreeApi.test.mjs +175 -0
- package/esm/index.mjs +7 -5
- package/esm/ops/IdpOps.mjs +1 -1
- package/esm/ops/JourneyOps.mjs +165 -154
- package/esm/ops/StartupOps.mjs +59 -62
- package/esm/ops/utils/Console.mjs +3 -2
- package/package.json +7 -4
- package/types/api/AuthenticateApi.d.ts +2 -0
- package/types/api/AuthenticateApi.d.ts.map +1 -0
- package/types/api/BaseApi.d.ts +50 -0
- package/types/api/BaseApi.d.ts.map +1 -0
- package/types/api/CirclesOfTrustApi.d.ts +24 -0
- package/types/api/CirclesOfTrustApi.d.ts.map +1 -0
- package/types/api/EmailTemplateApi.d.ts +22 -0
- package/types/api/EmailTemplateApi.d.ts.map +1 -0
- package/types/api/IdmConfigApi.d.ts +39 -0
- package/types/api/IdmConfigApi.d.ts.map +1 -0
- package/types/api/LogApi.d.ts +4 -0
- package/types/api/LogApi.d.ts.map +1 -0
- package/types/api/ManagedObjectApi.d.ts +21 -0
- package/types/api/ManagedObjectApi.d.ts.map +1 -0
- package/types/api/NodeApi.d.ts +38 -0
- package/types/api/NodeApi.d.ts.map +1 -0
- package/types/api/OAuth2ClientApi.d.ts +18 -0
- package/types/api/OAuth2ClientApi.d.ts.map +1 -0
- package/types/api/OAuth2OIDCApi.d.ts +22 -0
- package/types/api/OAuth2OIDCApi.d.ts.map +1 -0
- package/types/api/OAuth2ProviderApi.d.ts +5 -0
- package/types/api/OAuth2ProviderApi.d.ts.map +1 -0
- package/types/api/RealmApi.d.ts +30 -0
- package/types/api/RealmApi.d.ts.map +1 -0
- package/types/api/Saml2Api.d.ts +52 -0
- package/types/api/Saml2Api.d.ts.map +1 -0
- package/types/api/ScriptApi.d.ts +24 -0
- package/types/api/ScriptApi.d.ts.map +1 -0
- package/types/api/SecretsApi.d.ts +10 -0
- package/types/api/SecretsApi.d.ts.map +1 -0
- package/types/api/ServerInfoApi.d.ts +10 -0
- package/types/api/ServerInfoApi.d.ts.map +1 -0
- package/types/api/SocialIdentityProvidersApi.d.ts +31 -0
- package/types/api/SocialIdentityProvidersApi.d.ts.map +1 -0
- package/types/api/StartupApi.d.ts +14 -0
- package/types/api/StartupApi.d.ts.map +1 -0
- package/types/api/ThemeApi.d.ts +54 -0
- package/types/api/ThemeApi.d.ts.map +1 -0
- package/types/api/TreeApi.d.ts +24 -0
- package/types/api/TreeApi.d.ts.map +1 -0
- package/types/api/VariablesApi.d.ts +32 -0
- package/types/api/VariablesApi.d.ts.map +1 -0
- package/types/api/utils/ApiUtils.d.ts +29 -0
- package/types/api/utils/ApiUtils.d.ts.map +1 -0
- package/types/api/utils/Base64.d.ts +30 -0
- package/types/api/utils/Base64.d.ts.map +1 -0
- package/types/index.d.ts +26 -0
- package/types/index.d.ts.map +1 -0
- package/types/ops/AdminOps.d.ts +11 -0
- package/types/ops/AdminOps.d.ts.map +1 -0
- package/types/ops/AuthenticateOps.d.ts +6 -0
- package/types/ops/AuthenticateOps.d.ts.map +1 -0
- package/types/ops/CirclesOfTrustOps.d.ts +40 -0
- package/types/ops/CirclesOfTrustOps.d.ts.map +1 -0
- package/types/ops/ConnectionProfileOps.d.ts +47 -0
- package/types/ops/ConnectionProfileOps.d.ts.map +1 -0
- package/types/ops/EmailTemplateOps.d.ts +40 -0
- package/types/ops/EmailTemplateOps.d.ts.map +1 -0
- package/types/ops/IdmOps.d.ts +27 -0
- package/types/ops/IdmOps.d.ts.map +1 -0
- package/types/ops/IdpOps.d.ts +45 -0
- package/types/ops/IdpOps.d.ts.map +1 -0
- package/types/ops/JourneyOps.d.ts +145 -0
- package/types/ops/JourneyOps.d.ts.map +1 -0
- package/types/ops/LogOps.d.ts +5 -0
- package/types/ops/LogOps.d.ts.map +1 -0
- package/types/ops/ManagedObjectOps.d.ts +14 -0
- package/types/ops/ManagedObjectOps.d.ts.map +1 -0
- package/types/ops/OAuth2ClientOps.d.ts +24 -0
- package/types/ops/OAuth2ClientOps.d.ts.map +1 -0
- package/types/ops/OrganizationOps.d.ts +11 -0
- package/types/ops/OrganizationOps.d.ts.map +1 -0
- package/types/ops/RealmOps.d.ts +22 -0
- package/types/ops/RealmOps.d.ts.map +1 -0
- package/types/ops/SamlOps.d.ts +51 -0
- package/types/ops/SamlOps.d.ts.map +1 -0
- package/types/ops/ScriptOps.d.ts +30 -0
- package/types/ops/ScriptOps.d.ts.map +1 -0
- package/types/ops/SecretsOps.d.ts +63 -0
- package/types/ops/SecretsOps.d.ts.map +1 -0
- package/types/ops/StartupOps.d.ts +25 -0
- package/types/ops/StartupOps.d.ts.map +1 -0
- package/types/ops/ThemeOps.d.ts +66 -0
- package/types/ops/ThemeOps.d.ts.map +1 -0
- package/types/ops/VariablesOps.d.ts +39 -0
- package/types/ops/VariablesOps.d.ts.map +1 -0
- package/types/ops/utils/Console.d.ts +63 -0
- package/types/ops/utils/Console.d.ts.map +1 -0
- package/types/ops/utils/DataProtection.d.ts +6 -0
- package/types/ops/utils/DataProtection.d.ts.map +1 -0
- package/types/ops/utils/ExportImportUtils.d.ts +22 -0
- package/types/ops/utils/ExportImportUtils.d.ts.map +1 -0
- package/types/ops/utils/OpsUtils.d.ts +27 -0
- package/types/ops/utils/OpsUtils.d.ts.map +1 -0
- package/types/ops/utils/Wordwrap.d.ts +1 -0
- package/types/ops/utils/Wordwrap.d.ts.map +1 -0
- package/types/storage/SessionStorage.d.ts +47 -0
- package/types/storage/SessionStorage.d.ts.map +1 -0
- package/types/storage/StaticStorage.d.ts +14 -0
- package/types/storage/StaticStorage.d.ts.map +1 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CirclesOfTrustOps.js","names":["fs","_","createTable","printMessage","createProgressIndicator","updateProgressIndicator","stopProgressIndicator","getCirclesOfTrust","getCircleOfTrust","createCircleOfTrust","getRealmString","getTypedFilename","saveJsonToFile","validateImport","getFileDataTemplate","meta","script","saml","hosted","remote","metadata","cot","listCirclesOfTrust","long","cotList","response","status","data","result","error","sort","a","b","_id","localeCompare","forEach","table","push","description","trustedProviders","map","provider","split","join","toString","exportDependencies","cotData","fileData","exportCircleOfTrust","cotId","file","fileName","then","cloneDeep","_rev","brightCyan","catch","err","exportCirclesOfTrustToFile","allCotData","length","exportCirclesOfTrustToFiles","importDependencies","importCircleOfTrust","readFile","JSON","parse","get","createProviderErr","importFirstCircleOfTrust","hasOwnProperty","call","createCircleOfTrustErr","importCirclesOfTrustFromFile","Object","keys","importCirclesOfTrustFromFiles","names","readdirSync","jsonFiles","filter","name","toLowerCase","endsWith","total","totalErrors","readFileSync","errors"],"sources":["ops/CirclesOfTrustOps.ts"],"sourcesContent":["import fs from 'fs';\nimport _ from 'lodash';\nimport {\n createTable,\n printMessage,\n createProgressIndicator,\n updateProgressIndicator,\n stopProgressIndicator,\n} from './utils/Console';\nimport {\n getCirclesOfTrust,\n getCircleOfTrust,\n createCircleOfTrust,\n} from '../api/CirclesOfTrustApi';\nimport {\n getRealmString,\n getTypedFilename,\n saveJsonToFile,\n validateImport,\n} from './utils/ExportImportUtils';\n\n// use a function vs a template variable to avoid problems in loops\nfunction getFileDataTemplate() {\n return {\n meta: {},\n script: {},\n saml: {\n hosted: {},\n remote: {},\n metadata: {},\n cot: {},\n },\n };\n}\n\n/**\n * List entity providers\n * @param {String} long Long list format with details\n */\nexport async function listCirclesOfTrust(long = false) {\n let cotList = [];\n try {\n const response = await getCirclesOfTrust();\n if (response.status < 200 || response.status > 399) {\n printMessage(response, 'data');\n printMessage(`getCirclesOfTrust: ${response.status}`, 'error');\n }\n cotList = response.data.result;\n } catch (error) {\n printMessage(`getCirclesOfTrust ERROR: ${error}`, 'error');\n printMessage(error, 'data');\n }\n cotList.sort((a, b) => a._id.localeCompare(b._id));\n if (!long) {\n cotList.forEach((cot) => {\n printMessage(`${cot._id}`, 'data');\n });\n } else {\n const table = createTable([\n 'Name'['brightCyan'],\n 'Description'['brightCyan'],\n 'Status'['brightCyan'],\n 'Trusted Providers'['brightCyan'],\n ]);\n cotList.forEach((cot) => {\n table.push([\n cot._id,\n cot.description,\n cot.status,\n cot.trustedProviders\n .map((provider) => provider.split('|')[0])\n .join('\\n'),\n ]);\n });\n printMessage(table.toString());\n }\n}\n\n/**\n * Include dependencies in the export file\n * @param {Object} cotData Object representing a SAML circle of trust\n * @param {Object} fileData File data object to add dependencies to\n */\nasync function exportDependencies(cotData, fileData) {\n // TODO: Export dependencies\n return [cotData, fileData];\n}\n\n/**\n * Export a single circle of trust to file\n * @param {String} cotId circle of trust id/name\n * @param {String} file Optional filename\n */\nexport async function exportCircleOfTrust(cotId, file = null) {\n let fileName = file;\n if (!fileName) {\n fileName = getTypedFilename(cotId, 'cot.saml');\n }\n createProgressIndicator(1, `Exporting circle of trust ${cotId}`);\n getCircleOfTrust(cotId)\n .then(async (response) => {\n const cotData = _.cloneDeep(response.data);\n delete cotData._rev;\n updateProgressIndicator(`Exporting ${cotId}`);\n const fileData = getFileDataTemplate();\n fileData.saml.cot[cotId] = cotData;\n await exportDependencies(cotData, fileData);\n saveJsonToFile(fileData, fileName);\n stopProgressIndicator(\n `Exported ${cotId.brightCyan} to ${fileName.brightCyan}.`\n );\n })\n .catch((err) => {\n stopProgressIndicator(`${err}`);\n printMessage(err, 'error');\n });\n}\n\n/**\n * Export all circles of trust to one file\n * @param {String} file Optional filename\n */\nexport async function exportCirclesOfTrustToFile(file = null) {\n let fileName = file;\n if (!fileName) {\n fileName = getTypedFilename(\n `all${getRealmString()}CirclesOfTrust`,\n 'cot.saml'\n );\n }\n const fileData = getFileDataTemplate();\n let allCotData = [];\n try {\n const response = await getCirclesOfTrust();\n if (response.status < 200 || response.status > 399) {\n printMessage(response, 'data');\n printMessage(`getCirclesOfTrust: ${response.status}`, 'error');\n }\n allCotData = _.cloneDeep(response.data.result);\n createProgressIndicator(allCotData.length, 'Exporting circles of trust');\n for (const cotData of allCotData) {\n delete cotData._rev;\n updateProgressIndicator(`Exporting circle of trust ${cotData._id}`);\n // eslint-disable-next-line no-await-in-loop\n await exportDependencies(cotData, fileData);\n fileData.saml.cot[cotData._id] = cotData;\n }\n saveJsonToFile(fileData, fileName);\n stopProgressIndicator(\n `${allCotData.length} circle(s) of trust exported to ${fileName}.`\n );\n } catch (error) {\n printMessage(`getCirclesOfTrust ERROR: ${error}`, 'error');\n printMessage(error, 'data');\n }\n}\n\n/**\n * Export all circles of trust to individual files\n */\nexport async function exportCirclesOfTrustToFiles() {\n let allCotData = [];\n try {\n const response = await getCirclesOfTrust();\n if (response.status < 200 || response.status > 399) {\n printMessage(response, 'data');\n printMessage(`getCirclesOfTrust: ${response.status}`, 'error');\n }\n allCotData = _.cloneDeep(response.data.result);\n createProgressIndicator(allCotData.length, 'Exporting circles of trust');\n for (const cotData of allCotData) {\n delete cotData._rev;\n updateProgressIndicator(`Exporting circle of trust ${cotData._id}`);\n const fileName = getTypedFilename(cotData._id, 'cot.saml');\n const fileData = getFileDataTemplate();\n // eslint-disable-next-line no-await-in-loop\n await exportDependencies(cotData, fileData);\n fileData.saml.cot[cotData._id] = cotData;\n saveJsonToFile(fileData, fileName);\n }\n stopProgressIndicator(`${allCotData.length} providers exported.`);\n } catch (error) {\n printMessage(`getCirclesOfTrust ERROR: ${error}`, 'error');\n printMessage(error, 'data');\n }\n}\n\n/**\n * Include dependencies from the import file\n * @param {Object} cotData Object representing a SAML circle of trust\n * @param {Object} fileData File data object to read dependencies from\n */\nasync function importDependencies(cotData, fileData) {\n // TODO: Import dependencies\n return [cotData, fileData];\n}\n\n/**\n * Import a SAML circle of trust by id/name from file\n * @param {String} cotId Circle of trust id/name\n * @param {String} file Import file name\n */\nexport async function importCircleOfTrust(cotId, file) {\n fs.readFile(file, 'utf8', async (err, data) => {\n if (err) throw err;\n const fileData = JSON.parse(data);\n if (validateImport(fileData.meta)) {\n createProgressIndicator(1, 'Importing circle of trust...');\n const cotData = _.get(fileData, ['saml', 'cot', cotId]);\n if (cotData) {\n updateProgressIndicator(`Importing ${cotId}`);\n await importDependencies(cotData, fileData);\n createCircleOfTrust(cotData)\n .then(() => {\n stopProgressIndicator(`Successfully imported ${cotId}.`);\n })\n .catch((createProviderErr) => {\n stopProgressIndicator(`Error importing ${cotId}.`);\n printMessage(`Error importing ${cotId}`, 'error');\n printMessage(createProviderErr.response.data, 'error');\n });\n } else {\n stopProgressIndicator(\n `Circle of trust ${cotId.brightCyan} not found in ${file.brightCyan}!`\n );\n }\n } else {\n printMessage('Import validation failed...', 'error');\n }\n });\n}\n\n/**\n * Import first SAML circle of trust from file\n * @param {String} file Import file name\n */\nexport async function importFirstCircleOfTrust(file) {\n fs.readFile(file, 'utf8', async (err, data) => {\n if (err) throw err;\n const fileData = JSON.parse(data);\n if (validateImport(fileData.meta)) {\n createProgressIndicator(1, 'Importing circle of trust...');\n for (const cotId in fileData.saml.cot) {\n if ({}.hasOwnProperty.call(fileData.saml.cot, cotId)) {\n const cotData = _.cloneDeep(fileData.saml.cot[cotId]);\n updateProgressIndicator(`Importing ${cotId}`);\n // eslint-disable-next-line no-await-in-loop\n await importDependencies(cotData, fileData);\n createCircleOfTrust(cotData)\n .then(() => {\n stopProgressIndicator(`Successfully imported ${cotId}.`);\n })\n .catch((createCircleOfTrustErr) => {\n stopProgressIndicator(`Error importing ${cotId}.`);\n printMessage(`Error importing ${cotId}`, 'error');\n printMessage(createCircleOfTrustErr.response.data, 'error');\n });\n break;\n }\n }\n } else {\n printMessage('Import validation failed...', 'error');\n }\n });\n}\n\n/**\n * Import all SAML circles of trust from file\n * @param {String} file Import file name\n */\nexport async function importCirclesOfTrustFromFile(file) {\n fs.readFile(file, 'utf8', async (err, data) => {\n if (err) throw err;\n const fileData = JSON.parse(data);\n if (validateImport(fileData.meta)) {\n createProgressIndicator(\n Object.keys(fileData.saml.cot).length,\n 'Importing circles of trust...'\n );\n for (const cotId in fileData.saml.cot) {\n if ({}.hasOwnProperty.call(fileData.saml.cot, cotId)) {\n const cotData = _.cloneDeep(fileData.saml.cot[cotId]);\n // eslint-disable-next-line no-await-in-loop\n await importDependencies(cotData, fileData);\n try {\n // eslint-disable-next-line no-await-in-loop\n await createCircleOfTrust(cotData);\n updateProgressIndicator(`Imported ${cotId}`);\n } catch (createCircleOfTrustErr) {\n printMessage(`\\nError importing ${cotId}`, 'error');\n printMessage(createCircleOfTrustErr.response.data, 'error');\n }\n }\n }\n stopProgressIndicator(`Circles of trust imported.`);\n } else {\n printMessage('Import validation failed...', 'error');\n }\n });\n}\n\n/**\n * Import all SAML circles of trust from all *.cot.saml.json files in the current directory\n */\nexport async function importCirclesOfTrustFromFiles() {\n const names = fs.readdirSync('.');\n const jsonFiles = names.filter((name) =>\n name.toLowerCase().endsWith('.cot.saml.json')\n );\n createProgressIndicator(jsonFiles.length, 'Importing circles or trust...');\n let total = 0;\n let totalErrors = 0;\n for (const file of jsonFiles) {\n const data = fs.readFileSync(file, 'utf8');\n const fileData = JSON.parse(data);\n if (validateImport(fileData.meta)) {\n total += _.keys(fileData.saml.cot).length;\n let errors = 0;\n for (const cotId in fileData.saml.cot) {\n if ({}.hasOwnProperty.call(fileData.saml.cot, cotId)) {\n const cotData = _.cloneDeep(fileData.saml.cot[cotId]);\n // eslint-disable-next-line no-await-in-loop\n await importDependencies(cotData, fileData);\n try {\n // eslint-disable-next-line no-await-in-loop\n await createCircleOfTrust(cotData);\n // updateProgressIndicator(`Imported ${cotId}`);\n } catch (createCircleOfTrustErr) {\n errors += 1;\n printMessage(`\\nError importing ${cotId}`, 'error');\n printMessage(createCircleOfTrustErr.response.data, 'error');\n }\n }\n }\n totalErrors += errors;\n updateProgressIndicator(\n `Imported ${\n _.keys(fileData.saml.cot).length - errors\n } circle(s) of trust from ${file}`\n );\n } else {\n printMessage(`Validation of ${file} failed!`, 'error');\n }\n }\n stopProgressIndicator(\n `Imported ${total - totalErrors} of ${total} circle(s) of trust from ${\n jsonFiles.length\n } file(s).`\n );\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"CirclesOfTrustOps.js","names":["getFileDataTemplate","meta","script","saml","hosted","remote","metadata","cot","listCirclesOfTrust","long","cotList","response","getCirclesOfTrust","status","printMessage","data","result","error","sort","a","b","_id","localeCompare","forEach","table","createTable","push","description","trustedProviders","map","provider","split","join","toString","exportDependencies","cotData","fileData","exportCircleOfTrust","cotId","file","fileName","getTypedFilename","createProgressIndicator","getCircleOfTrust","then","_","cloneDeep","_rev","updateProgressIndicator","saveJsonToFile","stopProgressIndicator","brightCyan","catch","err","exportCirclesOfTrustToFile","getRealmString","allCotData","length","exportCirclesOfTrustToFiles","importDependencies","importCircleOfTrust","fs","readFile","JSON","parse","validateImport","get","createCircleOfTrust","createProviderErr","importFirstCircleOfTrust","hasOwnProperty","call","createCircleOfTrustErr","importCirclesOfTrustFromFile","Object","keys","importCirclesOfTrustFromFiles","names","readdirSync","jsonFiles","filter","name","toLowerCase","endsWith","total","totalErrors","readFileSync","errors"],"sources":["ops/CirclesOfTrustOps.ts"],"sourcesContent":["import fs from 'fs';\nimport _ from 'lodash';\nimport {\n createTable,\n printMessage,\n createProgressIndicator,\n updateProgressIndicator,\n stopProgressIndicator,\n} from './utils/Console';\nimport {\n getCirclesOfTrust,\n getCircleOfTrust,\n createCircleOfTrust,\n} from '../api/CirclesOfTrustApi';\nimport {\n getRealmString,\n getTypedFilename,\n saveJsonToFile,\n validateImport,\n} from './utils/ExportImportUtils';\n\n// use a function vs a template variable to avoid problems in loops\nfunction getFileDataTemplate() {\n return {\n meta: {},\n script: {},\n saml: {\n hosted: {},\n remote: {},\n metadata: {},\n cot: {},\n },\n };\n}\n\n/**\n * List entity providers\n * @param {String} long Long list format with details\n */\nexport async function listCirclesOfTrust(long = false) {\n let cotList = [];\n try {\n const response = await getCirclesOfTrust();\n if (response.status < 200 || response.status > 399) {\n printMessage(response, 'data');\n printMessage(`getCirclesOfTrust: ${response.status}`, 'error');\n }\n cotList = response.data.result;\n } catch (error) {\n printMessage(`getCirclesOfTrust ERROR: ${error}`, 'error');\n printMessage(error, 'data');\n }\n cotList.sort((a, b) => a._id.localeCompare(b._id));\n if (!long) {\n cotList.forEach((cot) => {\n printMessage(`${cot._id}`, 'data');\n });\n } else {\n const table = createTable([\n 'Name'['brightCyan'],\n 'Description'['brightCyan'],\n 'Status'['brightCyan'],\n 'Trusted Providers'['brightCyan'],\n ]);\n cotList.forEach((cot) => {\n table.push([\n cot._id,\n cot.description,\n cot.status,\n cot.trustedProviders\n .map((provider) => provider.split('|')[0])\n .join('\\n'),\n ]);\n });\n printMessage(table.toString());\n }\n}\n\n/**\n * Include dependencies in the export file\n * @param {Object} cotData Object representing a SAML circle of trust\n * @param {Object} fileData File data object to add dependencies to\n */\nasync function exportDependencies(cotData, fileData) {\n // TODO: Export dependencies\n return [cotData, fileData];\n}\n\n/**\n * Export a single circle of trust to file\n * @param {String} cotId circle of trust id/name\n * @param {String} file Optional filename\n */\nexport async function exportCircleOfTrust(cotId, file = null) {\n let fileName = file;\n if (!fileName) {\n fileName = getTypedFilename(cotId, 'cot.saml');\n }\n createProgressIndicator(1, `Exporting circle of trust ${cotId}`);\n getCircleOfTrust(cotId)\n .then(async (response) => {\n const cotData = _.cloneDeep(response.data);\n delete cotData._rev;\n updateProgressIndicator(`Exporting ${cotId}`);\n const fileData = getFileDataTemplate();\n fileData.saml.cot[cotId] = cotData;\n await exportDependencies(cotData, fileData);\n saveJsonToFile(fileData, fileName);\n stopProgressIndicator(\n `Exported ${cotId.brightCyan} to ${fileName.brightCyan}.`\n );\n })\n .catch((err) => {\n stopProgressIndicator(`${err}`);\n printMessage(err, 'error');\n });\n}\n\n/**\n * Export all circles of trust to one file\n * @param {String} file Optional filename\n */\nexport async function exportCirclesOfTrustToFile(file = null) {\n let fileName = file;\n if (!fileName) {\n fileName = getTypedFilename(\n `all${getRealmString()}CirclesOfTrust`,\n 'cot.saml'\n );\n }\n const fileData = getFileDataTemplate();\n let allCotData = [];\n try {\n const response = await getCirclesOfTrust();\n if (response.status < 200 || response.status > 399) {\n printMessage(response, 'data');\n printMessage(`getCirclesOfTrust: ${response.status}`, 'error');\n }\n allCotData = _.cloneDeep(response.data.result);\n createProgressIndicator(allCotData.length, 'Exporting circles of trust');\n for (const cotData of allCotData) {\n delete cotData._rev;\n updateProgressIndicator(`Exporting circle of trust ${cotData._id}`);\n // eslint-disable-next-line no-await-in-loop\n await exportDependencies(cotData, fileData);\n fileData.saml.cot[cotData._id] = cotData;\n }\n saveJsonToFile(fileData, fileName);\n stopProgressIndicator(\n `${allCotData.length} circle(s) of trust exported to ${fileName}.`\n );\n } catch (error) {\n printMessage(`getCirclesOfTrust ERROR: ${error}`, 'error');\n printMessage(error, 'data');\n }\n}\n\n/**\n * Export all circles of trust to individual files\n */\nexport async function exportCirclesOfTrustToFiles() {\n let allCotData = [];\n try {\n const response = await getCirclesOfTrust();\n if (response.status < 200 || response.status > 399) {\n printMessage(response, 'data');\n printMessage(`getCirclesOfTrust: ${response.status}`, 'error');\n }\n allCotData = _.cloneDeep(response.data.result);\n createProgressIndicator(allCotData.length, 'Exporting circles of trust');\n for (const cotData of allCotData) {\n delete cotData._rev;\n updateProgressIndicator(`Exporting circle of trust ${cotData._id}`);\n const fileName = getTypedFilename(cotData._id, 'cot.saml');\n const fileData = getFileDataTemplate();\n // eslint-disable-next-line no-await-in-loop\n await exportDependencies(cotData, fileData);\n fileData.saml.cot[cotData._id] = cotData;\n saveJsonToFile(fileData, fileName);\n }\n stopProgressIndicator(`${allCotData.length} providers exported.`);\n } catch (error) {\n printMessage(`getCirclesOfTrust ERROR: ${error}`, 'error');\n printMessage(error, 'data');\n }\n}\n\n/**\n * Include dependencies from the import file\n * @param {Object} cotData Object representing a SAML circle of trust\n * @param {Object} fileData File data object to read dependencies from\n */\nasync function importDependencies(cotData, fileData) {\n // TODO: Import dependencies\n return [cotData, fileData];\n}\n\n/**\n * Import a SAML circle of trust by id/name from file\n * @param {String} cotId Circle of trust id/name\n * @param {String} file Import file name\n */\nexport async function importCircleOfTrust(cotId, file) {\n fs.readFile(file, 'utf8', async (err, data) => {\n if (err) throw err;\n const fileData = JSON.parse(data);\n if (validateImport(fileData.meta)) {\n createProgressIndicator(1, 'Importing circle of trust...');\n const cotData = _.get(fileData, ['saml', 'cot', cotId]);\n if (cotData) {\n updateProgressIndicator(`Importing ${cotId}`);\n await importDependencies(cotData, fileData);\n createCircleOfTrust(cotData)\n .then(() => {\n stopProgressIndicator(`Successfully imported ${cotId}.`);\n })\n .catch((createProviderErr) => {\n stopProgressIndicator(`Error importing ${cotId}.`);\n printMessage(`Error importing ${cotId}`, 'error');\n printMessage(createProviderErr.response.data, 'error');\n });\n } else {\n stopProgressIndicator(\n `Circle of trust ${cotId.brightCyan} not found in ${file.brightCyan}!`\n );\n }\n } else {\n printMessage('Import validation failed...', 'error');\n }\n });\n}\n\n/**\n * Import first SAML circle of trust from file\n * @param {String} file Import file name\n */\nexport async function importFirstCircleOfTrust(file) {\n fs.readFile(file, 'utf8', async (err, data) => {\n if (err) throw err;\n const fileData = JSON.parse(data);\n if (validateImport(fileData.meta)) {\n createProgressIndicator(1, 'Importing circle of trust...');\n for (const cotId in fileData.saml.cot) {\n if ({}.hasOwnProperty.call(fileData.saml.cot, cotId)) {\n const cotData = _.cloneDeep(fileData.saml.cot[cotId]);\n updateProgressIndicator(`Importing ${cotId}`);\n // eslint-disable-next-line no-await-in-loop\n await importDependencies(cotData, fileData);\n createCircleOfTrust(cotData)\n .then(() => {\n stopProgressIndicator(`Successfully imported ${cotId}.`);\n })\n .catch((createCircleOfTrustErr) => {\n stopProgressIndicator(`Error importing ${cotId}.`);\n printMessage(`Error importing ${cotId}`, 'error');\n printMessage(createCircleOfTrustErr.response.data, 'error');\n });\n break;\n }\n }\n } else {\n printMessage('Import validation failed...', 'error');\n }\n });\n}\n\n/**\n * Import all SAML circles of trust from file\n * @param {String} file Import file name\n */\nexport async function importCirclesOfTrustFromFile(file) {\n fs.readFile(file, 'utf8', async (err, data) => {\n if (err) throw err;\n const fileData = JSON.parse(data);\n if (validateImport(fileData.meta)) {\n createProgressIndicator(\n Object.keys(fileData.saml.cot).length,\n 'Importing circles of trust...'\n );\n for (const cotId in fileData.saml.cot) {\n if ({}.hasOwnProperty.call(fileData.saml.cot, cotId)) {\n const cotData = _.cloneDeep(fileData.saml.cot[cotId]);\n // eslint-disable-next-line no-await-in-loop\n await importDependencies(cotData, fileData);\n try {\n // eslint-disable-next-line no-await-in-loop\n await createCircleOfTrust(cotData);\n updateProgressIndicator(`Imported ${cotId}`);\n } catch (createCircleOfTrustErr) {\n printMessage(`\\nError importing ${cotId}`, 'error');\n printMessage(createCircleOfTrustErr.response.data, 'error');\n }\n }\n }\n stopProgressIndicator(`Circles of trust imported.`);\n } else {\n printMessage('Import validation failed...', 'error');\n }\n });\n}\n\n/**\n * Import all SAML circles of trust from all *.cot.saml.json files in the current directory\n */\nexport async function importCirclesOfTrustFromFiles() {\n const names = fs.readdirSync('.');\n const jsonFiles = names.filter((name) =>\n name.toLowerCase().endsWith('.cot.saml.json')\n );\n createProgressIndicator(jsonFiles.length, 'Importing circles or trust...');\n let total = 0;\n let totalErrors = 0;\n for (const file of jsonFiles) {\n const data = fs.readFileSync(file, 'utf8');\n const fileData = JSON.parse(data);\n if (validateImport(fileData.meta)) {\n total += _.keys(fileData.saml.cot).length;\n let errors = 0;\n for (const cotId in fileData.saml.cot) {\n if ({}.hasOwnProperty.call(fileData.saml.cot, cotId)) {\n const cotData = _.cloneDeep(fileData.saml.cot[cotId]);\n // eslint-disable-next-line no-await-in-loop\n await importDependencies(cotData, fileData);\n try {\n // eslint-disable-next-line no-await-in-loop\n await createCircleOfTrust(cotData);\n // updateProgressIndicator(`Imported ${cotId}`);\n } catch (createCircleOfTrustErr) {\n errors += 1;\n printMessage(`\\nError importing ${cotId}`, 'error');\n printMessage(createCircleOfTrustErr.response.data, 'error');\n }\n }\n }\n totalErrors += errors;\n updateProgressIndicator(\n `Imported ${\n _.keys(fileData.saml.cot).length - errors\n } circle(s) of trust from ${file}`\n );\n } else {\n printMessage(`Validation of ${file} failed!`, 'error');\n }\n }\n stopProgressIndicator(\n `Imported ${total - totalErrors} of ${total} circle(s) of trust from ${\n jsonFiles.length\n } file(s).`\n );\n}\n"],"mappings":"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"}
|
|
@@ -1,12 +1,39 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.deleteConnectionProfile = deleteConnectionProfile;
|
|
7
|
+
exports.describeConnectionProfile = describeConnectionProfile;
|
|
8
|
+
exports.getConnectionProfile = getConnectionProfile;
|
|
9
|
+
exports.getConnectionProfileByHost = getConnectionProfileByHost;
|
|
10
|
+
exports.getConnectionProfilesPath = getConnectionProfilesPath;
|
|
11
|
+
exports.initConnectionProfiles = initConnectionProfiles;
|
|
12
|
+
exports.listConnectionProfiles = listConnectionProfiles;
|
|
13
|
+
exports.saveConnectionProfile = saveConnectionProfile;
|
|
14
|
+
|
|
15
|
+
var _fs = _interopRequireDefault(require("fs"));
|
|
16
|
+
|
|
17
|
+
var _os = _interopRequireDefault(require("os"));
|
|
18
|
+
|
|
19
|
+
var _path = _interopRequireDefault(require("path"));
|
|
20
|
+
|
|
21
|
+
var _SessionStorage = _interopRequireDefault(require("../storage/SessionStorage"));
|
|
22
|
+
|
|
23
|
+
var _DataProtection = _interopRequireDefault(require("./utils/DataProtection"));
|
|
24
|
+
|
|
25
|
+
var _Console = require("./utils/Console");
|
|
26
|
+
|
|
27
|
+
var _StaticStorage = require("../storage/StaticStorage");
|
|
28
|
+
|
|
29
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
30
|
+
|
|
31
|
+
function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
|
|
32
|
+
|
|
33
|
+
function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
|
|
34
|
+
|
|
35
|
+
var dataProtection = new _DataProtection.default();
|
|
36
|
+
var fileOptions = {
|
|
10
37
|
indentation: 4
|
|
11
38
|
};
|
|
12
39
|
/**
|
|
@@ -14,8 +41,8 @@ const fileOptions = {
|
|
|
14
41
|
* @returns {String} connection profiles file name
|
|
15
42
|
*/
|
|
16
43
|
|
|
17
|
-
|
|
18
|
-
return
|
|
44
|
+
function getConnectionProfilesPath() {
|
|
45
|
+
return _SessionStorage.default.session.getConnectionProfilesPath() || process.env[_StaticStorage.FRODO_CONNECTION_PROFILES_PATH_KEY] || "".concat(_os.default.homedir(), "/.frodo/.frodorc");
|
|
19
46
|
}
|
|
20
47
|
/**
|
|
21
48
|
* Find connection profile
|
|
@@ -24,10 +51,11 @@ export function getConnectionProfilesPath() {
|
|
|
24
51
|
* @returns {Object} connection profile object or null
|
|
25
52
|
*/
|
|
26
53
|
|
|
54
|
+
|
|
27
55
|
function findConnectionProfile(connectionProfiles, host) {
|
|
28
|
-
for (
|
|
56
|
+
for (var tenant in connectionProfiles) {
|
|
29
57
|
if (tenant.includes(host)) {
|
|
30
|
-
|
|
58
|
+
var profile = connectionProfiles[tenant];
|
|
31
59
|
profile.tenant = tenant;
|
|
32
60
|
return profile;
|
|
33
61
|
}
|
|
@@ -41,63 +69,74 @@ function findConnectionProfile(connectionProfiles, host) {
|
|
|
41
69
|
*/
|
|
42
70
|
|
|
43
71
|
|
|
44
|
-
|
|
45
|
-
|
|
72
|
+
function listConnectionProfiles() {
|
|
73
|
+
var long = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
|
|
74
|
+
var filename = getConnectionProfilesPath();
|
|
46
75
|
|
|
47
76
|
try {
|
|
48
|
-
|
|
49
|
-
|
|
77
|
+
var data = _fs.default.readFileSync(filename, 'utf8');
|
|
78
|
+
|
|
79
|
+
var connectionsData = JSON.parse(data);
|
|
50
80
|
|
|
51
81
|
if (long) {
|
|
52
|
-
|
|
82
|
+
var table = (0, _Console.createTable)(['Host', 'Username', 'Log API Key']);
|
|
53
83
|
Object.keys(connectionsData).forEach(c => {
|
|
54
84
|
table.push([c, connectionsData[c].username, connectionsData[c].logApiKey]);
|
|
55
85
|
});
|
|
56
|
-
printMessage(table.toString(), 'data');
|
|
86
|
+
(0, _Console.printMessage)(table.toString(), 'data');
|
|
57
87
|
} else {
|
|
58
88
|
Object.keys(connectionsData).forEach(c => {
|
|
59
|
-
printMessage(
|
|
89
|
+
(0, _Console.printMessage)("".concat(c), 'data');
|
|
60
90
|
});
|
|
61
91
|
}
|
|
62
92
|
|
|
63
|
-
printMessage('Any unique substring of a saved host can be used as the value for host parameter in all commands', 'info');
|
|
93
|
+
(0, _Console.printMessage)('Any unique substring of a saved host can be used as the value for host parameter in all commands', 'info');
|
|
64
94
|
} catch (e) {
|
|
65
|
-
printMessage(
|
|
95
|
+
(0, _Console.printMessage)("No connections found in ".concat(filename, " (").concat(e.message, ")"), 'error');
|
|
66
96
|
}
|
|
67
97
|
}
|
|
68
98
|
/**
|
|
69
99
|
* Initialize connection profiles
|
|
70
100
|
*/
|
|
71
101
|
|
|
72
|
-
|
|
102
|
+
|
|
103
|
+
function initConnectionProfiles() {
|
|
73
104
|
// create connections.json file if it doesn't exist
|
|
74
|
-
|
|
75
|
-
|
|
105
|
+
var filename = getConnectionProfilesPath();
|
|
106
|
+
|
|
107
|
+
var folderName = _path.default.dirname(filename);
|
|
76
108
|
|
|
77
|
-
if (!
|
|
78
|
-
|
|
109
|
+
if (!_fs.default.existsSync(folderName)) {
|
|
110
|
+
_fs.default.mkdirSync(folderName, {
|
|
79
111
|
recursive: true
|
|
80
112
|
});
|
|
81
113
|
|
|
82
|
-
if (!
|
|
83
|
-
|
|
114
|
+
if (!_fs.default.existsSync(filename)) {
|
|
115
|
+
_fs.default.writeFileSync(filename, JSON.stringify({}, null, fileOptions.indentation));
|
|
84
116
|
}
|
|
85
117
|
} // encrypt the password from clear text to aes-256-GCM
|
|
86
118
|
else {
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
119
|
+
var data = _fs.default.readFileSync(filename, 'utf8');
|
|
120
|
+
|
|
121
|
+
var connectionsData = JSON.parse(data);
|
|
122
|
+
var convert = false;
|
|
123
|
+
Object.keys(connectionsData).forEach( /*#__PURE__*/function () {
|
|
124
|
+
var _ref = _asyncToGenerator(function* (conn) {
|
|
125
|
+
if (connectionsData[conn].password) {
|
|
126
|
+
convert = true;
|
|
127
|
+
connectionsData[conn].encodedPassword = yield dataProtection.encrypt(connectionsData[conn].password); // Buffer.from(connectionsData[conn].password).toString('base64');
|
|
128
|
+
|
|
129
|
+
delete connectionsData[conn].password;
|
|
130
|
+
}
|
|
131
|
+
});
|
|
132
|
+
|
|
133
|
+
return function (_x) {
|
|
134
|
+
return _ref.apply(this, arguments);
|
|
135
|
+
};
|
|
136
|
+
}());
|
|
98
137
|
|
|
99
138
|
if (convert) {
|
|
100
|
-
|
|
139
|
+
_fs.default.writeFileSync(filename, JSON.stringify(connectionsData, null, fileOptions.indentation));
|
|
101
140
|
}
|
|
102
141
|
}
|
|
103
142
|
}
|
|
@@ -107,121 +146,160 @@ export function initConnectionProfiles() {
|
|
|
107
146
|
* @returns {Object} connection profile or null
|
|
108
147
|
*/
|
|
109
148
|
|
|
110
|
-
export async function getConnectionProfileByHost(host) {
|
|
111
|
-
try {
|
|
112
|
-
const filename = getConnectionProfilesPath();
|
|
113
|
-
const connectionsData = JSON.parse(fs.readFileSync(filename, 'utf8'));
|
|
114
|
-
const profile = findConnectionProfile(connectionsData, host);
|
|
115
149
|
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
return null;
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
return {
|
|
122
|
-
tenant: profile.tenant,
|
|
123
|
-
username: profile.username ? profile.username : null,
|
|
124
|
-
password: profile.encodedPassword ? await dataProtection.decrypt(profile.encodedPassword) : null,
|
|
125
|
-
key: profile.logApiKey ? profile.logApiKey : null,
|
|
126
|
-
secret: profile.logApiSecret ? profile.logApiSecret : null
|
|
127
|
-
};
|
|
128
|
-
} catch (e) {
|
|
129
|
-
printMessage(`Can not read saved connection info, please specify credentials on command line: ${e}`, 'error');
|
|
130
|
-
return null;
|
|
131
|
-
}
|
|
150
|
+
function getConnectionProfileByHost(_x2) {
|
|
151
|
+
return _getConnectionProfileByHost.apply(this, arguments);
|
|
132
152
|
}
|
|
133
153
|
/**
|
|
134
154
|
* Get connection profile
|
|
135
155
|
* @returns {Object} connection profile or null
|
|
136
156
|
*/
|
|
137
157
|
|
|
138
|
-
|
|
139
|
-
|
|
158
|
+
|
|
159
|
+
function _getConnectionProfileByHost() {
|
|
160
|
+
_getConnectionProfileByHost = _asyncToGenerator(function* (host) {
|
|
161
|
+
try {
|
|
162
|
+
var filename = getConnectionProfilesPath();
|
|
163
|
+
var connectionsData = JSON.parse(_fs.default.readFileSync(filename, 'utf8'));
|
|
164
|
+
var profile = findConnectionProfile(connectionsData, host);
|
|
165
|
+
|
|
166
|
+
if (!profile) {
|
|
167
|
+
(0, _Console.printMessage)("Profile for ".concat(host, " not found. Please specify credentials on command line"), 'error');
|
|
168
|
+
return null;
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
return {
|
|
172
|
+
tenant: profile.tenant,
|
|
173
|
+
username: profile.username ? profile.username : null,
|
|
174
|
+
password: profile.encodedPassword ? yield dataProtection.decrypt(profile.encodedPassword) : null,
|
|
175
|
+
key: profile.logApiKey ? profile.logApiKey : null,
|
|
176
|
+
secret: profile.logApiSecret ? profile.logApiSecret : null
|
|
177
|
+
};
|
|
178
|
+
} catch (e) {
|
|
179
|
+
(0, _Console.printMessage)("Can not read saved connection info, please specify credentials on command line: ".concat(e), 'error');
|
|
180
|
+
return null;
|
|
181
|
+
}
|
|
182
|
+
});
|
|
183
|
+
return _getConnectionProfileByHost.apply(this, arguments);
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
function getConnectionProfile() {
|
|
187
|
+
return _getConnectionProfile.apply(this, arguments);
|
|
140
188
|
}
|
|
141
189
|
/**
|
|
142
190
|
* Save connection profile
|
|
143
191
|
*/
|
|
144
192
|
|
|
145
|
-
export async function saveConnectionProfile() {
|
|
146
|
-
const filename = getConnectionProfilesPath();
|
|
147
|
-
printMessage(`Saving creds in ${filename}...`);
|
|
148
|
-
let connectionsData = {};
|
|
149
|
-
let existingData = {};
|
|
150
193
|
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
existingData = connectionsData[storage.session.getTenant()];
|
|
158
|
-
printMessage(`Updating connection profile ${storage.session.getTenant()}`);
|
|
159
|
-
} else printMessage(`Adding connection profile ${storage.session.getTenant()}`);
|
|
160
|
-
} catch (e) {
|
|
161
|
-
printMessage(`Creating connection profiles file ${filename} with ${storage.session.getTenant()}`);
|
|
162
|
-
}
|
|
163
|
-
|
|
164
|
-
if (storage.session.getUsername()) existingData['username'] = storage.session.getUsername();
|
|
165
|
-
if (storage.session.getPassword()) existingData['encodedPassword'] = await dataProtection.encrypt(storage.session.getPassword()); // Buffer.from(storage.session.getPassword()).toString('base64');
|
|
194
|
+
function _getConnectionProfile() {
|
|
195
|
+
_getConnectionProfile = _asyncToGenerator(function* () {
|
|
196
|
+
return getConnectionProfileByHost(_SessionStorage.default.session.getTenant());
|
|
197
|
+
});
|
|
198
|
+
return _getConnectionProfile.apply(this, arguments);
|
|
199
|
+
}
|
|
166
200
|
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
connectionsData[storage.session.getTenant()] = existingData;
|
|
170
|
-
fs.writeFileSync(filename, JSON.stringify(connectionsData, null, 2));
|
|
201
|
+
function saveConnectionProfile() {
|
|
202
|
+
return _saveConnectionProfile.apply(this, arguments);
|
|
171
203
|
}
|
|
172
204
|
/**
|
|
173
205
|
* Delete connection profile
|
|
174
206
|
* @param {String} host host tenant host url or unique substring
|
|
175
207
|
*/
|
|
176
208
|
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
209
|
+
|
|
210
|
+
function _saveConnectionProfile() {
|
|
211
|
+
_saveConnectionProfile = _asyncToGenerator(function* () {
|
|
212
|
+
var filename = getConnectionProfilesPath();
|
|
213
|
+
(0, _Console.printMessage)("Saving creds in ".concat(filename, "..."));
|
|
214
|
+
var connectionsData = {};
|
|
215
|
+
var existingData = {};
|
|
216
|
+
|
|
217
|
+
try {
|
|
218
|
+
_fs.default.statSync(filename);
|
|
219
|
+
|
|
220
|
+
var data = _fs.default.readFileSync(filename, 'utf8');
|
|
221
|
+
|
|
222
|
+
connectionsData = JSON.parse(data);
|
|
223
|
+
|
|
224
|
+
if (connectionsData[_SessionStorage.default.session.getTenant()]) {
|
|
225
|
+
existingData = connectionsData[_SessionStorage.default.session.getTenant()];
|
|
226
|
+
(0, _Console.printMessage)("Updating connection profile ".concat(_SessionStorage.default.session.getTenant()));
|
|
227
|
+
} else (0, _Console.printMessage)("Adding connection profile ".concat(_SessionStorage.default.session.getTenant()));
|
|
228
|
+
} catch (e) {
|
|
229
|
+
(0, _Console.printMessage)("Creating connection profiles file ".concat(filename, " with ").concat(_SessionStorage.default.session.getTenant()));
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
if (_SessionStorage.default.session.getUsername()) existingData['username'] = _SessionStorage.default.session.getUsername();
|
|
233
|
+
if (_SessionStorage.default.session.getPassword()) existingData['encodedPassword'] = yield dataProtection.encrypt(_SessionStorage.default.session.getPassword()); // Buffer.from(storage.session.getPassword()).toString('base64');
|
|
234
|
+
|
|
235
|
+
if (_SessionStorage.default.session.getLogApiKey()) existingData['logApiKey'] = _SessionStorage.default.session.getLogApiKey();
|
|
236
|
+
if (_SessionStorage.default.session.getLogApiSecret()) existingData['logApiSecret'] = _SessionStorage.default.session.getLogApiSecret();
|
|
237
|
+
connectionsData[_SessionStorage.default.session.getTenant()] = existingData;
|
|
238
|
+
|
|
239
|
+
_fs.default.writeFileSync(filename, JSON.stringify(connectionsData, null, 2));
|
|
240
|
+
});
|
|
241
|
+
return _saveConnectionProfile.apply(this, arguments);
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
function deleteConnectionProfile(host) {
|
|
245
|
+
var filename = getConnectionProfilesPath();
|
|
246
|
+
var connectionsData = {};
|
|
247
|
+
|
|
248
|
+
_fs.default.stat(filename, err => {
|
|
181
249
|
if (err == null) {
|
|
182
|
-
|
|
250
|
+
var data = _fs.default.readFileSync(filename, 'utf8');
|
|
251
|
+
|
|
183
252
|
connectionsData = JSON.parse(data);
|
|
184
|
-
|
|
253
|
+
var profile = findConnectionProfile(connectionsData, host);
|
|
185
254
|
|
|
186
255
|
if (profile) {
|
|
187
|
-
printMessage(
|
|
256
|
+
(0, _Console.printMessage)("Deleting connection profile ".concat(profile.tenant));
|
|
188
257
|
delete connectionsData[profile.tenant];
|
|
189
|
-
|
|
258
|
+
|
|
259
|
+
_fs.default.writeFileSync(filename, JSON.stringify(connectionsData, null, 2));
|
|
190
260
|
} else {
|
|
191
|
-
printMessage(
|
|
261
|
+
(0, _Console.printMessage)("No connection profile ".concat(host, " found"));
|
|
192
262
|
}
|
|
193
263
|
} else if (err.code === 'ENOENT') {
|
|
194
|
-
printMessage(
|
|
264
|
+
(0, _Console.printMessage)("Connection profile file ".concat(filename, " not found"));
|
|
195
265
|
} else {
|
|
196
|
-
printMessage(
|
|
266
|
+
(0, _Console.printMessage)("Error in deleting connection profile: ".concat(err.code), 'error');
|
|
197
267
|
}
|
|
198
268
|
});
|
|
199
269
|
}
|
|
200
|
-
export async function describeConnectionProfile(host, showSecrets) {
|
|
201
|
-
const profile = await getConnectionProfileByHost(host);
|
|
202
270
|
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
delete profile.secret;
|
|
207
|
-
}
|
|
271
|
+
function describeConnectionProfile(_x3, _x4) {
|
|
272
|
+
return _describeConnectionProfile.apply(this, arguments);
|
|
273
|
+
}
|
|
208
274
|
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
}
|
|
275
|
+
function _describeConnectionProfile() {
|
|
276
|
+
_describeConnectionProfile = _asyncToGenerator(function* (host, showSecrets) {
|
|
277
|
+
var profile = yield getConnectionProfileByHost(host);
|
|
213
278
|
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
279
|
+
if (profile) {
|
|
280
|
+
if (!showSecrets) {
|
|
281
|
+
delete profile.password;
|
|
282
|
+
delete profile.secret;
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
if (!profile.key) {
|
|
286
|
+
delete profile.key;
|
|
287
|
+
delete profile.secret;
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
var keyMap = {
|
|
291
|
+
tenant: 'Host',
|
|
292
|
+
username: 'Username',
|
|
293
|
+
password: 'Password',
|
|
294
|
+
key: 'Log API Key',
|
|
295
|
+
secret: 'Log API Secret'
|
|
296
|
+
};
|
|
297
|
+
var table = (0, _Console.createObjectTable)(profile, keyMap);
|
|
298
|
+
(0, _Console.printMessage)(table.toString(), 'data');
|
|
299
|
+
} else {
|
|
300
|
+
(0, _Console.printMessage)("No connection profile ".concat(host, " found"));
|
|
301
|
+
}
|
|
302
|
+
});
|
|
303
|
+
return _describeConnectionProfile.apply(this, arguments);
|
|
226
304
|
}
|
|
227
305
|
//# sourceMappingURL=ConnectionProfileOps.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConnectionProfileOps.js","names":["fs","os","path","storage","DataProtection","createObjectTable","createTable","printMessage","FRODO_CONNECTION_PROFILES_PATH_KEY","dataProtection","fileOptions","indentation","getConnectionProfilesPath","session","process","env","homedir","findConnectionProfile","connectionProfiles","host","tenant","includes","profile","listConnectionProfiles","long","filename","data","readFileSync","connectionsData","JSON","parse","table","Object","keys","forEach","c","push","username","logApiKey","toString","e","message","initConnectionProfiles","folderName","dirname","existsSync","mkdirSync","recursive","writeFileSync","stringify","convert","conn","password","encodedPassword","encrypt","getConnectionProfileByHost","decrypt","key","secret","logApiSecret","getConnectionProfile","getTenant","saveConnectionProfile","existingData","statSync","getUsername","getPassword","getLogApiKey","getLogApiSecret","deleteConnectionProfile","stat","err","code","describeConnectionProfile","showSecrets","keyMap"],"sources":["ops/ConnectionProfileOps.ts"],"sourcesContent":["import fs from 'fs';\nimport os from 'os';\nimport path from 'path';\nimport storage from '../storage/SessionStorage';\nimport DataProtection from './utils/DataProtection';\nimport { createObjectTable, createTable, printMessage } from './utils/Console';\nimport { FRODO_CONNECTION_PROFILES_PATH_KEY } from '../storage/StaticStorage';\n\nconst dataProtection = new DataProtection();\n\nconst fileOptions = {\n indentation: 4,\n};\n\n/**\n * Get connection profiles file name\n * @returns {String} connection profiles file name\n */\nexport function getConnectionProfilesPath(): string {\n return (\n storage.session.getConnectionProfilesPath() ||\n process.env[FRODO_CONNECTION_PROFILES_PATH_KEY] ||\n `${os.homedir()}/.frodo/.frodorc`\n );\n}\n\n/**\n * Find connection profile\n * @param {Object} connectionProfiles connection profile object\n * @param {String} host tenant host url or unique substring\n * @returns {Object} connection profile object or null\n */\nfunction findConnectionProfile(connectionProfiles, host) {\n for (const tenant in connectionProfiles) {\n if (tenant.includes(host)) {\n const profile = connectionProfiles[tenant];\n profile.tenant = tenant;\n return profile;\n }\n }\n return null;\n}\n\n/**\n * List connection profiles\n * @param {boolean} long Long list format with details\n */\nexport function listConnectionProfiles(long = false) {\n const filename = getConnectionProfilesPath();\n try {\n const data = fs.readFileSync(filename, 'utf8');\n const connectionsData = JSON.parse(data);\n if (long) {\n const table = createTable(['Host', 'Username', 'Log API Key']);\n Object.keys(connectionsData).forEach((c) => {\n table.push([\n c,\n connectionsData[c].username,\n connectionsData[c].logApiKey,\n ]);\n });\n printMessage(table.toString(), 'data');\n } else {\n Object.keys(connectionsData).forEach((c) => {\n printMessage(`${c}`, 'data');\n });\n }\n printMessage(\n 'Any unique substring of a saved host can be used as the value for host parameter in all commands',\n 'info'\n );\n } catch (e) {\n printMessage(`No connections found in ${filename} (${e.message})`, 'error');\n }\n}\n\n/**\n * Initialize connection profiles\n */\nexport function initConnectionProfiles() {\n // create connections.json file if it doesn't exist\n const filename = getConnectionProfilesPath();\n const folderName = path.dirname(filename);\n if (!fs.existsSync(folderName)) {\n fs.mkdirSync(folderName, { recursive: true });\n if (!fs.existsSync(filename)) {\n fs.writeFileSync(\n filename,\n JSON.stringify({}, null, fileOptions.indentation)\n );\n }\n }\n // encrypt the password from clear text to aes-256-GCM\n else {\n const data = fs.readFileSync(filename, 'utf8');\n const connectionsData = JSON.parse(data);\n let convert = false;\n Object.keys(connectionsData).forEach(async (conn) => {\n if (connectionsData[conn].password) {\n convert = true;\n connectionsData[conn].encodedPassword = await dataProtection.encrypt(\n connectionsData[conn].password\n ); // Buffer.from(connectionsData[conn].password).toString('base64');\n delete connectionsData[conn].password;\n }\n });\n if (convert) {\n fs.writeFileSync(\n filename,\n JSON.stringify(connectionsData, null, fileOptions.indentation)\n );\n }\n }\n}\n\n/**\n * Get connection profile by host\n * @param {String} host host tenant host url or unique substring\n * @returns {Object} connection profile or null\n */\nexport async function getConnectionProfileByHost(host) {\n try {\n const filename = getConnectionProfilesPath();\n const connectionsData = JSON.parse(fs.readFileSync(filename, 'utf8'));\n const profile = findConnectionProfile(connectionsData, host);\n if (!profile) {\n printMessage(\n `Profile for ${host} not found. Please specify credentials on command line`,\n 'error'\n );\n return null;\n }\n return {\n tenant: profile.tenant,\n username: profile.username ? profile.username : null,\n password: profile.encodedPassword\n ? await dataProtection.decrypt(profile.encodedPassword)\n : null,\n key: profile.logApiKey ? profile.logApiKey : null,\n secret: profile.logApiSecret ? profile.logApiSecret : null,\n };\n } catch (e) {\n printMessage(\n `Can not read saved connection info, please specify credentials on command line: ${e}`,\n 'error'\n );\n return null;\n }\n}\n\n/**\n * Get connection profile\n * @returns {Object} connection profile or null\n */\nexport async function getConnectionProfile() {\n return getConnectionProfileByHost(storage.session.getTenant());\n}\n\n/**\n * Save connection profile\n */\nexport async function saveConnectionProfile() {\n const filename = getConnectionProfilesPath();\n printMessage(`Saving creds in ${filename}...`);\n let connectionsData = {};\n let existingData = {};\n try {\n fs.statSync(filename);\n const data = fs.readFileSync(filename, 'utf8');\n connectionsData = JSON.parse(data);\n if (connectionsData[storage.session.getTenant()]) {\n existingData = connectionsData[storage.session.getTenant()];\n printMessage(\n `Updating connection profile ${storage.session.getTenant()}`\n );\n } else\n printMessage(`Adding connection profile ${storage.session.getTenant()}`);\n } catch (e) {\n printMessage(\n `Creating connection profiles file ${filename} with ${storage.session.getTenant()}`\n );\n }\n if (storage.session.getUsername())\n existingData['username'] = storage.session.getUsername();\n if (storage.session.getPassword())\n existingData['encodedPassword'] = await dataProtection.encrypt(\n storage.session.getPassword()\n ); // Buffer.from(storage.session.getPassword()).toString('base64');\n if (storage.session.getLogApiKey())\n existingData['logApiKey'] = storage.session.getLogApiKey();\n if (storage.session.getLogApiSecret())\n existingData['logApiSecret'] = storage.session.getLogApiSecret();\n connectionsData[storage.session.getTenant()] = existingData;\n\n fs.writeFileSync(filename, JSON.stringify(connectionsData, null, 2));\n}\n\n/**\n * Delete connection profile\n * @param {String} host host tenant host url or unique substring\n */\nexport function deleteConnectionProfile(host) {\n const filename = getConnectionProfilesPath();\n let connectionsData = {};\n fs.stat(filename, (err) => {\n if (err == null) {\n const data = fs.readFileSync(filename, 'utf8');\n connectionsData = JSON.parse(data);\n const profile = findConnectionProfile(connectionsData, host);\n if (profile) {\n printMessage(`Deleting connection profile ${profile.tenant}`);\n delete connectionsData[profile.tenant];\n fs.writeFileSync(filename, JSON.stringify(connectionsData, null, 2));\n } else {\n printMessage(`No connection profile ${host} found`);\n }\n } else if (err.code === 'ENOENT') {\n printMessage(`Connection profile file ${filename} not found`);\n } else {\n printMessage(\n `Error in deleting connection profile: ${err.code}`,\n 'error'\n );\n }\n });\n}\n\nexport async function describeConnectionProfile(host, showSecrets) {\n const profile = await getConnectionProfileByHost(host);\n if (profile) {\n if (!showSecrets) {\n delete profile.password;\n delete profile.secret;\n }\n if (!profile.key) {\n delete profile.key;\n delete profile.secret;\n }\n const keyMap = {\n tenant: 'Host',\n username: 'Username',\n password: 'Password',\n key: 'Log API Key',\n secret: 'Log API Secret',\n };\n const table = createObjectTable(profile, keyMap);\n printMessage(table.toString(), 'data');\n } else {\n printMessage(`No connection profile ${host} found`);\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ConnectionProfileOps.js","names":["dataProtection","DataProtection","fileOptions","indentation","getConnectionProfilesPath","storage","session","process","env","FRODO_CONNECTION_PROFILES_PATH_KEY","os","homedir","findConnectionProfile","connectionProfiles","host","tenant","includes","profile","listConnectionProfiles","long","filename","data","fs","readFileSync","connectionsData","JSON","parse","table","createTable","Object","keys","forEach","c","push","username","logApiKey","printMessage","toString","e","message","initConnectionProfiles","folderName","path","dirname","existsSync","mkdirSync","recursive","writeFileSync","stringify","convert","conn","password","encodedPassword","encrypt","getConnectionProfileByHost","decrypt","key","secret","logApiSecret","getConnectionProfile","getTenant","saveConnectionProfile","existingData","statSync","getUsername","getPassword","getLogApiKey","getLogApiSecret","deleteConnectionProfile","stat","err","code","describeConnectionProfile","showSecrets","keyMap","createObjectTable"],"sources":["ops/ConnectionProfileOps.ts"],"sourcesContent":["import fs from 'fs';\nimport os from 'os';\nimport path from 'path';\nimport storage from '../storage/SessionStorage';\nimport DataProtection from './utils/DataProtection';\nimport { createObjectTable, createTable, printMessage } from './utils/Console';\nimport { FRODO_CONNECTION_PROFILES_PATH_KEY } from '../storage/StaticStorage';\n\nconst dataProtection = new DataProtection();\n\nconst fileOptions = {\n indentation: 4,\n};\n\n/**\n * Get connection profiles file name\n * @returns {String} connection profiles file name\n */\nexport function getConnectionProfilesPath(): string {\n return (\n storage.session.getConnectionProfilesPath() ||\n process.env[FRODO_CONNECTION_PROFILES_PATH_KEY] ||\n `${os.homedir()}/.frodo/.frodorc`\n );\n}\n\n/**\n * Find connection profile\n * @param {Object} connectionProfiles connection profile object\n * @param {String} host tenant host url or unique substring\n * @returns {Object} connection profile object or null\n */\nfunction findConnectionProfile(connectionProfiles, host) {\n for (const tenant in connectionProfiles) {\n if (tenant.includes(host)) {\n const profile = connectionProfiles[tenant];\n profile.tenant = tenant;\n return profile;\n }\n }\n return null;\n}\n\n/**\n * List connection profiles\n * @param {boolean} long Long list format with details\n */\nexport function listConnectionProfiles(long = false) {\n const filename = getConnectionProfilesPath();\n try {\n const data = fs.readFileSync(filename, 'utf8');\n const connectionsData = JSON.parse(data);\n if (long) {\n const table = createTable(['Host', 'Username', 'Log API Key']);\n Object.keys(connectionsData).forEach((c) => {\n table.push([\n c,\n connectionsData[c].username,\n connectionsData[c].logApiKey,\n ]);\n });\n printMessage(table.toString(), 'data');\n } else {\n Object.keys(connectionsData).forEach((c) => {\n printMessage(`${c}`, 'data');\n });\n }\n printMessage(\n 'Any unique substring of a saved host can be used as the value for host parameter in all commands',\n 'info'\n );\n } catch (e) {\n printMessage(`No connections found in ${filename} (${e.message})`, 'error');\n }\n}\n\n/**\n * Initialize connection profiles\n */\nexport function initConnectionProfiles() {\n // create connections.json file if it doesn't exist\n const filename = getConnectionProfilesPath();\n const folderName = path.dirname(filename);\n if (!fs.existsSync(folderName)) {\n fs.mkdirSync(folderName, { recursive: true });\n if (!fs.existsSync(filename)) {\n fs.writeFileSync(\n filename,\n JSON.stringify({}, null, fileOptions.indentation)\n );\n }\n }\n // encrypt the password from clear text to aes-256-GCM\n else {\n const data = fs.readFileSync(filename, 'utf8');\n const connectionsData = JSON.parse(data);\n let convert = false;\n Object.keys(connectionsData).forEach(async (conn) => {\n if (connectionsData[conn].password) {\n convert = true;\n connectionsData[conn].encodedPassword = await dataProtection.encrypt(\n connectionsData[conn].password\n ); // Buffer.from(connectionsData[conn].password).toString('base64');\n delete connectionsData[conn].password;\n }\n });\n if (convert) {\n fs.writeFileSync(\n filename,\n JSON.stringify(connectionsData, null, fileOptions.indentation)\n );\n }\n }\n}\n\n/**\n * Get connection profile by host\n * @param {String} host host tenant host url or unique substring\n * @returns {Object} connection profile or null\n */\nexport async function getConnectionProfileByHost(host) {\n try {\n const filename = getConnectionProfilesPath();\n const connectionsData = JSON.parse(fs.readFileSync(filename, 'utf8'));\n const profile = findConnectionProfile(connectionsData, host);\n if (!profile) {\n printMessage(\n `Profile for ${host} not found. Please specify credentials on command line`,\n 'error'\n );\n return null;\n }\n return {\n tenant: profile.tenant,\n username: profile.username ? profile.username : null,\n password: profile.encodedPassword\n ? await dataProtection.decrypt(profile.encodedPassword)\n : null,\n key: profile.logApiKey ? profile.logApiKey : null,\n secret: profile.logApiSecret ? profile.logApiSecret : null,\n };\n } catch (e) {\n printMessage(\n `Can not read saved connection info, please specify credentials on command line: ${e}`,\n 'error'\n );\n return null;\n }\n}\n\n/**\n * Get connection profile\n * @returns {Object} connection profile or null\n */\nexport async function getConnectionProfile() {\n return getConnectionProfileByHost(storage.session.getTenant());\n}\n\n/**\n * Save connection profile\n */\nexport async function saveConnectionProfile() {\n const filename = getConnectionProfilesPath();\n printMessage(`Saving creds in ${filename}...`);\n let connectionsData = {};\n let existingData = {};\n try {\n fs.statSync(filename);\n const data = fs.readFileSync(filename, 'utf8');\n connectionsData = JSON.parse(data);\n if (connectionsData[storage.session.getTenant()]) {\n existingData = connectionsData[storage.session.getTenant()];\n printMessage(\n `Updating connection profile ${storage.session.getTenant()}`\n );\n } else\n printMessage(`Adding connection profile ${storage.session.getTenant()}`);\n } catch (e) {\n printMessage(\n `Creating connection profiles file ${filename} with ${storage.session.getTenant()}`\n );\n }\n if (storage.session.getUsername())\n existingData['username'] = storage.session.getUsername();\n if (storage.session.getPassword())\n existingData['encodedPassword'] = await dataProtection.encrypt(\n storage.session.getPassword()\n ); // Buffer.from(storage.session.getPassword()).toString('base64');\n if (storage.session.getLogApiKey())\n existingData['logApiKey'] = storage.session.getLogApiKey();\n if (storage.session.getLogApiSecret())\n existingData['logApiSecret'] = storage.session.getLogApiSecret();\n connectionsData[storage.session.getTenant()] = existingData;\n\n fs.writeFileSync(filename, JSON.stringify(connectionsData, null, 2));\n}\n\n/**\n * Delete connection profile\n * @param {String} host host tenant host url or unique substring\n */\nexport function deleteConnectionProfile(host) {\n const filename = getConnectionProfilesPath();\n let connectionsData = {};\n fs.stat(filename, (err) => {\n if (err == null) {\n const data = fs.readFileSync(filename, 'utf8');\n connectionsData = JSON.parse(data);\n const profile = findConnectionProfile(connectionsData, host);\n if (profile) {\n printMessage(`Deleting connection profile ${profile.tenant}`);\n delete connectionsData[profile.tenant];\n fs.writeFileSync(filename, JSON.stringify(connectionsData, null, 2));\n } else {\n printMessage(`No connection profile ${host} found`);\n }\n } else if (err.code === 'ENOENT') {\n printMessage(`Connection profile file ${filename} not found`);\n } else {\n printMessage(\n `Error in deleting connection profile: ${err.code}`,\n 'error'\n );\n }\n });\n}\n\nexport async function describeConnectionProfile(host, showSecrets) {\n const profile = await getConnectionProfileByHost(host);\n if (profile) {\n if (!showSecrets) {\n delete profile.password;\n delete profile.secret;\n }\n if (!profile.key) {\n delete profile.key;\n delete profile.secret;\n }\n const keyMap = {\n tenant: 'Host',\n username: 'Username',\n password: 'Password',\n key: 'Log API Key',\n secret: 'Log API Secret',\n };\n const table = createObjectTable(profile, keyMap);\n printMessage(table.toString(), 'data');\n } else {\n printMessage(`No connection profile ${host} found`);\n }\n}\n"],"mappings":"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"}
|