@rockcarver/frodo-cli 0.20.1 → 0.20.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 +5 -1
- package/esm/cli/journey/journey-describe.js +2 -4
- package/esm/cli/journey/journey-describe.js.map +1 -1
- package/esm/cli/script/script-export.js +20 -7
- package/esm/cli/script/script-export.js.map +1 -1
- package/esm/cli/script/script-import.js +14 -7
- package/esm/cli/script/script-import.js.map +1 -1
- package/esm/ops/Saml2Ops.js +1 -1
- package/esm/ops/Saml2Ops.js.map +1 -1
- package/esm/ops/ScriptOps.js +181 -12
- package/esm/ops/ScriptOps.js.map +1 -1
- package/esm/utils/ExportImportUtils.js +31 -3
- package/esm/utils/ExportImportUtils.js.map +1 -1
- package/package.json +3 -2
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [0.20.2-0] - 2023-01-24
|
|
11
|
+
|
|
10
12
|
## [0.20.1] - 2023-01-20
|
|
11
13
|
|
|
12
14
|
### Changed
|
|
@@ -976,7 +978,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
976
978
|
- Fixed problem with adding connection profiles
|
|
977
979
|
- Miscellaneous bug fixes
|
|
978
980
|
|
|
979
|
-
[Unreleased]: https://github.com/rockcarver/frodo-cli/compare/v0.20.
|
|
981
|
+
[Unreleased]: https://github.com/rockcarver/frodo-cli/compare/v0.20.2-0...HEAD
|
|
982
|
+
|
|
983
|
+
[0.20.2-0]: https://github.com/rockcarver/frodo-cli/compare/v0.20.1...v0.20.2-0
|
|
980
984
|
|
|
981
985
|
[0.20.1]: https://github.com/rockcarver/frodo-cli/compare/v0.20.1-1...v0.20.1
|
|
982
986
|
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import fs from 'fs';
|
|
2
2
|
import { FrodoCommand } from '../FrodoCommand';
|
|
3
3
|
import { Option } from 'commander';
|
|
4
|
-
import { Authenticate,
|
|
4
|
+
import { Authenticate, Journey, state } from '@rockcarver/frodo-lib';
|
|
5
5
|
import { describeJourney, describeJourneyMd } from '../../ops/JourneyOps';
|
|
6
6
|
import { printMessage, verboseMessage } from '../../utils/Console';
|
|
7
|
+
import { saveTextToFile } from '../../utils/ExportImportUtils';
|
|
7
8
|
const {
|
|
8
9
|
getTokens
|
|
9
10
|
} = Authenticate;
|
|
@@ -12,9 +13,6 @@ const {
|
|
|
12
13
|
exportJourney,
|
|
13
14
|
createFileParamTreeExportResolver
|
|
14
15
|
} = Journey;
|
|
15
|
-
const {
|
|
16
|
-
saveTextToFile
|
|
17
|
-
} = ExportImportUtils;
|
|
18
16
|
const program = new FrodoCommand('frodo journey describe');
|
|
19
17
|
program.description('If -h is supplied, describe the journey/tree indicated by -i, or all journeys/trees in the realm if no -i is supplied, otherwise describe the journey/tree export file indicated by -f.').addOption(new Option('-i, --journey-id <journey>', 'Name of a journey/tree. If specified, -a and -A are ignored.')).addOption(new Option('-f, --file <file>', 'Name of the journey export file to describe. Ignored with -A.')).addOption(new Option('-F, --output-file <file>', 'Name of the file to write the output to.')).addOption(new Option('--markdown', 'Output in markdown.')).addOption(new Option('-o, --override-version <version>', "Override version. Notation: '<major>.<minor>.<patch>' e.g. '7.2.0'. Override detected version with any version. This is helpful in order to check if journeys in one environment would be compatible running in another environment (e.g. in preparation of migrating from on-prem to ForgeRock Identity Cloud.")).action(
|
|
20
18
|
// implement command logic inside action handler
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"journey-describe.js","names":["fs","FrodoCommand","Option","Authenticate","ExportImportUtils","Journey","state","describeJourney","describeJourneyMd","printMessage","verboseMessage","getTokens","getJourneys","exportJourney","createFileParamTreeExportResolver","saveTextToFile","program","description","addOption","action","host","realm","user","password","options","command","handleDefaultArgsAndOpts","outputFile","setOutputFile","file","process","exitCode","overrideVersion","setAmVersion","fileData","JSON","parse","readFileSync","journeyData","journeyId","trees","Object","values","tree","_id","Error","markdown","error","message","getRealm","journeys","journey","treeData"],"sources":["cli/journey/journey-describe.ts"],"sourcesContent":["import fs from 'fs';\nimport { FrodoCommand } from '../FrodoCommand';\nimport { Option } from 'commander';\nimport {\n Authenticate,\n ExportImportUtils,\n Journey,\n state,\n} from '@rockcarver/frodo-lib';\nimport { describeJourney, describeJourneyMd } from '../../ops/JourneyOps';\nimport { printMessage, verboseMessage } from '../../utils/Console';\n\nconst { getTokens } = Authenticate;\nconst { getJourneys, exportJourney, createFileParamTreeExportResolver } =\n Journey;\nconst { saveTextToFile } = ExportImportUtils;\n\nconst program = new FrodoCommand('frodo journey describe');\n\nprogram\n .description(\n 'If -h is supplied, describe the journey/tree indicated by -i, or all journeys/trees in the realm if no -i is supplied, otherwise describe the journey/tree export file indicated by -f.'\n )\n .addOption(\n new Option(\n '-i, --journey-id <journey>',\n 'Name of a journey/tree. If specified, -a and -A are ignored.'\n )\n )\n .addOption(\n new Option(\n '-f, --file <file>',\n 'Name of the journey export file to describe. Ignored with -A.'\n )\n )\n .addOption(\n new Option(\n '-F, --output-file <file>',\n 'Name of the file to write the output to.'\n )\n )\n .addOption(new Option('--markdown', 'Output in markdown.'))\n .addOption(\n new Option(\n '-o, --override-version <version>',\n \"Override version. Notation: '<major>.<minor>.<patch>' e.g. '7.2.0'. Override detected version with any version. This is helpful in order to check if journeys in one environment would be compatible running in another environment (e.g. in preparation of migrating from on-prem to ForgeRock Identity Cloud.\"\n )\n )\n .action(\n // implement command logic inside action handler\n async (host, realm, user, password, options, command) => {\n command.handleDefaultArgsAndOpts(\n host,\n realm,\n user,\n password,\n options,\n command\n );\n if (options.outputFile) state.setOutputFile(options.outputFile);\n // TODO: review checks for arguments\n if (typeof host === 'undefined' || typeof options.file !== 'undefined') {\n if (\n typeof host === 'undefined' &&\n typeof options.file === 'undefined'\n ) {\n printMessage('Need either [host] or -f.', 'error');\n process.exitCode = 1;\n return;\n }\n verboseMessage(`Describing local journey file ${options.file}...`);\n try {\n // override version\n if (typeof options.overrideVersion !== 'undefined') {\n state.setAmVersion(options.overrideVersion);\n }\n const fileData = JSON.parse(fs.readFileSync(options.file, 'utf8'));\n let journeyData;\n // single or multi tree export?\n // multi - by id\n if (\n typeof options.journeyId !== 'undefined' &&\n fileData.trees &&\n fileData.trees[options.journeyId]\n ) {\n journeyData = fileData.trees[options.journeyId];\n }\n // multi - first\n else if (typeof options.journeyId === 'undefined' && fileData.trees) {\n [journeyData] = Object.values(fileData.trees);\n }\n // single - by id\n else if (\n typeof options.journeyId !== 'undefined' &&\n options.journeyId === fileData.tree?._id\n ) {\n journeyData = fileData;\n }\n // single\n else if (\n typeof options.journeyId === 'undefined' &&\n fileData.tree?._id\n ) {\n journeyData = fileData;\n }\n // no journey/tree found\n else {\n throw new Error(\n typeof options.journeyId === 'undefined'\n ? `No journey found in ${options.file}`\n : `Journey '${options.journeyId}' not found in ${options.file}`\n );\n }\n // ANSI text output\n if (!options.markdown) {\n await describeJourney(\n journeyData,\n createFileParamTreeExportResolver(options.file)\n );\n }\n // Markdown output\n else {\n // reset output file\n if (options.outputFile) saveTextToFile('', options.outputFile);\n await describeJourneyMd(\n journeyData,\n createFileParamTreeExportResolver(options.file)\n );\n }\n } catch (error) {\n printMessage(error.message, 'error');\n process.exitCode = 1;\n }\n } else if (await getTokens()) {\n verboseMessage(\n `Describing journey(s) in realm \"${state.getRealm()}\"...`\n );\n // override version\n if (typeof options.overrideVersion !== 'undefined') {\n state.setAmVersion(options.overrideVersion);\n }\n if (typeof options.journeyId === 'undefined') {\n let journeys = [];\n journeys = await getJourneys();\n for (const journey of journeys) {\n try {\n // eslint-disable-next-line no-await-in-loop, dot-notation\n const treeData = await exportJourney(journey['_id']);\n // ANSI text output\n if (!options.markdown) {\n await describeJourney(treeData);\n }\n // Markdown output\n else {\n // reset output file\n if (options.outputFile) saveTextToFile('', options.outputFile);\n await describeJourneyMd(treeData);\n }\n } catch (error) {\n printMessage(error.message, 'error');\n process.exitCode = 1;\n }\n }\n } else {\n try {\n const treeData = await exportJourney(options.journeyId);\n // ANSI text output\n if (!options.markdown) {\n await describeJourney(treeData);\n }\n // Markdown output\n else {\n // reset output file\n if (options.outputFile) saveTextToFile('', options.outputFile);\n await describeJourneyMd(treeData);\n }\n } catch (error) {\n printMessage(error.message, 'error');\n process.exitCode = 1;\n }\n }\n }\n }\n // end command logic inside action handler\n );\n\nprogram.parse();\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"journey-describe.js","names":["fs","FrodoCommand","Option","Authenticate","Journey","state","describeJourney","describeJourneyMd","printMessage","verboseMessage","saveTextToFile","getTokens","getJourneys","exportJourney","createFileParamTreeExportResolver","program","description","addOption","action","host","realm","user","password","options","command","handleDefaultArgsAndOpts","outputFile","setOutputFile","file","process","exitCode","overrideVersion","setAmVersion","fileData","JSON","parse","readFileSync","journeyData","journeyId","trees","Object","values","tree","_id","Error","markdown","error","message","getRealm","journeys","journey","treeData"],"sources":["cli/journey/journey-describe.ts"],"sourcesContent":["import fs from 'fs';\nimport { FrodoCommand } from '../FrodoCommand';\nimport { Option } from 'commander';\nimport { Authenticate, Journey, state } from '@rockcarver/frodo-lib';\nimport { describeJourney, describeJourneyMd } from '../../ops/JourneyOps';\nimport { printMessage, verboseMessage } from '../../utils/Console';\nimport { saveTextToFile } from '../../utils/ExportImportUtils';\n\nconst { getTokens } = Authenticate;\nconst { getJourneys, exportJourney, createFileParamTreeExportResolver } =\n Journey;\n\nconst program = new FrodoCommand('frodo journey describe');\n\nprogram\n .description(\n 'If -h is supplied, describe the journey/tree indicated by -i, or all journeys/trees in the realm if no -i is supplied, otherwise describe the journey/tree export file indicated by -f.'\n )\n .addOption(\n new Option(\n '-i, --journey-id <journey>',\n 'Name of a journey/tree. If specified, -a and -A are ignored.'\n )\n )\n .addOption(\n new Option(\n '-f, --file <file>',\n 'Name of the journey export file to describe. Ignored with -A.'\n )\n )\n .addOption(\n new Option(\n '-F, --output-file <file>',\n 'Name of the file to write the output to.'\n )\n )\n .addOption(new Option('--markdown', 'Output in markdown.'))\n .addOption(\n new Option(\n '-o, --override-version <version>',\n \"Override version. Notation: '<major>.<minor>.<patch>' e.g. '7.2.0'. Override detected version with any version. This is helpful in order to check if journeys in one environment would be compatible running in another environment (e.g. in preparation of migrating from on-prem to ForgeRock Identity Cloud.\"\n )\n )\n .action(\n // implement command logic inside action handler\n async (host, realm, user, password, options, command) => {\n command.handleDefaultArgsAndOpts(\n host,\n realm,\n user,\n password,\n options,\n command\n );\n if (options.outputFile) state.setOutputFile(options.outputFile);\n // TODO: review checks for arguments\n if (typeof host === 'undefined' || typeof options.file !== 'undefined') {\n if (\n typeof host === 'undefined' &&\n typeof options.file === 'undefined'\n ) {\n printMessage('Need either [host] or -f.', 'error');\n process.exitCode = 1;\n return;\n }\n verboseMessage(`Describing local journey file ${options.file}...`);\n try {\n // override version\n if (typeof options.overrideVersion !== 'undefined') {\n state.setAmVersion(options.overrideVersion);\n }\n const fileData = JSON.parse(fs.readFileSync(options.file, 'utf8'));\n let journeyData;\n // single or multi tree export?\n // multi - by id\n if (\n typeof options.journeyId !== 'undefined' &&\n fileData.trees &&\n fileData.trees[options.journeyId]\n ) {\n journeyData = fileData.trees[options.journeyId];\n }\n // multi - first\n else if (typeof options.journeyId === 'undefined' && fileData.trees) {\n [journeyData] = Object.values(fileData.trees);\n }\n // single - by id\n else if (\n typeof options.journeyId !== 'undefined' &&\n options.journeyId === fileData.tree?._id\n ) {\n journeyData = fileData;\n }\n // single\n else if (\n typeof options.journeyId === 'undefined' &&\n fileData.tree?._id\n ) {\n journeyData = fileData;\n }\n // no journey/tree found\n else {\n throw new Error(\n typeof options.journeyId === 'undefined'\n ? `No journey found in ${options.file}`\n : `Journey '${options.journeyId}' not found in ${options.file}`\n );\n }\n // ANSI text output\n if (!options.markdown) {\n await describeJourney(\n journeyData,\n createFileParamTreeExportResolver(options.file)\n );\n }\n // Markdown output\n else {\n // reset output file\n if (options.outputFile) saveTextToFile('', options.outputFile);\n await describeJourneyMd(\n journeyData,\n createFileParamTreeExportResolver(options.file)\n );\n }\n } catch (error) {\n printMessage(error.message, 'error');\n process.exitCode = 1;\n }\n } else if (await getTokens()) {\n verboseMessage(\n `Describing journey(s) in realm \"${state.getRealm()}\"...`\n );\n // override version\n if (typeof options.overrideVersion !== 'undefined') {\n state.setAmVersion(options.overrideVersion);\n }\n if (typeof options.journeyId === 'undefined') {\n let journeys = [];\n journeys = await getJourneys();\n for (const journey of journeys) {\n try {\n // eslint-disable-next-line no-await-in-loop, dot-notation\n const treeData = await exportJourney(journey['_id']);\n // ANSI text output\n if (!options.markdown) {\n await describeJourney(treeData);\n }\n // Markdown output\n else {\n // reset output file\n if (options.outputFile) saveTextToFile('', options.outputFile);\n await describeJourneyMd(treeData);\n }\n } catch (error) {\n printMessage(error.message, 'error');\n process.exitCode = 1;\n }\n }\n } else {\n try {\n const treeData = await exportJourney(options.journeyId);\n // ANSI text output\n if (!options.markdown) {\n await describeJourney(treeData);\n }\n // Markdown output\n else {\n // reset output file\n if (options.outputFile) saveTextToFile('', options.outputFile);\n await describeJourneyMd(treeData);\n }\n } catch (error) {\n printMessage(error.message, 'error');\n process.exitCode = 1;\n }\n }\n }\n }\n // end command logic inside action handler\n );\n\nprogram.parse();\n"],"mappings":"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"}
|
|
@@ -2,7 +2,7 @@ import { FrodoCommand } from '../FrodoCommand';
|
|
|
2
2
|
import { Option } from 'commander';
|
|
3
3
|
import { Authenticate } from '@rockcarver/frodo-lib';
|
|
4
4
|
import { printMessage, verboseMessage } from '../../utils/Console';
|
|
5
|
-
import { exportScriptByNameToFile, exportScriptsToFile, exportScriptsToFiles } from '../../ops/ScriptOps';
|
|
5
|
+
import { exportScriptByNameToFile, exportScriptsToFile, exportScriptsToFiles, exportScriptsToFilesExtract } from '../../ops/ScriptOps';
|
|
6
6
|
const {
|
|
7
7
|
getTokens
|
|
8
8
|
} = Authenticate;
|
|
@@ -14,27 +14,40 @@ program.description('Export scripts.').addOption(new Option('-n, --script-name <
|
|
|
14
14
|
// 'Uuid of the script. If specified, -a and -A are ignored.'
|
|
15
15
|
// )
|
|
16
16
|
// )
|
|
17
|
-
.addOption(new Option('-f, --file <file>', 'Name of the export file.')).addOption(new Option('-a, --all', 'Export all scripts to a single file. Ignored with -
|
|
17
|
+
.addOption(new Option('-f, --file <file>', 'Name of the export file.')).addOption(new Option('-a, --all', 'Export all scripts to a single file. Ignored with -n.')).addOption(new Option('-A, --all-separate', 'Export all scripts to separate files (*.script.json) in the current directory. Ignored with -n or -a.'))
|
|
18
18
|
// deprecated option
|
|
19
|
-
.addOption(new Option('-s, --script <script>', 'DEPRECATED! Use -n/--script-name instead. Name of the script.')).action(
|
|
19
|
+
.addOption(new Option('-s, --script <script>', 'DEPRECATED! Use -n/--script-name instead. Name of the script.')).addOption(new Option('-x, --extract', 'Extract the script from the exported file, and save it to a separate file. Ignored with -n or -a.')).action(
|
|
20
20
|
// implement command logic inside action handler
|
|
21
21
|
async (host, realm, user, password, options, command) => {
|
|
22
22
|
command.handleDefaultArgsAndOpts(host, realm, user, password, options, command);
|
|
23
|
+
const tokens = await getTokens();
|
|
24
|
+
if (!tokens) {
|
|
25
|
+
printMessage('Unable to get tokens. Exiting...', 'error');
|
|
26
|
+
program.help();
|
|
27
|
+
process.exitCode = 1;
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
23
30
|
// export by name
|
|
24
|
-
if (
|
|
31
|
+
if (options.scriptName || options.script) {
|
|
25
32
|
verboseMessage('Exporting script...');
|
|
26
33
|
await exportScriptByNameToFile(options.scriptName || options.script, options.file);
|
|
27
34
|
}
|
|
28
35
|
// -a / --all
|
|
29
|
-
else if (options.all
|
|
36
|
+
else if (options.all) {
|
|
30
37
|
verboseMessage('Exporting all scripts to a single file...');
|
|
31
38
|
await exportScriptsToFile(options.file);
|
|
32
39
|
}
|
|
33
40
|
// -A / --all-separate
|
|
34
|
-
else if (options.allSeparate
|
|
41
|
+
else if (options.allSeparate) {
|
|
35
42
|
verboseMessage('Exporting all scripts to separate files...');
|
|
36
|
-
|
|
43
|
+
// -x / --extract
|
|
44
|
+
if (options.extract) {
|
|
45
|
+
await exportScriptsToFilesExtract();
|
|
46
|
+
} else {
|
|
47
|
+
await exportScriptsToFiles();
|
|
48
|
+
}
|
|
37
49
|
}
|
|
50
|
+
|
|
38
51
|
// unrecognized combination of options or no options
|
|
39
52
|
else {
|
|
40
53
|
printMessage('Unrecognized combination of options or no options...', 'error');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"script-export.js","names":["FrodoCommand","Option","Authenticate","printMessage","verboseMessage","exportScriptByNameToFile","exportScriptsToFile","exportScriptsToFiles","getTokens","program","description","addOption","action","host","realm","user","password","options","command","handleDefaultArgsAndOpts","
|
|
1
|
+
{"version":3,"file":"script-export.js","names":["FrodoCommand","Option","Authenticate","printMessage","verboseMessage","exportScriptByNameToFile","exportScriptsToFile","exportScriptsToFiles","exportScriptsToFilesExtract","getTokens","program","description","addOption","action","host","realm","user","password","options","command","handleDefaultArgsAndOpts","tokens","help","process","exitCode","scriptName","script","file","all","allSeparate","extract","parse"],"sources":["cli/script/script-export.ts"],"sourcesContent":["import { FrodoCommand } from '../FrodoCommand';\nimport { Option } from 'commander';\nimport { Authenticate } from '@rockcarver/frodo-lib';\nimport { printMessage, verboseMessage } from '../../utils/Console';\nimport {\n exportScriptByNameToFile,\n exportScriptsToFile,\n exportScriptsToFiles,\n exportScriptsToFilesExtract,\n} from '../../ops/ScriptOps';\n\nconst { getTokens } = Authenticate;\n\nconst program = new FrodoCommand('frodo script export');\n\nprogram\n .description('Export scripts.')\n .addOption(\n new Option(\n '-n, --script-name <name>',\n 'Name of the script. If specified, -a and -A are ignored.'\n )\n )\n // .addOption(\n // new Option(\n // '-i, --script-id <uuid>',\n // 'Uuid of the script. If specified, -a and -A are ignored.'\n // )\n // )\n .addOption(new Option('-f, --file <file>', 'Name of the export file.'))\n .addOption(\n new Option(\n '-a, --all',\n 'Export all scripts to a single file. Ignored with -n.'\n )\n )\n .addOption(\n new Option(\n '-A, --all-separate',\n 'Export all scripts to separate files (*.script.json) in the current directory. Ignored with -n or -a.'\n )\n )\n // deprecated option\n .addOption(\n new Option(\n '-s, --script <script>',\n 'DEPRECATED! Use -n/--script-name instead. Name of the script.'\n )\n )\n .addOption(\n new Option(\n '-x, --extract',\n 'Extract the script from the exported file, and save it to a separate file. Ignored with -n or -a.'\n )\n )\n .action(\n // implement command logic inside action handler\n async (host, realm, user, password, options, command) => {\n command.handleDefaultArgsAndOpts(\n host,\n realm,\n user,\n password,\n options,\n command\n );\n const tokens = await getTokens();\n if (!tokens) {\n printMessage('Unable to get tokens. Exiting...', 'error');\n program.help();\n process.exitCode = 1;\n return;\n }\n // export by name\n if (options.scriptName || options.script) {\n verboseMessage('Exporting script...');\n await exportScriptByNameToFile(\n options.scriptName || options.script,\n options.file\n );\n }\n // -a / --all\n else if (options.all) {\n verboseMessage('Exporting all scripts to a single file...');\n await exportScriptsToFile(options.file);\n }\n // -A / --all-separate\n else if (options.allSeparate) {\n verboseMessage('Exporting all scripts to separate files...');\n // -x / --extract\n if (options.extract) {\n await exportScriptsToFilesExtract();\n } else {\n await exportScriptsToFiles();\n }\n }\n\n // unrecognized combination of options or no options\n else {\n printMessage(\n 'Unrecognized combination of options or no options...',\n 'error'\n );\n program.help();\n process.exitCode = 1;\n }\n }\n // end command logic inside action handler\n );\n\nprogram.parse();\n"],"mappings":"AAAA,SAASA,YAAY,QAAQ,iBAAiB;AAC9C,SAASC,MAAM,QAAQ,WAAW;AAClC,SAASC,YAAY,QAAQ,uBAAuB;AACpD,SAASC,YAAY,EAAEC,cAAc,QAAQ,qBAAqB;AAClE,SACEC,wBAAwB,EACxBC,mBAAmB,EACnBC,oBAAoB,EACpBC,2BAA2B,QACtB,qBAAqB;AAE5B,MAAM;EAAEC;AAAU,CAAC,GAAGP,YAAY;AAElC,MAAMQ,OAAO,GAAG,IAAIV,YAAY,CAAC,qBAAqB,CAAC;AAEvDU,OAAO,CACJC,WAAW,CAAC,iBAAiB,CAAC,CAC9BC,SAAS,CACR,IAAIX,MAAM,CACR,0BAA0B,EAC1B,0DAA0D,CAC3D;AAEH;AACA;AACA;AACA;AACA;AACA;AAAA,CACCW,SAAS,CAAC,IAAIX,MAAM,CAAC,mBAAmB,EAAE,0BAA0B,CAAC,CAAC,CACtEW,SAAS,CACR,IAAIX,MAAM,CACR,WAAW,EACX,uDAAuD,CACxD,CACF,CACAW,SAAS,CACR,IAAIX,MAAM,CACR,oBAAoB,EACpB,uGAAuG,CACxG;AAEH;AAAA,CACCW,SAAS,CACR,IAAIX,MAAM,CACR,uBAAuB,EACvB,+DAA+D,CAChE,CACF,CACAW,SAAS,CACR,IAAIX,MAAM,CACR,eAAe,EACf,mGAAmG,CACpG,CACF,CACAY,MAAM;AACL;AACA,OAAOC,IAAI,EAAEC,KAAK,EAAEC,IAAI,EAAEC,QAAQ,EAAEC,OAAO,EAAEC,OAAO,KAAK;EACvDA,OAAO,CAACC,wBAAwB,CAC9BN,IAAI,EACJC,KAAK,EACLC,IAAI,EACJC,QAAQ,EACRC,OAAO,EACPC,OAAO,CACR;EACD,MAAME,MAAM,GAAG,MAAMZ,SAAS,EAAE;EAChC,IAAI,CAACY,MAAM,EAAE;IACXlB,YAAY,CAAC,kCAAkC,EAAE,OAAO,CAAC;IACzDO,OAAO,CAACY,IAAI,EAAE;IACdC,OAAO,CAACC,QAAQ,GAAG,CAAC;IACpB;EACF;EACA;EACA,IAAIN,OAAO,CAACO,UAAU,IAAIP,OAAO,CAACQ,MAAM,EAAE;IACxCtB,cAAc,CAAC,qBAAqB,CAAC;IACrC,MAAMC,wBAAwB,CAC5Ba,OAAO,CAACO,UAAU,IAAIP,OAAO,CAACQ,MAAM,EACpCR,OAAO,CAACS,IAAI,CACb;EACH;EACA;EAAA,KACK,IAAIT,OAAO,CAACU,GAAG,EAAE;IACpBxB,cAAc,CAAC,2CAA2C,CAAC;IAC3D,MAAME,mBAAmB,CAACY,OAAO,CAACS,IAAI,CAAC;EACzC;EACA;EAAA,KACK,IAAIT,OAAO,CAACW,WAAW,EAAE;IAC5BzB,cAAc,CAAC,4CAA4C,CAAC;IAC5D;IACA,IAAIc,OAAO,CAACY,OAAO,EAAE;MACnB,MAAMtB,2BAA2B,EAAE;IACrC,CAAC,MAAM;MACL,MAAMD,oBAAoB,EAAE;IAC9B;EACF;;EAEA;EAAA,KACK;IACHJ,YAAY,CACV,sDAAsD,EACtD,OAAO,CACR;IACDO,OAAO,CAACY,IAAI,EAAE;IACdC,OAAO,CAACC,QAAQ,GAAG,CAAC;EACtB;AACF;AACA;AAAA,CACD;;AAEHd,OAAO,CAACqB,KAAK,EAAE"}
|
|
@@ -1,23 +1,30 @@
|
|
|
1
1
|
import { FrodoCommand } from '../FrodoCommand';
|
|
2
2
|
import { Option } from 'commander';
|
|
3
3
|
import { Authenticate, state } from '@rockcarver/frodo-lib';
|
|
4
|
-
import { verboseMessage } from '../../utils/Console';
|
|
5
|
-
import { importScriptsFromFile } from '../../ops/ScriptOps';
|
|
4
|
+
import { printMessage, verboseMessage } from '../../utils/Console';
|
|
5
|
+
import { importScriptsFromFile, importScriptsFromFiles } from '../../ops/ScriptOps';
|
|
6
6
|
const {
|
|
7
7
|
getTokens
|
|
8
8
|
} = Authenticate;
|
|
9
9
|
const program = new FrodoCommand('frodo script import');
|
|
10
10
|
program.description('Import scripts.').addOption(new Option('-f, --file <file>', 'Name of the file to import.')).addOption(new Option('-n, --script-name <name>', 'Name of the script. If specified, -a and -A are ignored.')).addOption(new Option('--re-uuid', 'Re-UUID. Create a new UUID for the script upon import. Use this to duplicate a script or create a new version of the same script. Note that you must also choose a new name using -n/--script-name to avoid import errors.').default(false, 'false'))
|
|
11
11
|
// deprecated option
|
|
12
|
-
.addOption(new Option('-s, --script <script>', 'DEPRECATED! Use -n/--script-name instead. Name of the script.')).action(
|
|
12
|
+
.addOption(new Option('-s, --script <script>', 'DEPRECATED! Use -n/--script-name instead. Name of the script.')).addOption(new Option('-A, --all-separate', 'Import all scripts from separate files (*.script.json) in the current directory. Ignored with -n.')).addOption(new Option('-w, --watch', 'Watch for changes to the script files and import the scripts automatically when the file changes. Can only be used with -A.').default(false, 'false')).action(
|
|
13
13
|
// implement command logic inside action handler
|
|
14
14
|
async (host, realm, user, password, options, command) => {
|
|
15
15
|
command.handleDefaultArgsAndOpts(host, realm, user, password, options, command);
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
16
|
+
const tokens = await getTokens();
|
|
17
|
+
if (!tokens) {
|
|
18
|
+
printMessage('Unable to get tokens. Exiting...', 'error');
|
|
19
|
+
program.help();
|
|
20
20
|
process.exitCode = 1;
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
verboseMessage(`Importing script(s) into realm "${state.getRealm()}"...`);
|
|
24
|
+
if (options.scriptName) {
|
|
25
|
+
await importScriptsFromFile(options.scriptName || options.script, options.file, options.reUuid);
|
|
26
|
+
} else if (options.allSeparate) {
|
|
27
|
+
await importScriptsFromFiles(options.watch, options.reUuid, true);
|
|
21
28
|
}
|
|
22
29
|
}
|
|
23
30
|
// end command logic inside action handler
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"script-import.js","names":["FrodoCommand","Option","Authenticate","state","verboseMessage","importScriptsFromFile","getTokens","program","description","addOption","default","action","host","realm","user","password","options","command","handleDefaultArgsAndOpts","getRealm","scriptName","script","file","reUuid","
|
|
1
|
+
{"version":3,"file":"script-import.js","names":["FrodoCommand","Option","Authenticate","state","printMessage","verboseMessage","importScriptsFromFile","importScriptsFromFiles","getTokens","program","description","addOption","default","action","host","realm","user","password","options","command","handleDefaultArgsAndOpts","tokens","help","process","exitCode","getRealm","scriptName","script","file","reUuid","allSeparate","watch","parse"],"sources":["cli/script/script-import.ts"],"sourcesContent":["import { FrodoCommand } from '../FrodoCommand';\nimport { Option } from 'commander';\nimport { Authenticate, state } from '@rockcarver/frodo-lib';\nimport { printMessage, verboseMessage } from '../../utils/Console';\nimport {\n importScriptsFromFile,\n importScriptsFromFiles,\n} from '../../ops/ScriptOps';\n\nconst { getTokens } = Authenticate;\n\nconst program = new FrodoCommand('frodo script import');\n\nprogram\n .description('Import scripts.')\n .addOption(new Option('-f, --file <file>', 'Name of the file to import.'))\n .addOption(\n new Option(\n '-n, --script-name <name>',\n 'Name of the script. If specified, -a and -A are ignored.'\n )\n )\n .addOption(\n new Option(\n '--re-uuid',\n 'Re-UUID. Create a new UUID for the script upon import. Use this to duplicate a script or create a new version of the same script. Note that you must also choose a new name using -n/--script-name to avoid import errors.'\n ).default(false, 'false')\n )\n // deprecated option\n .addOption(\n new Option(\n '-s, --script <script>',\n 'DEPRECATED! Use -n/--script-name instead. Name of the script.'\n )\n )\n .addOption(\n new Option(\n '-A, --all-separate',\n 'Import all scripts from separate files (*.script.json) in the current directory. Ignored with -n.'\n )\n )\n .addOption(\n new Option(\n '-w, --watch',\n 'Watch for changes to the script files and import the scripts automatically when the file changes. Can only be used with -A.'\n ).default(false, 'false')\n )\n .action(\n // implement command logic inside action handler\n async (host, realm, user, password, options, command) => {\n command.handleDefaultArgsAndOpts(\n host,\n realm,\n user,\n password,\n options,\n command\n );\n const tokens = await getTokens();\n if (!tokens) {\n printMessage('Unable to get tokens. Exiting...', 'error');\n program.help();\n process.exitCode = 1;\n return;\n }\n\n verboseMessage(`Importing script(s) into realm \"${state.getRealm()}\"...`);\n\n if (options.scriptName) {\n await importScriptsFromFile(\n options.scriptName || options.script,\n options.file,\n options.reUuid\n );\n } else if (options.allSeparate) {\n await importScriptsFromFiles(options.watch, options.reUuid, true);\n }\n }\n // end command logic inside action handler\n );\n\nprogram.parse();\n"],"mappings":"AAAA,SAASA,YAAY,QAAQ,iBAAiB;AAC9C,SAASC,MAAM,QAAQ,WAAW;AAClC,SAASC,YAAY,EAAEC,KAAK,QAAQ,uBAAuB;AAC3D,SAASC,YAAY,EAAEC,cAAc,QAAQ,qBAAqB;AAClE,SACEC,qBAAqB,EACrBC,sBAAsB,QACjB,qBAAqB;AAE5B,MAAM;EAAEC;AAAU,CAAC,GAAGN,YAAY;AAElC,MAAMO,OAAO,GAAG,IAAIT,YAAY,CAAC,qBAAqB,CAAC;AAEvDS,OAAO,CACJC,WAAW,CAAC,iBAAiB,CAAC,CAC9BC,SAAS,CAAC,IAAIV,MAAM,CAAC,mBAAmB,EAAE,6BAA6B,CAAC,CAAC,CACzEU,SAAS,CACR,IAAIV,MAAM,CACR,0BAA0B,EAC1B,0DAA0D,CAC3D,CACF,CACAU,SAAS,CACR,IAAIV,MAAM,CACR,WAAW,EACX,4NAA4N,CAC7N,CAACW,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC;AAE3B;AAAA,CACCD,SAAS,CACR,IAAIV,MAAM,CACR,uBAAuB,EACvB,+DAA+D,CAChE,CACF,CACAU,SAAS,CACR,IAAIV,MAAM,CACR,oBAAoB,EACpB,mGAAmG,CACpG,CACF,CACAU,SAAS,CACR,IAAIV,MAAM,CACR,aAAa,EACb,6HAA6H,CAC9H,CAACW,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,CAC1B,CACAC,MAAM;AACL;AACA,OAAOC,IAAI,EAAEC,KAAK,EAAEC,IAAI,EAAEC,QAAQ,EAAEC,OAAO,EAAEC,OAAO,KAAK;EACvDA,OAAO,CAACC,wBAAwB,CAC9BN,IAAI,EACJC,KAAK,EACLC,IAAI,EACJC,QAAQ,EACRC,OAAO,EACPC,OAAO,CACR;EACD,MAAME,MAAM,GAAG,MAAMb,SAAS,EAAE;EAChC,IAAI,CAACa,MAAM,EAAE;IACXjB,YAAY,CAAC,kCAAkC,EAAE,OAAO,CAAC;IACzDK,OAAO,CAACa,IAAI,EAAE;IACdC,OAAO,CAACC,QAAQ,GAAG,CAAC;IACpB;EACF;EAEAnB,cAAc,CAAE,mCAAkCF,KAAK,CAACsB,QAAQ,EAAG,MAAK,CAAC;EAEzE,IAAIP,OAAO,CAACQ,UAAU,EAAE;IACtB,MAAMpB,qBAAqB,CACzBY,OAAO,CAACQ,UAAU,IAAIR,OAAO,CAACS,MAAM,EACpCT,OAAO,CAACU,IAAI,EACZV,OAAO,CAACW,MAAM,CACf;EACH,CAAC,MAAM,IAAIX,OAAO,CAACY,WAAW,EAAE;IAC9B,MAAMvB,sBAAsB,CAACW,OAAO,CAACa,KAAK,EAAEb,OAAO,CAACW,MAAM,EAAE,IAAI,CAAC;EACnE;AACF;AACA;AAAA,CACD;;AAEHpB,OAAO,CAACuB,KAAK,EAAE"}
|
package/esm/ops/Saml2Ops.js
CHANGED
|
@@ -2,6 +2,7 @@ import fs from 'fs';
|
|
|
2
2
|
import path from 'path';
|
|
3
3
|
import { Saml2, ExportImportUtils } from '@rockcarver/frodo-lib';
|
|
4
4
|
import { createObjectTable, createProgressBar, createTable, debugMessage, printMessage, showSpinner, stopProgressBar, stopSpinner, updateProgressBar } from '../utils/Console';
|
|
5
|
+
import { saveTextToFile } from '../utils/ExportImportUtils';
|
|
5
6
|
const {
|
|
6
7
|
roleMap,
|
|
7
8
|
exportSaml2Provider,
|
|
@@ -20,7 +21,6 @@ const {
|
|
|
20
21
|
const {
|
|
21
22
|
getTypedFilename,
|
|
22
23
|
saveJsonToFile,
|
|
23
|
-
saveTextToFile,
|
|
24
24
|
getRealmString,
|
|
25
25
|
saveToFile,
|
|
26
26
|
validateImport
|
package/esm/ops/Saml2Ops.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Saml2Ops.js","names":["fs","path","Saml2","ExportImportUtils","createObjectTable","createProgressBar","createTable","debugMessage","printMessage","showSpinner","stopProgressBar","stopSpinner","updateProgressBar","roleMap","exportSaml2Provider","exportSaml2Providers","getSaml2ProviderStubs","getProviderByLocationAndId","getProviderMetadata","getProviderMetadataUrl","getSaml2ProviderStub","getRawSaml2Providers","getRawSaml2Provider","importSaml2Provider","importSaml2Providers","putRawSaml2Provider","getTypedFilename","saveJsonToFile","saveTextToFile","getRealmString","saveToFile","validateImport","getOneLineDescription","saml2ProviderObj","roles","key","value","Object","entries","push","description","entityId","entityLocation","length","join","getTableHeaderMd","markdown","getTableRowMd","row","listSaml2Providers","long","providerList","sort","a","b","_id","localeCompare","provider","table","location","map","role","toString","describeSaml2Provider","stub","id","rawProviderData","_rev","metadataUrl","error","message","exportSaml2MetadataToFile","file","fileName","metaData","brightCyan","exportSaml2ProviderToFile","fileData","err","exportSaml2ProvidersToFile","exportData","response","status","exportSaml2ProvidersToFiles","stubs","importSaml2ProviderFromFile","readFile","data","JSON","parse","meta","importFirstSaml2ProviderFromFile","keys","saml","remote","hosted","importSaml2ProvidersFromFile","importSaml2ProvidersFromFiles","names","readdirSync","jsonFiles","filter","name","toLowerCase","endsWith","totalStatus","total","successes","warnings","failures","readFileSync","myStatus","listRawSaml2Providers","result","exportRawSaml2ProviderToFile","rawData","stringify","exportRawSaml2ProvidersToFile","samlApplicationList","exportRawSaml2ProvidersToFiles","hasError","exportedAmount","item","samlApplicationData","importRawSaml2ProviderFromFile","indexOf","samlEntityData","application","importFirstRawSaml2ProviderFromFile","importRawSaml2ProvidersFromFile","amountOfEntities","then","importRawSaml2ProvidersFromFiles","directory","files","filesToImport","forEach","filePathAbsolute"],"sources":["ops/Saml2Ops.ts"],"sourcesContent":["import fs from 'fs';\nimport path from 'path';\nimport { Saml2ProviderSkeleton } from '@rockcarver/frodo-lib/types/api/ApiTypes';\nimport { Saml2, ExportImportUtils } from '@rockcarver/frodo-lib';\nimport {\n MultiOpStatusInterface,\n Saml2ExportInterface,\n} from '@rockcarver/frodo-lib/types/ops/OpsTypes';\nimport {\n createObjectTable,\n createProgressBar,\n createTable,\n debugMessage,\n printMessage,\n showSpinner,\n stopProgressBar,\n stopSpinner,\n updateProgressBar,\n} from '../utils/Console';\n\nconst {\n roleMap,\n exportSaml2Provider,\n exportSaml2Providers,\n getSaml2ProviderStubs,\n getProviderByLocationAndId,\n getProviderMetadata,\n getProviderMetadataUrl,\n getSaml2ProviderStub,\n getRawSaml2Providers,\n getRawSaml2Provider,\n importSaml2Provider,\n importSaml2Providers,\n putRawSaml2Provider,\n} = Saml2;\nconst {\n getTypedFilename,\n saveJsonToFile,\n saveTextToFile,\n getRealmString,\n saveToFile,\n validateImport,\n} = ExportImportUtils;\n\n/**\n * Get a one-line description of the saml2 provider object\n * @param {Saml2ProviderSkeleton} saml2ProviderObj saml2 provider object to describe\n * @returns {string} a one-line description\n */\nexport function getOneLineDescription(\n saml2ProviderObj: Saml2ProviderSkeleton\n): string {\n const roles: string[] = [];\n for (const [key, value] of Object.entries(roleMap)) {\n if (saml2ProviderObj[key]) {\n roles.push(value);\n }\n }\n const description = `[${saml2ProviderObj.entityId['brightCyan']}]${\n ' (' + saml2ProviderObj.entityLocation\n }${roles.length ? ' ' + roles.join(', ') + ')' : ')'}`;\n return description;\n}\n\n/**\n * Get markdown table header\n * @returns {string} markdown table header\n */\nexport function getTableHeaderMd(): string {\n let markdown = '';\n markdown += '| Entity Id | Location | Role(s) |\\n';\n markdown += '| --------- | -------- | ------- |';\n return markdown;\n}\n\n/**\n * Get a table-row of the saml2 provider in markdown\n * @param {Saml2ProviderSkeleton} saml2ProviderObj saml2 provider object to describe\n * @returns {string} a table-row of the saml2 provider in markdown\n */\nexport function getTableRowMd(saml2ProviderObj: Saml2ProviderSkeleton): string {\n const roles: string[] = [];\n for (const [key, value] of Object.entries(roleMap)) {\n if (saml2ProviderObj[key]) {\n roles.push(value);\n }\n }\n const row = `| ${saml2ProviderObj.entityId} | ${\n saml2ProviderObj.entityLocation\n } | ${roles.length ? roles.join(', ') : ''} |`;\n return row;\n}\n\n/**\n * List entity providers\n * @param {boolean} long Long list format with details\n */\nexport async function listSaml2Providers(long = false) {\n const providerList = await getSaml2ProviderStubs();\n providerList.sort((a, b) => a._id.localeCompare(b._id));\n if (!long) {\n for (const provider of providerList) {\n printMessage(`${provider.entityId}`, 'data');\n }\n } else {\n const table = createTable([\n 'Entity Id'['brightCyan'],\n 'Location'['brightCyan'],\n 'Role(s)'['brightCyan'],\n ]);\n for (const provider of providerList) {\n table.push([\n provider.entityId,\n provider.location,\n provider.roles.map((role) => roleMap[role]).join(', '),\n ]);\n }\n printMessage(table.toString());\n }\n}\n\n/**\n * Describe an entity provider's configuration\n * @param {String} entityId Provider entity id\n */\nexport async function describeSaml2Provider(entityId) {\n try {\n const stub = await getSaml2ProviderStub(entityId);\n printMessage(stub);\n const { location } = stub;\n const id = stub._id;\n const roles = stub.roles.map((role: string) => roleMap[role]).join(', ');\n const rawProviderData = await getProviderByLocationAndId(location, id);\n delete rawProviderData._id;\n delete rawProviderData._rev;\n rawProviderData.location = location;\n rawProviderData.roles = roles;\n rawProviderData.metadataUrl = getProviderMetadataUrl(entityId);\n const table = createObjectTable(rawProviderData);\n printMessage(table.toString());\n } catch (error) {\n printMessage(error.message, 'error');\n }\n}\n\n/**\n * Export provider metadata to file\n * @param {String} entityId Provider entity id\n * @param {String} file Optional filename\n */\nexport async function exportSaml2MetadataToFile(entityId, file = null) {\n let fileName = file;\n if (!fileName) {\n fileName = getTypedFilename(entityId, 'metadata', 'xml');\n }\n createProgressBar(1, `Exporting metadata for: ${entityId}`);\n try {\n updateProgressBar(`Writing file ${fileName}`);\n const metaData = await getProviderMetadata(entityId);\n saveTextToFile(metaData, fileName);\n stopProgressBar(\n `Exported ${entityId.brightCyan} metadata to ${fileName.brightCyan}.`\n );\n } catch (error) {\n stopProgressBar(`${error}`);\n printMessage(error, 'error');\n }\n}\n\n/**\n * Export a single entity provider to file\n * @param {String} entityId Provider entity id\n * @param {String} file Optional filename\n */\nexport async function exportSaml2ProviderToFile(entityId, file = null) {\n debugMessage(\n `cli.Saml2Ops.exportSaml2ProviderToFile: start [entityId=${entityId}, file=${file}]`\n );\n let fileName = file;\n if (!fileName) {\n fileName = getTypedFilename(entityId, 'saml');\n }\n try {\n createProgressBar(1, `Exporting provider ${entityId}`);\n const fileData = await exportSaml2Provider(entityId);\n saveJsonToFile(fileData, fileName);\n stopProgressBar(\n `Exported ${entityId.brightCyan} to ${fileName.brightCyan}.`\n );\n } catch (err) {\n stopProgressBar(`${err}`);\n printMessage(err, 'error');\n }\n debugMessage(\n `cli.Saml2Ops.exportSaml2ProviderToFile: end [entityId=${entityId}, file=${fileName}]`\n );\n}\n\n/**\n * Export all entity providers to one file\n * @param {String} file Optional filename\n */\nexport async function exportSaml2ProvidersToFile(file = null) {\n debugMessage(`cli.Saml2Ops.exportSaml2ProviderToFile: start [file=${file}]`);\n let fileName = file;\n if (!fileName) {\n fileName = getTypedFilename(`all${getRealmString()}Providers`, 'saml');\n }\n try {\n const exportData = await exportSaml2Providers();\n saveJsonToFile(exportData, fileName);\n } catch (error) {\n printMessage(error.message, 'error');\n printMessage(\n `exportSaml2ProvidersToFile: ${error.response?.status}`,\n 'error'\n );\n }\n debugMessage(`cli.Saml2Ops.exportSaml2ProviderToFile: end [file=${file}]`);\n}\n\n/**\n * Export all entity providers to individual files\n */\nexport async function exportSaml2ProvidersToFiles() {\n const stubs = await getSaml2ProviderStubs();\n if (stubs.length > 0) {\n createProgressBar(stubs.length, 'Exporting providers');\n for (const stub of stubs) {\n updateProgressBar(`Exporting provider ${stub.entityId}`);\n const fileName = getTypedFilename(stub.entityId, 'saml');\n const fileData = await exportSaml2Provider(stub.entityId);\n saveJsonToFile(fileData, fileName);\n }\n stopProgressBar(`${stubs.length} providers exported.`);\n } else {\n printMessage('No entity providers found.', 'info');\n }\n}\n\n/**\n * Import a SAML entity provider by entity id from file\n * @param {String} entityId Provider entity id\n * @param {String} file Import file name\n */\nexport async function importSaml2ProviderFromFile(\n entityId: string,\n file: string\n) {\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 showSpinner(`Importing ${entityId}...`);\n try {\n await importSaml2Provider(entityId, fileData);\n stopSpinner(`Imported ${entityId}.`);\n } catch (error) {\n stopSpinner(`Error importing ${entityId}: ${error.message}`);\n }\n } else {\n printMessage('Import validation failed...', 'error');\n }\n });\n}\n\n/**\n * Import a SAML entity provider by entity id from file\n * @param {String} file Import file name\n */\nexport async function importFirstSaml2ProviderFromFile(file: string) {\n fs.readFile(file, 'utf8', async (err, data) => {\n if (err) throw err;\n const fileData = JSON.parse(data) as Saml2ExportInterface;\n // pick the first provider and run with it\n const entityId =\n Object.keys(fileData.saml.remote)[0] ||\n Object.keys(fileData.saml.hosted)[0];\n if (validateImport(fileData.meta)) {\n showSpinner(`Importing ${entityId}...`);\n try {\n await importSaml2Provider(entityId, fileData);\n stopSpinner(`Imported ${entityId}.`);\n } catch (error) {\n stopSpinner(`Error importing ${entityId}: ${error.message}`);\n }\n } else {\n printMessage('Import validation failed...', 'error');\n }\n });\n}\n\n/**\n * Import all SAML entity providers from file\n * @param {String} file Import file name\n */\nexport async function importSaml2ProvidersFromFile(file: string) {\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 await importSaml2Providers(fileData);\n } else {\n printMessage('Import validation failed...', 'error');\n }\n });\n}\n\n/**\n * Import all SAML entity providers from all *.saml.json files in the current directory\n */\nexport async function importSaml2ProvidersFromFiles() {\n const names = fs.readdirSync('.');\n const jsonFiles = names.filter((name) =>\n name.toLowerCase().endsWith('.saml.json')\n );\n createProgressBar(jsonFiles.length, 'Importing providers...');\n const totalStatus: MultiOpStatusInterface = {\n total: 0,\n successes: 0,\n warnings: 0,\n failures: 0,\n };\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 const myStatus = await importSaml2Providers(fileData);\n totalStatus.total += myStatus.total;\n totalStatus.successes += myStatus.successes;\n totalStatus.warnings += myStatus.warnings;\n totalStatus.failures += myStatus.failures;\n updateProgressBar(\n `Imported ${myStatus.successes}/${myStatus.total} provider(s) from ${file}.`\n );\n } else {\n printMessage(`Validation of ${file} failed!`, 'error');\n }\n }\n stopProgressBar(\n `Imported ${totalStatus.successes} of ${totalStatus.total} provider(s) from ${jsonFiles.length} file(s).`\n );\n}\n\n/**\n * List entity providers\n */\nexport async function listRawSaml2Providers() {\n const providerList = (await getRawSaml2Providers()).result;\n providerList.sort((a, b) => a._id.localeCompare(b._id));\n for (const provider of providerList) {\n printMessage(`${provider._id}`, 'data');\n }\n}\n\n/**\n * Exports a RAW SAML entity, which means the raw xml is included.\n * @param {string} entityId Reference to the entity for export\n * @param {string} file Optional filename for the exported file\n */\nexport async function exportRawSaml2ProviderToFile(entityId, file = null) {\n printMessage(`Exporting raw SAML entity provider ${entityId}`, 'info');\n let fileName = file;\n if (!file) {\n fileName = getTypedFilename(`${entityId}`, 'raw.saml');\n }\n createProgressBar(1, `Exporting raw entity provider: ${entityId}`);\n try {\n const rawData = await getRawSaml2Provider(entityId);\n updateProgressBar(`Writing file ${fileName}`);\n saveTextToFile(JSON.stringify(rawData, null, 2), fileName);\n stopProgressBar(`Exported raw entity provider ${entityId} to ${fileName}.`);\n } catch (error) {\n stopProgressBar(`Error exporting raw entity ${entityId}: ${error.message}`);\n printMessage(error.response?.data, 'error');\n }\n}\n\n/**\n * Export all entity providers raw to one file\n * @param {String} file Optional filename\n */\nexport async function exportRawSaml2ProvidersToFile(file = null) {\n let fileName = file;\n if (!fileName) {\n fileName = getTypedFilename(\n `all${getRealmString()}ProvidersRaw`,\n 'raw.saml'\n );\n }\n try {\n const samlApplicationList = (await getRawSaml2Providers()).result;\n\n saveToFile('application', samlApplicationList, '_id', fileName);\n printMessage(\n `All RAW saml entity providers exported to: ${fileName}`,\n 'info'\n );\n } catch (error) {\n printMessage(error.message, 'error');\n printMessage(\n `exportRawSaml2ProvidersToFile: ${error.response?.status}`,\n 'error'\n );\n }\n}\n\n/**\n * Export all entity providers to individual files\n */\nexport async function exportRawSaml2ProvidersToFiles() {\n const samlApplicationList = (await getRawSaml2Providers()).result;\n let hasError = false;\n createProgressBar(samlApplicationList.length, 'Exporting RAW providers');\n let exportedAmount = 0;\n for (const item of samlApplicationList) {\n updateProgressBar(`Exporting provider ${item.entityId}`);\n try {\n const samlApplicationData = await getRawSaml2Provider(item._id);\n const fileName = getTypedFilename(\n `${item._id}${getRealmString()}ProviderRaw`,\n 'raw.saml'\n );\n saveToFile('application', [samlApplicationData], '_id', fileName);\n exportedAmount++;\n } catch (error) {\n hasError = true;\n printMessage(`Unable to export: ${item._id}`, 'error');\n }\n }\n stopProgressBar(`${exportedAmount} providers exported.`);\n if (!hasError) {\n printMessage('All entities exported.', 'info');\n } else {\n printMessage('All other entities exported.', 'info');\n }\n}\n\n/**\n * Imports a raw SAML export file (containing one entity).\n * @param {string} file The import file\n */\nexport async function importRawSaml2ProviderFromFile(\n // entityId: string,\n file: string\n) {\n printMessage(`Importing SAML Entity ${file}...`, 'info');\n if (file.indexOf('.raw.saml.json') > -1) {\n const samlEntityData = JSON.parse(fs.readFileSync(file, 'utf8'));\n if (validateImport(samlEntityData.meta)) {\n for (const id in samlEntityData.application) {\n // remove the \"_rev\" data before PUT\n delete samlEntityData.application[id]._rev;\n try {\n await putRawSaml2Provider(id, samlEntityData.application[id]);\n } catch (error) {\n printMessage(`Unable to import: ${id}`, 'error');\n }\n printMessage(`Imported ${id}`, 'info');\n }\n } else {\n printMessage('Import validation failed...', 'error');\n }\n }\n}\n\n/**\n * Import first raw SAML entity provider from file\n * @param {String} file Import file name\n */\nexport async function importFirstRawSaml2ProviderFromFile(file) {\n printMessage(`Importing SAML Entity ${file}...`, 'info');\n if (file.indexOf('.raw.saml.json') > -1) {\n const samlEntityData = JSON.parse(fs.readFileSync(file, 'utf8'));\n if (validateImport(samlEntityData.meta)) {\n for (const id in samlEntityData.application) {\n // remove the \"_rev\" data before PUT\n delete samlEntityData.application[id]._rev;\n try {\n await putRawSaml2Provider(id, samlEntityData.application[id]);\n } catch (error) {\n printMessage(`Unable to import: ${id}`, 'error');\n }\n printMessage(`Imported ${id}`, 'info');\n return;\n }\n } else {\n printMessage('Import validation failed...', 'error');\n }\n }\n}\n\n/**\n * Imports the RAW provider info from a single file.\n * @param file Import file name\n */\nexport async function importRawSaml2ProvidersFromFile(file: string) {\n fs.readFile(file, 'utf8', async function (err, data) {\n if (err) throw err;\n const samlEntityData = JSON.parse(data);\n let amountOfEntities = 0;\n for (const id in samlEntityData.application) {\n if (id.length) {\n amountOfEntities++;\n }\n }\n if (validateImport(samlEntityData.meta)) {\n createProgressBar(amountOfEntities, 'Importing providers...');\n for (const id in samlEntityData.application) {\n // remove the \"_rev\" data before PUT\n delete samlEntityData.application[id]._rev;\n await putRawSaml2Provider(id, samlEntityData.application[id]).then(\n (result) => {\n if (result === null) {\n printMessage(`Import validation failed for ${id}`, 'error');\n }\n }\n );\n updateProgressBar(`Imported ${id}...`);\n }\n stopProgressBar(`Import done`);\n } else {\n printMessage('Import validation failed...', 'error');\n }\n });\n}\n\n/**\n * Whenever the SAML RAW file were exported using the exportRAW functionality this function\n * is used to read them back in. Only files with the .samlRaw.json extension will be imported.\n * @param {string} directory The directory from which to import the files\n */\nexport async function importRawSaml2ProvidersFromFiles(directory) {\n const files = fs.readdirSync(directory);\n const filesToImport = files.filter(\n (file) => file.indexOf('.samlRaw.json') > -1\n );\n\n if (filesToImport.length > 0) {\n createProgressBar(filesToImport.length, 'Importing providers...');\n filesToImport.forEach(async (file) => {\n const filePathAbsolute = path.join(directory, file);\n filesToImport.push(file);\n const samlEntityData = JSON.parse(\n fs.readFileSync(filePathAbsolute, 'utf8')\n );\n if (validateImport(samlEntityData.meta)) {\n for (const id in samlEntityData.application) {\n // remove the \"_rev\" data before PUT\n delete samlEntityData.application[id]._rev;\n await putRawSaml2Provider(id, samlEntityData.application[id]).then(\n (result) => {\n if (result === null) {\n printMessage(`Import validation failed for ${id}`, 'error');\n }\n }\n );\n updateProgressBar(`Imported ${id}...`);\n }\n } else {\n printMessage('Import validation failed...', 'error');\n }\n });\n stopProgressBar(`Import done`);\n } else {\n printMessage(\n 'Import failed, no files to import. (check extension to be .samlRaw.json)',\n 'warn'\n );\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Saml2Ops.js","names":["fs","path","Saml2","ExportImportUtils","createObjectTable","createProgressBar","createTable","debugMessage","printMessage","showSpinner","stopProgressBar","stopSpinner","updateProgressBar","saveTextToFile","roleMap","exportSaml2Provider","exportSaml2Providers","getSaml2ProviderStubs","getProviderByLocationAndId","getProviderMetadata","getProviderMetadataUrl","getSaml2ProviderStub","getRawSaml2Providers","getRawSaml2Provider","importSaml2Provider","importSaml2Providers","putRawSaml2Provider","getTypedFilename","saveJsonToFile","getRealmString","saveToFile","validateImport","getOneLineDescription","saml2ProviderObj","roles","key","value","Object","entries","push","description","entityId","entityLocation","length","join","getTableHeaderMd","markdown","getTableRowMd","row","listSaml2Providers","long","providerList","sort","a","b","_id","localeCompare","provider","table","location","map","role","toString","describeSaml2Provider","stub","id","rawProviderData","_rev","metadataUrl","error","message","exportSaml2MetadataToFile","file","fileName","metaData","brightCyan","exportSaml2ProviderToFile","fileData","err","exportSaml2ProvidersToFile","exportData","response","status","exportSaml2ProvidersToFiles","stubs","importSaml2ProviderFromFile","readFile","data","JSON","parse","meta","importFirstSaml2ProviderFromFile","keys","saml","remote","hosted","importSaml2ProvidersFromFile","importSaml2ProvidersFromFiles","names","readdirSync","jsonFiles","filter","name","toLowerCase","endsWith","totalStatus","total","successes","warnings","failures","readFileSync","myStatus","listRawSaml2Providers","result","exportRawSaml2ProviderToFile","rawData","stringify","exportRawSaml2ProvidersToFile","samlApplicationList","exportRawSaml2ProvidersToFiles","hasError","exportedAmount","item","samlApplicationData","importRawSaml2ProviderFromFile","indexOf","samlEntityData","application","importFirstRawSaml2ProviderFromFile","importRawSaml2ProvidersFromFile","amountOfEntities","then","importRawSaml2ProvidersFromFiles","directory","files","filesToImport","forEach","filePathAbsolute"],"sources":["ops/Saml2Ops.ts"],"sourcesContent":["import fs from 'fs';\nimport path from 'path';\nimport { Saml2ProviderSkeleton } from '@rockcarver/frodo-lib/types/api/ApiTypes';\nimport { Saml2, ExportImportUtils } from '@rockcarver/frodo-lib';\nimport {\n MultiOpStatusInterface,\n Saml2ExportInterface,\n} from '@rockcarver/frodo-lib/types/ops/OpsTypes';\nimport {\n createObjectTable,\n createProgressBar,\n createTable,\n debugMessage,\n printMessage,\n showSpinner,\n stopProgressBar,\n stopSpinner,\n updateProgressBar,\n} from '../utils/Console';\nimport { saveTextToFile } from '../utils/ExportImportUtils';\n\nconst {\n roleMap,\n exportSaml2Provider,\n exportSaml2Providers,\n getSaml2ProviderStubs,\n getProviderByLocationAndId,\n getProviderMetadata,\n getProviderMetadataUrl,\n getSaml2ProviderStub,\n getRawSaml2Providers,\n getRawSaml2Provider,\n importSaml2Provider,\n importSaml2Providers,\n putRawSaml2Provider,\n} = Saml2;\nconst {\n getTypedFilename,\n saveJsonToFile,\n getRealmString,\n saveToFile,\n validateImport,\n} = ExportImportUtils;\n\n/**\n * Get a one-line description of the saml2 provider object\n * @param {Saml2ProviderSkeleton} saml2ProviderObj saml2 provider object to describe\n * @returns {string} a one-line description\n */\nexport function getOneLineDescription(\n saml2ProviderObj: Saml2ProviderSkeleton\n): string {\n const roles: string[] = [];\n for (const [key, value] of Object.entries(roleMap)) {\n if (saml2ProviderObj[key]) {\n roles.push(value);\n }\n }\n const description = `[${saml2ProviderObj.entityId['brightCyan']}]${\n ' (' + saml2ProviderObj.entityLocation\n }${roles.length ? ' ' + roles.join(', ') + ')' : ')'}`;\n return description;\n}\n\n/**\n * Get markdown table header\n * @returns {string} markdown table header\n */\nexport function getTableHeaderMd(): string {\n let markdown = '';\n markdown += '| Entity Id | Location | Role(s) |\\n';\n markdown += '| --------- | -------- | ------- |';\n return markdown;\n}\n\n/**\n * Get a table-row of the saml2 provider in markdown\n * @param {Saml2ProviderSkeleton} saml2ProviderObj saml2 provider object to describe\n * @returns {string} a table-row of the saml2 provider in markdown\n */\nexport function getTableRowMd(saml2ProviderObj: Saml2ProviderSkeleton): string {\n const roles: string[] = [];\n for (const [key, value] of Object.entries(roleMap)) {\n if (saml2ProviderObj[key]) {\n roles.push(value);\n }\n }\n const row = `| ${saml2ProviderObj.entityId} | ${\n saml2ProviderObj.entityLocation\n } | ${roles.length ? roles.join(', ') : ''} |`;\n return row;\n}\n\n/**\n * List entity providers\n * @param {boolean} long Long list format with details\n */\nexport async function listSaml2Providers(long = false) {\n const providerList = await getSaml2ProviderStubs();\n providerList.sort((a, b) => a._id.localeCompare(b._id));\n if (!long) {\n for (const provider of providerList) {\n printMessage(`${provider.entityId}`, 'data');\n }\n } else {\n const table = createTable([\n 'Entity Id'['brightCyan'],\n 'Location'['brightCyan'],\n 'Role(s)'['brightCyan'],\n ]);\n for (const provider of providerList) {\n table.push([\n provider.entityId,\n provider.location,\n provider.roles.map((role) => roleMap[role]).join(', '),\n ]);\n }\n printMessage(table.toString());\n }\n}\n\n/**\n * Describe an entity provider's configuration\n * @param {String} entityId Provider entity id\n */\nexport async function describeSaml2Provider(entityId) {\n try {\n const stub = await getSaml2ProviderStub(entityId);\n printMessage(stub);\n const { location } = stub;\n const id = stub._id;\n const roles = stub.roles.map((role: string) => roleMap[role]).join(', ');\n const rawProviderData = await getProviderByLocationAndId(location, id);\n delete rawProviderData._id;\n delete rawProviderData._rev;\n rawProviderData.location = location;\n rawProviderData.roles = roles;\n rawProviderData.metadataUrl = getProviderMetadataUrl(entityId);\n const table = createObjectTable(rawProviderData);\n printMessage(table.toString());\n } catch (error) {\n printMessage(error.message, 'error');\n }\n}\n\n/**\n * Export provider metadata to file\n * @param {String} entityId Provider entity id\n * @param {String} file Optional filename\n */\nexport async function exportSaml2MetadataToFile(entityId, file = null) {\n let fileName = file;\n if (!fileName) {\n fileName = getTypedFilename(entityId, 'metadata', 'xml');\n }\n createProgressBar(1, `Exporting metadata for: ${entityId}`);\n try {\n updateProgressBar(`Writing file ${fileName}`);\n const metaData = await getProviderMetadata(entityId);\n saveTextToFile(metaData, fileName);\n stopProgressBar(\n `Exported ${entityId.brightCyan} metadata to ${fileName.brightCyan}.`\n );\n } catch (error) {\n stopProgressBar(`${error}`);\n printMessage(error, 'error');\n }\n}\n\n/**\n * Export a single entity provider to file\n * @param {String} entityId Provider entity id\n * @param {String} file Optional filename\n */\nexport async function exportSaml2ProviderToFile(entityId, file = null) {\n debugMessage(\n `cli.Saml2Ops.exportSaml2ProviderToFile: start [entityId=${entityId}, file=${file}]`\n );\n let fileName = file;\n if (!fileName) {\n fileName = getTypedFilename(entityId, 'saml');\n }\n try {\n createProgressBar(1, `Exporting provider ${entityId}`);\n const fileData = await exportSaml2Provider(entityId);\n saveJsonToFile(fileData, fileName);\n stopProgressBar(\n `Exported ${entityId.brightCyan} to ${fileName.brightCyan}.`\n );\n } catch (err) {\n stopProgressBar(`${err}`);\n printMessage(err, 'error');\n }\n debugMessage(\n `cli.Saml2Ops.exportSaml2ProviderToFile: end [entityId=${entityId}, file=${fileName}]`\n );\n}\n\n/**\n * Export all entity providers to one file\n * @param {String} file Optional filename\n */\nexport async function exportSaml2ProvidersToFile(file = null) {\n debugMessage(`cli.Saml2Ops.exportSaml2ProviderToFile: start [file=${file}]`);\n let fileName = file;\n if (!fileName) {\n fileName = getTypedFilename(`all${getRealmString()}Providers`, 'saml');\n }\n try {\n const exportData = await exportSaml2Providers();\n saveJsonToFile(exportData, fileName);\n } catch (error) {\n printMessage(error.message, 'error');\n printMessage(\n `exportSaml2ProvidersToFile: ${error.response?.status}`,\n 'error'\n );\n }\n debugMessage(`cli.Saml2Ops.exportSaml2ProviderToFile: end [file=${file}]`);\n}\n\n/**\n * Export all entity providers to individual files\n */\nexport async function exportSaml2ProvidersToFiles() {\n const stubs = await getSaml2ProviderStubs();\n if (stubs.length > 0) {\n createProgressBar(stubs.length, 'Exporting providers');\n for (const stub of stubs) {\n updateProgressBar(`Exporting provider ${stub.entityId}`);\n const fileName = getTypedFilename(stub.entityId, 'saml');\n const fileData = await exportSaml2Provider(stub.entityId);\n saveJsonToFile(fileData, fileName);\n }\n stopProgressBar(`${stubs.length} providers exported.`);\n } else {\n printMessage('No entity providers found.', 'info');\n }\n}\n\n/**\n * Import a SAML entity provider by entity id from file\n * @param {String} entityId Provider entity id\n * @param {String} file Import file name\n */\nexport async function importSaml2ProviderFromFile(\n entityId: string,\n file: string\n) {\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 showSpinner(`Importing ${entityId}...`);\n try {\n await importSaml2Provider(entityId, fileData);\n stopSpinner(`Imported ${entityId}.`);\n } catch (error) {\n stopSpinner(`Error importing ${entityId}: ${error.message}`);\n }\n } else {\n printMessage('Import validation failed...', 'error');\n }\n });\n}\n\n/**\n * Import a SAML entity provider by entity id from file\n * @param {String} file Import file name\n */\nexport async function importFirstSaml2ProviderFromFile(file: string) {\n fs.readFile(file, 'utf8', async (err, data) => {\n if (err) throw err;\n const fileData = JSON.parse(data) as Saml2ExportInterface;\n // pick the first provider and run with it\n const entityId =\n Object.keys(fileData.saml.remote)[0] ||\n Object.keys(fileData.saml.hosted)[0];\n if (validateImport(fileData.meta)) {\n showSpinner(`Importing ${entityId}...`);\n try {\n await importSaml2Provider(entityId, fileData);\n stopSpinner(`Imported ${entityId}.`);\n } catch (error) {\n stopSpinner(`Error importing ${entityId}: ${error.message}`);\n }\n } else {\n printMessage('Import validation failed...', 'error');\n }\n });\n}\n\n/**\n * Import all SAML entity providers from file\n * @param {String} file Import file name\n */\nexport async function importSaml2ProvidersFromFile(file: string) {\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 await importSaml2Providers(fileData);\n } else {\n printMessage('Import validation failed...', 'error');\n }\n });\n}\n\n/**\n * Import all SAML entity providers from all *.saml.json files in the current directory\n */\nexport async function importSaml2ProvidersFromFiles() {\n const names = fs.readdirSync('.');\n const jsonFiles = names.filter((name) =>\n name.toLowerCase().endsWith('.saml.json')\n );\n createProgressBar(jsonFiles.length, 'Importing providers...');\n const totalStatus: MultiOpStatusInterface = {\n total: 0,\n successes: 0,\n warnings: 0,\n failures: 0,\n };\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 const myStatus = await importSaml2Providers(fileData);\n totalStatus.total += myStatus.total;\n totalStatus.successes += myStatus.successes;\n totalStatus.warnings += myStatus.warnings;\n totalStatus.failures += myStatus.failures;\n updateProgressBar(\n `Imported ${myStatus.successes}/${myStatus.total} provider(s) from ${file}.`\n );\n } else {\n printMessage(`Validation of ${file} failed!`, 'error');\n }\n }\n stopProgressBar(\n `Imported ${totalStatus.successes} of ${totalStatus.total} provider(s) from ${jsonFiles.length} file(s).`\n );\n}\n\n/**\n * List entity providers\n */\nexport async function listRawSaml2Providers() {\n const providerList = (await getRawSaml2Providers()).result;\n providerList.sort((a, b) => a._id.localeCompare(b._id));\n for (const provider of providerList) {\n printMessage(`${provider._id}`, 'data');\n }\n}\n\n/**\n * Exports a RAW SAML entity, which means the raw xml is included.\n * @param {string} entityId Reference to the entity for export\n * @param {string} file Optional filename for the exported file\n */\nexport async function exportRawSaml2ProviderToFile(entityId, file = null) {\n printMessage(`Exporting raw SAML entity provider ${entityId}`, 'info');\n let fileName = file;\n if (!file) {\n fileName = getTypedFilename(`${entityId}`, 'raw.saml');\n }\n createProgressBar(1, `Exporting raw entity provider: ${entityId}`);\n try {\n const rawData = await getRawSaml2Provider(entityId);\n updateProgressBar(`Writing file ${fileName}`);\n saveTextToFile(JSON.stringify(rawData, null, 2), fileName);\n stopProgressBar(`Exported raw entity provider ${entityId} to ${fileName}.`);\n } catch (error) {\n stopProgressBar(`Error exporting raw entity ${entityId}: ${error.message}`);\n printMessage(error.response?.data, 'error');\n }\n}\n\n/**\n * Export all entity providers raw to one file\n * @param {String} file Optional filename\n */\nexport async function exportRawSaml2ProvidersToFile(file = null) {\n let fileName = file;\n if (!fileName) {\n fileName = getTypedFilename(\n `all${getRealmString()}ProvidersRaw`,\n 'raw.saml'\n );\n }\n try {\n const samlApplicationList = (await getRawSaml2Providers()).result;\n\n saveToFile('application', samlApplicationList, '_id', fileName);\n printMessage(\n `All RAW saml entity providers exported to: ${fileName}`,\n 'info'\n );\n } catch (error) {\n printMessage(error.message, 'error');\n printMessage(\n `exportRawSaml2ProvidersToFile: ${error.response?.status}`,\n 'error'\n );\n }\n}\n\n/**\n * Export all entity providers to individual files\n */\nexport async function exportRawSaml2ProvidersToFiles() {\n const samlApplicationList = (await getRawSaml2Providers()).result;\n let hasError = false;\n createProgressBar(samlApplicationList.length, 'Exporting RAW providers');\n let exportedAmount = 0;\n for (const item of samlApplicationList) {\n updateProgressBar(`Exporting provider ${item.entityId}`);\n try {\n const samlApplicationData = await getRawSaml2Provider(item._id);\n const fileName = getTypedFilename(\n `${item._id}${getRealmString()}ProviderRaw`,\n 'raw.saml'\n );\n saveToFile('application', [samlApplicationData], '_id', fileName);\n exportedAmount++;\n } catch (error) {\n hasError = true;\n printMessage(`Unable to export: ${item._id}`, 'error');\n }\n }\n stopProgressBar(`${exportedAmount} providers exported.`);\n if (!hasError) {\n printMessage('All entities exported.', 'info');\n } else {\n printMessage('All other entities exported.', 'info');\n }\n}\n\n/**\n * Imports a raw SAML export file (containing one entity).\n * @param {string} file The import file\n */\nexport async function importRawSaml2ProviderFromFile(\n // entityId: string,\n file: string\n) {\n printMessage(`Importing SAML Entity ${file}...`, 'info');\n if (file.indexOf('.raw.saml.json') > -1) {\n const samlEntityData = JSON.parse(fs.readFileSync(file, 'utf8'));\n if (validateImport(samlEntityData.meta)) {\n for (const id in samlEntityData.application) {\n // remove the \"_rev\" data before PUT\n delete samlEntityData.application[id]._rev;\n try {\n await putRawSaml2Provider(id, samlEntityData.application[id]);\n } catch (error) {\n printMessage(`Unable to import: ${id}`, 'error');\n }\n printMessage(`Imported ${id}`, 'info');\n }\n } else {\n printMessage('Import validation failed...', 'error');\n }\n }\n}\n\n/**\n * Import first raw SAML entity provider from file\n * @param {String} file Import file name\n */\nexport async function importFirstRawSaml2ProviderFromFile(file) {\n printMessage(`Importing SAML Entity ${file}...`, 'info');\n if (file.indexOf('.raw.saml.json') > -1) {\n const samlEntityData = JSON.parse(fs.readFileSync(file, 'utf8'));\n if (validateImport(samlEntityData.meta)) {\n for (const id in samlEntityData.application) {\n // remove the \"_rev\" data before PUT\n delete samlEntityData.application[id]._rev;\n try {\n await putRawSaml2Provider(id, samlEntityData.application[id]);\n } catch (error) {\n printMessage(`Unable to import: ${id}`, 'error');\n }\n printMessage(`Imported ${id}`, 'info');\n return;\n }\n } else {\n printMessage('Import validation failed...', 'error');\n }\n }\n}\n\n/**\n * Imports the RAW provider info from a single file.\n * @param file Import file name\n */\nexport async function importRawSaml2ProvidersFromFile(file: string) {\n fs.readFile(file, 'utf8', async function (err, data) {\n if (err) throw err;\n const samlEntityData = JSON.parse(data);\n let amountOfEntities = 0;\n for (const id in samlEntityData.application) {\n if (id.length) {\n amountOfEntities++;\n }\n }\n if (validateImport(samlEntityData.meta)) {\n createProgressBar(amountOfEntities, 'Importing providers...');\n for (const id in samlEntityData.application) {\n // remove the \"_rev\" data before PUT\n delete samlEntityData.application[id]._rev;\n await putRawSaml2Provider(id, samlEntityData.application[id]).then(\n (result) => {\n if (result === null) {\n printMessage(`Import validation failed for ${id}`, 'error');\n }\n }\n );\n updateProgressBar(`Imported ${id}...`);\n }\n stopProgressBar(`Import done`);\n } else {\n printMessage('Import validation failed...', 'error');\n }\n });\n}\n\n/**\n * Whenever the SAML RAW file were exported using the exportRAW functionality this function\n * is used to read them back in. Only files with the .samlRaw.json extension will be imported.\n * @param {string} directory The directory from which to import the files\n */\nexport async function importRawSaml2ProvidersFromFiles(directory) {\n const files = fs.readdirSync(directory);\n const filesToImport = files.filter(\n (file) => file.indexOf('.samlRaw.json') > -1\n );\n\n if (filesToImport.length > 0) {\n createProgressBar(filesToImport.length, 'Importing providers...');\n filesToImport.forEach(async (file) => {\n const filePathAbsolute = path.join(directory, file);\n filesToImport.push(file);\n const samlEntityData = JSON.parse(\n fs.readFileSync(filePathAbsolute, 'utf8')\n );\n if (validateImport(samlEntityData.meta)) {\n for (const id in samlEntityData.application) {\n // remove the \"_rev\" data before PUT\n delete samlEntityData.application[id]._rev;\n await putRawSaml2Provider(id, samlEntityData.application[id]).then(\n (result) => {\n if (result === null) {\n printMessage(`Import validation failed for ${id}`, 'error');\n }\n }\n );\n updateProgressBar(`Imported ${id}...`);\n }\n } else {\n printMessage('Import validation failed...', 'error');\n }\n });\n stopProgressBar(`Import done`);\n } else {\n printMessage(\n 'Import failed, no files to import. (check extension to be .samlRaw.json)',\n 'warn'\n );\n }\n}\n"],"mappings":"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"}
|
package/esm/ops/ScriptOps.js
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
|
+
import { ExportImportUtils, Script, state } from '@rockcarver/frodo-lib';
|
|
2
|
+
import chokidar from 'chokidar';
|
|
1
3
|
import fs from 'fs';
|
|
2
|
-
import { Script, ExportImportUtils, state } from '@rockcarver/frodo-lib';
|
|
3
4
|
import { createProgressBar, createTable, debugMessage, failSpinner, printMessage, showSpinner, spinSpinner, stopProgressBar, succeedSpinner, updateProgressBar } from '../utils/Console';
|
|
5
|
+
import { getTypedFilename, saveJsonToFile, saveTextToFile, titleCase } from '../utils/ExportImportUtils';
|
|
4
6
|
import wordwrap from './utils/Wordwrap';
|
|
5
|
-
import { getTypedFilename, saveJsonToFile, titleCase } from '../utils/ExportImportUtils';
|
|
6
7
|
const {
|
|
7
8
|
getScripts,
|
|
8
9
|
exportScripts,
|
|
@@ -13,7 +14,7 @@ const {
|
|
|
13
14
|
|
|
14
15
|
/**
|
|
15
16
|
* Get a one-line description of the script object
|
|
16
|
-
* @param {ScriptSkeleton} scriptObj script object to describe
|
|
17
|
+
* @param {TypesRaw.ScriptSkeleton} scriptObj script object to describe
|
|
17
18
|
* @returns {string} a one-line description
|
|
18
19
|
*/
|
|
19
20
|
export function getOneLineDescription(scriptObj) {
|
|
@@ -34,7 +35,7 @@ export function getTableHeaderMd() {
|
|
|
34
35
|
|
|
35
36
|
/**
|
|
36
37
|
* Get a one-line description of the script object in markdown
|
|
37
|
-
* @param {ScriptSkeleton} scriptObj script object to describe
|
|
38
|
+
* @param {TypesRaw.ScriptSkeleton} scriptObj script object to describe
|
|
38
39
|
* @returns {string} markdown table row
|
|
39
40
|
*/
|
|
40
41
|
export function getTableRowMd(scriptObj) {
|
|
@@ -96,8 +97,8 @@ export async function exportScriptToFile(scriptId, file) {
|
|
|
96
97
|
fileName = file;
|
|
97
98
|
}
|
|
98
99
|
spinSpinner(`Exporting script '${scriptId}' to '${fileName}'...`);
|
|
99
|
-
const
|
|
100
|
-
saveJsonToFile(
|
|
100
|
+
const scriptExport = await exportScript(scriptId);
|
|
101
|
+
saveJsonToFile(scriptExport, fileName);
|
|
101
102
|
succeedSpinner(`Exported script '${scriptId}' to '${fileName}'.`);
|
|
102
103
|
debugMessage(`Cli.ScriptOps.exportScriptToFile: end [true]`);
|
|
103
104
|
return true;
|
|
@@ -124,8 +125,8 @@ export async function exportScriptByNameToFile(name, file) {
|
|
|
124
125
|
fileName = file;
|
|
125
126
|
}
|
|
126
127
|
spinSpinner(`Exporting script '${name}' to '${fileName}'...`);
|
|
127
|
-
const
|
|
128
|
-
saveJsonToFile(
|
|
128
|
+
const scriptExport = await exportScriptByName(name);
|
|
129
|
+
saveJsonToFile(scriptExport, fileName);
|
|
129
130
|
succeedSpinner(`Exported script '${name}' to '${fileName}'.`);
|
|
130
131
|
debugMessage(`Cli.ScriptOps.exportScriptByNameToFile: end [true]`);
|
|
131
132
|
return true;
|
|
@@ -149,8 +150,8 @@ export async function exportScriptsToFile(file) {
|
|
|
149
150
|
if (file) {
|
|
150
151
|
fileName = file;
|
|
151
152
|
}
|
|
152
|
-
const
|
|
153
|
-
saveJsonToFile(
|
|
153
|
+
const scriptExport = await exportScripts();
|
|
154
|
+
saveJsonToFile(scriptExport, fileName);
|
|
154
155
|
debugMessage(`Cli.ScriptOps.exportScriptsToFile: end [true]`);
|
|
155
156
|
return true;
|
|
156
157
|
} catch (error) {
|
|
@@ -174,8 +175,8 @@ export async function exportScriptsToFiles() {
|
|
|
174
175
|
try {
|
|
175
176
|
updateProgressBar(`Reading script ${script.name}`);
|
|
176
177
|
const fileName = getTypedFilename(script.name, 'script');
|
|
177
|
-
const
|
|
178
|
-
saveJsonToFile(
|
|
178
|
+
const scriptExport = await exportScriptByName(script.name);
|
|
179
|
+
saveJsonToFile(scriptExport, fileName);
|
|
179
180
|
} catch (error) {
|
|
180
181
|
outcome = false;
|
|
181
182
|
printMessage(`Error exporting script '${script.name}': ${error.message}`, 'error');
|
|
@@ -186,6 +187,33 @@ export async function exportScriptsToFiles() {
|
|
|
186
187
|
debugMessage(`Cli.ScriptOps.exportScriptsToFiles: end [${outcome}]`);
|
|
187
188
|
return outcome;
|
|
188
189
|
}
|
|
190
|
+
export async function exportScriptsToFilesExtract() {
|
|
191
|
+
let outcome = true;
|
|
192
|
+
debugMessage(`Cli.ScriptOps.exportScriptsToFilesExtract: start`);
|
|
193
|
+
const scriptList = await getScripts();
|
|
194
|
+
createProgressBar(scriptList.length, 'Exporting scripts to individual files...');
|
|
195
|
+
for (const script of scriptList) {
|
|
196
|
+
try {
|
|
197
|
+
updateProgressBar(`Reading script ${script.name}`);
|
|
198
|
+
const fileExtension = script.language === 'JAVASCRIPT' ? 'js' : 'groovy';
|
|
199
|
+
const scriptFileName = getTypedFilename(script.name, 'script', fileExtension);
|
|
200
|
+
const fileName = getTypedFilename(script.name, 'script');
|
|
201
|
+
const scriptExport = await exportScriptByName(script.name);
|
|
202
|
+
const scriptSkeleton = getScriptSkeleton(scriptExport);
|
|
203
|
+
const scriptText = Array.isArray(scriptSkeleton.script) ? scriptSkeleton.script.join('\n') : scriptSkeleton.script;
|
|
204
|
+
scriptSkeleton.script = `file://${scriptFileName}`;
|
|
205
|
+
saveTextToFile(scriptText, scriptFileName);
|
|
206
|
+
saveJsonToFile(scriptExport, fileName);
|
|
207
|
+
} catch (error) {
|
|
208
|
+
outcome = false;
|
|
209
|
+
printMessage(`Error exporting script '${script.name}': ${error.message}`, 'error');
|
|
210
|
+
debugMessage(error);
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
stopProgressBar(`Exported ${scriptList.length} scripts to individual files.`);
|
|
214
|
+
debugMessage(`Cli.ScriptOps.exportScriptsToFilesExtract: end [${outcome}]`);
|
|
215
|
+
return outcome;
|
|
216
|
+
}
|
|
189
217
|
|
|
190
218
|
/**
|
|
191
219
|
* Import script(s) from file
|
|
@@ -210,4 +238,145 @@ export async function importScriptsFromFile(name, file, reUuid = false) {
|
|
|
210
238
|
debugMessage(`Cli.ScriptOps.importScriptsFromFile: end [${outcome}]`);
|
|
211
239
|
return outcome;
|
|
212
240
|
}
|
|
241
|
+
|
|
242
|
+
/**
|
|
243
|
+
* Import extracted scripts.
|
|
244
|
+
*
|
|
245
|
+
* @param watch whether or not to watch for file changes
|
|
246
|
+
*/
|
|
247
|
+
export async function importScriptsFromFiles(watch, reUuid, validateScripts) {
|
|
248
|
+
// If watch is true, it doesn't make sense to reUuid.
|
|
249
|
+
reUuid = watch ? false : reUuid;
|
|
250
|
+
|
|
251
|
+
/**
|
|
252
|
+
* Run on file change detection, as well as on initial run.
|
|
253
|
+
*/
|
|
254
|
+
function onChange(path, _stats) {
|
|
255
|
+
handleScriptFileImport(path, reUuid, validateScripts).catch(error => {
|
|
256
|
+
printMessage(`Error importing script: ${error.message}`, 'error');
|
|
257
|
+
debugMessage(error);
|
|
258
|
+
process.exit(1);
|
|
259
|
+
});
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
// We watch json files and script files.
|
|
263
|
+
const watcher = chokidar.watch([`./**/*.script.json`, `./**/*.script.js`, `./**/*.script.groovy`], {
|
|
264
|
+
persistent: watch
|
|
265
|
+
});
|
|
266
|
+
watcher.on('add', onChange).on('change', onChange).on('error', error => {
|
|
267
|
+
printMessage(`Watcher error: ${error}`, 'error');
|
|
268
|
+
watcher.close();
|
|
269
|
+
}).on('ready', () => {
|
|
270
|
+
if (watch) {
|
|
271
|
+
printMessage('Watching for changes...');
|
|
272
|
+
} else {
|
|
273
|
+
watcher.close();
|
|
274
|
+
printMessage('Done.');
|
|
275
|
+
}
|
|
276
|
+
});
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
/**
|
|
280
|
+
* Handle a script file import.
|
|
281
|
+
*
|
|
282
|
+
* @param file Either a script file or an extract file
|
|
283
|
+
* @param reUuid whether or not to generate a new uuid for each script on import
|
|
284
|
+
*/
|
|
285
|
+
async function handleScriptFileImport(file, reUuid, validateScripts) {
|
|
286
|
+
debugMessage(`Cli.ScriptOps.handleScriptFileImport: start`);
|
|
287
|
+
const scriptFile = getScriptFile(file);
|
|
288
|
+
const script = getScriptExportByScriptFile(scriptFile);
|
|
289
|
+
const success = await importScripts('', script, reUuid, validateScripts);
|
|
290
|
+
if (success) {
|
|
291
|
+
printMessage(`Imported '${scriptFile}'`);
|
|
292
|
+
}
|
|
293
|
+
debugMessage(`Cli.ScriptOps.handleScriptFileImport: end`);
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
/**
|
|
297
|
+
* Get a script file from a file.
|
|
298
|
+
*
|
|
299
|
+
* @param file Either a script file or an extract file
|
|
300
|
+
* @returns The script file
|
|
301
|
+
*/
|
|
302
|
+
function getScriptFile(file) {
|
|
303
|
+
if (file.endsWith('.script.json')) {
|
|
304
|
+
return file;
|
|
305
|
+
}
|
|
306
|
+
return file.replace(/\.script\.(js|groovy)/, '.script.json');
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
/**
|
|
310
|
+
* Get a script export from a script file.
|
|
311
|
+
*
|
|
312
|
+
* @param scriptFile The path to the script file
|
|
313
|
+
* @returns The script export
|
|
314
|
+
*/
|
|
315
|
+
function getScriptExportByScriptFile(scriptFile) {
|
|
316
|
+
const scriptExport = getScriptExport(scriptFile);
|
|
317
|
+
const scriptSkeleton = getScriptSkeleton(scriptExport);
|
|
318
|
+
const extractFile = getExtractFile(scriptSkeleton);
|
|
319
|
+
if (!extractFile) {
|
|
320
|
+
return scriptExport;
|
|
321
|
+
}
|
|
322
|
+
const scriptRaw = fs.readFileSync(extractFile, 'utf8');
|
|
323
|
+
scriptSkeleton.script = scriptRaw.split('\n');
|
|
324
|
+
return scriptExport;
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
/**
|
|
328
|
+
* Get an extract file from a script skeleton.
|
|
329
|
+
*
|
|
330
|
+
* @param scriptSkeleton The script skeleton
|
|
331
|
+
* @returns The extract file or null if there is no extract file
|
|
332
|
+
*/
|
|
333
|
+
function getExtractFile(scriptSkeleton) {
|
|
334
|
+
const extractFile = scriptSkeleton.script;
|
|
335
|
+
if (Array.isArray(extractFile)) {
|
|
336
|
+
return null;
|
|
337
|
+
}
|
|
338
|
+
if (extractFile.startsWith('file://') && (extractFile.endsWith('.js') || extractFile.endsWith('.groovy'))) {
|
|
339
|
+
return extractFile.replace('file://', '');
|
|
340
|
+
}
|
|
341
|
+
return null;
|
|
342
|
+
}
|
|
343
|
+
|
|
344
|
+
/**
|
|
345
|
+
* Get a script export from a file.
|
|
346
|
+
*
|
|
347
|
+
* @param file The path to a script export file
|
|
348
|
+
* @returns The script export
|
|
349
|
+
*/
|
|
350
|
+
function getScriptExport(file) {
|
|
351
|
+
const scriptExportRaw = fs.readFileSync(file, 'utf8');
|
|
352
|
+
const scriptExport = JSON.parse(scriptExportRaw);
|
|
353
|
+
return scriptExport;
|
|
354
|
+
}
|
|
355
|
+
|
|
356
|
+
/**
|
|
357
|
+
* Get the main script skeleton from a script export. If there is more than one
|
|
358
|
+
* script, an error is thrown.
|
|
359
|
+
*
|
|
360
|
+
* @param script Get the main script skeleton from a script export
|
|
361
|
+
* @returns The main script skeleton
|
|
362
|
+
*/
|
|
363
|
+
function getScriptSkeleton(script) {
|
|
364
|
+
const scriptId = getScriptId(script);
|
|
365
|
+
return script.script[scriptId];
|
|
366
|
+
}
|
|
367
|
+
|
|
368
|
+
/**
|
|
369
|
+
* Get the main script ID from a script export. If there is more than one
|
|
370
|
+
* script, an error is thrown.
|
|
371
|
+
*
|
|
372
|
+
* @param script The script export
|
|
373
|
+
* @returns The main script ID
|
|
374
|
+
*/
|
|
375
|
+
function getScriptId(script) {
|
|
376
|
+
const scriptIds = Object.keys(script.script);
|
|
377
|
+
if (scriptIds.length !== 1) {
|
|
378
|
+
throw new Error(`Expected 1 script, found ${scriptIds.length}`);
|
|
379
|
+
}
|
|
380
|
+
return scriptIds[0];
|
|
381
|
+
}
|
|
213
382
|
//# sourceMappingURL=ScriptOps.js.map
|
package/esm/ops/ScriptOps.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ScriptOps.js","names":["fs","Script","ExportImportUtils","state","createProgressBar","createTable","debugMessage","failSpinner","printMessage","showSpinner","spinSpinner","stopProgressBar","succeedSpinner","updateProgressBar","wordwrap","getTypedFilename","saveJsonToFile","titleCase","getScripts","exportScripts","exportScript","exportScriptByName","importScripts","getOneLineDescription","scriptObj","description","_id","context","name","getTableHeaderMd","markdown","getTableRowMd","langMap","JAVASCRIPT","GROOVY","language","split","join","listScripts","long","outcome","scripts","sort","a","b","localeCompare","table","forEach","script","push","toString","error","message","exportScriptToFile","scriptId","file","fileName","exportData","exportScriptByNameToFile","exportScriptsToFile","getRealm","exportScriptsToFiles","scriptList","length","importScriptsFromFile","reUuid","readFile","err","data","importData","JSON","parse"],"sources":["ops/ScriptOps.ts"],"sourcesContent":["import fs from 'fs';\nimport { ScriptSkeleton } from '@rockcarver/frodo-lib/types/api/ApiTypes';\nimport { Script, ExportImportUtils, state } from '@rockcarver/frodo-lib';\nimport {\n createProgressBar,\n createTable,\n debugMessage,\n failSpinner,\n printMessage,\n showSpinner,\n spinSpinner,\n stopProgressBar,\n succeedSpinner,\n updateProgressBar,\n} from '../utils/Console';\nimport wordwrap from './utils/Wordwrap';\nimport {\n getTypedFilename,\n saveJsonToFile,\n titleCase,\n} from '../utils/ExportImportUtils';\n\nconst {\n getScripts,\n exportScripts,\n exportScript,\n exportScriptByName,\n importScripts,\n} = Script;\n\n/**\n * Get a one-line description of the script object\n * @param {ScriptSkeleton} scriptObj script object to describe\n * @returns {string} a one-line description\n */\nexport function getOneLineDescription(scriptObj: ScriptSkeleton): string {\n const description = `[${scriptObj._id['brightCyan']}] ${scriptObj.context} - ${scriptObj.name}`;\n return description;\n}\n\n/**\n * Get markdown table header\n * @returns {string} markdown table header\n */\nexport function getTableHeaderMd(): string {\n let markdown = '';\n markdown += '| Name | Language | Type | Id |\\n';\n markdown += '| ---- | -------- | ---- | ---|';\n return markdown;\n}\n\n/**\n * Get a one-line description of the script object in markdown\n * @param {ScriptSkeleton} scriptObj script object to describe\n * @returns {string} markdown table row\n */\nexport function getTableRowMd(scriptObj: ScriptSkeleton): string {\n const langMap = { JAVASCRIPT: 'JavaSscript', GROOVY: 'Groovy' };\n const description = `| ${scriptObj.name} | ${\n langMap[scriptObj.language]\n } | ${ExportImportUtils.titleCase(\n scriptObj.context.split('_').join(' ')\n )} | \\`${scriptObj._id}\\` |`;\n return description;\n}\n\n/**\n * List scripts\n * @param {boolean} long detail list\n * @returns {Promise<boolean>} true if no errors occurred during export, false otherwise\n */\nexport async function listScripts(long = false): Promise<boolean> {\n let outcome = true;\n debugMessage(`Cli.ScriptOps.listScripts: start`);\n try {\n const scripts = await getScripts();\n scripts.sort((a, b) => a.name.localeCompare(b.name));\n if (long) {\n const table = createTable([\n 'Name',\n 'UUID',\n 'Language',\n 'Context',\n 'Description',\n ]);\n const langMap = { JAVASCRIPT: 'JS', GROOVY: 'Groovy' };\n scripts.forEach((script) => {\n table.push([\n wordwrap(script.name, 25, ' '),\n script._id,\n langMap[script.language],\n wordwrap(titleCase(script.context.split('_').join(' ')), 25),\n wordwrap(script.description, 30),\n ]);\n });\n printMessage(table.toString(), 'data');\n } else {\n scripts.forEach((script) => {\n printMessage(`${script.name}`, 'data');\n });\n }\n } catch (error) {\n outcome = false;\n printMessage(`Error listing scripts: ${error.message}`, 'error');\n debugMessage(error);\n }\n debugMessage(`Cli.ScriptOps.listScripts: end [${outcome}]`);\n return outcome;\n}\n\n/**\n * Export script by id to file\n * @param {string} scriptId script uuid\n * @param {string} file file name\n * @returns {Promise<boolean>} true if no errors occurred during export, false otherwise\n */\nexport async function exportScriptToFile(\n scriptId: string,\n file: string\n): Promise<boolean> {\n debugMessage(`Cli.ScriptOps.exportScriptToFile: start`);\n try {\n showSpinner(`Exporting script '${scriptId}'...`);\n let fileName = getTypedFilename(scriptId, 'script');\n if (file) {\n fileName = file;\n }\n spinSpinner(`Exporting script '${scriptId}' to '${fileName}'...`);\n const exportData = await exportScript(scriptId);\n saveJsonToFile(exportData, fileName);\n succeedSpinner(`Exported script '${scriptId}' to '${fileName}'.`);\n debugMessage(`Cli.ScriptOps.exportScriptToFile: end [true]`);\n return true;\n } catch (error) {\n failSpinner(`Error exporting script '${scriptId}': ${error.message}`);\n debugMessage(error);\n }\n debugMessage(`Cli.ScriptOps.exportScriptToFile: end [false]`);\n return false;\n}\n\n/**\n * Export script by name to file\n * @param {string} name script name\n * @param {string} file file name\n * @returns {Promise<boolean>} true if no errors occurred during export, false otherwise\n */\nexport async function exportScriptByNameToFile(\n name: string,\n file: string\n): Promise<boolean> {\n debugMessage(`Cli.ScriptOps.exportScriptByNameToFile: start`);\n try {\n showSpinner(`Exporting script '${name}'...`);\n let fileName = getTypedFilename(name, 'script');\n if (file) {\n fileName = file;\n }\n spinSpinner(`Exporting script '${name}' to '${fileName}'...`);\n const exportData = await exportScriptByName(name);\n saveJsonToFile(exportData, fileName);\n succeedSpinner(`Exported script '${name}' to '${fileName}'.`);\n debugMessage(`Cli.ScriptOps.exportScriptByNameToFile: end [true]`);\n return true;\n } catch (error) {\n failSpinner(`Error exporting script '${name}': ${error.message}`);\n debugMessage(error);\n }\n debugMessage(`Cli.ScriptOps.exportScriptByNameToFile: end [false]`);\n return false;\n}\n\n/**\n * Export all scripts to single file\n * @param {string} file file name\n * @returns {Promise<boolean>} true if no errors occurred during export, false otherwise\n */\nexport async function exportScriptsToFile(file: string): Promise<boolean> {\n debugMessage(`Cli.ScriptOps.exportScriptsToFile: start`);\n try {\n let fileName = getTypedFilename(\n `all${titleCase(state.getRealm())}Scripts`,\n 'script'\n );\n if (file) {\n fileName = file;\n }\n const exportData = await exportScripts();\n saveJsonToFile(exportData, fileName);\n debugMessage(`Cli.ScriptOps.exportScriptsToFile: end [true]`);\n return true;\n } catch (error) {\n printMessage(`Error exporting scripts: ${error.message}`, 'error');\n debugMessage(error);\n }\n debugMessage(`Cli.ScriptOps.exportScriptsToFile: end [false]`);\n return false;\n}\n\n/**\n * Export all scripts to individual files\n * @returns {Promise<boolean>} true if no errors occurred during export, false otherwise\n */\nexport async function exportScriptsToFiles(): Promise<boolean> {\n let outcome = true;\n debugMessage(`Cli.ScriptOps.exportScriptsToFiles: start`);\n const scriptList = await getScripts();\n createProgressBar(\n scriptList.length,\n 'Exporting scripts to individual files...'\n );\n for (const script of scriptList) {\n try {\n updateProgressBar(`Reading script ${script.name}`);\n const fileName = getTypedFilename(script.name, 'script');\n const exportData = await exportScriptByName(script.name);\n saveJsonToFile(exportData, fileName);\n } catch (error) {\n outcome = false;\n printMessage(\n `Error exporting script '${script.name}': ${error.message}`,\n 'error'\n );\n debugMessage(error);\n }\n }\n stopProgressBar(`Exported ${scriptList.length} scripts to individual files.`);\n debugMessage(`Cli.ScriptOps.exportScriptsToFiles: end [${outcome}]`);\n return outcome;\n}\n\n/**\n * Import script(s) from file\n * @param {string} name Optional name of script. If supplied, only the script of that name is imported\n * @param {string} file file name\n * @param {boolean} reUuid true to generate a new uuid for each script on import, false otherwise\n * @returns {Promise<boolean>} true if no errors occurred during import, false otherwise\n */\nexport async function importScriptsFromFile(\n name: string,\n file: string,\n reUuid = false\n): Promise<boolean> {\n let outcome = false;\n debugMessage(`Cli.ScriptOps.importScriptsFromFile: start`);\n fs.readFile(file, 'utf8', async (err, data) => {\n try {\n if (err) throw err;\n const importData = JSON.parse(data);\n outcome = await importScripts(name, importData, reUuid);\n } catch (error) {\n printMessage(\n `Error exporting script '${name}': ${error.message}`,\n 'error'\n );\n debugMessage(error);\n }\n });\n debugMessage(`Cli.ScriptOps.importScriptsFromFile: end [${outcome}]`);\n return outcome;\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ScriptOps.js","names":["ExportImportUtils","Script","state","chokidar","fs","createProgressBar","createTable","debugMessage","failSpinner","printMessage","showSpinner","spinSpinner","stopProgressBar","succeedSpinner","updateProgressBar","getTypedFilename","saveJsonToFile","saveTextToFile","titleCase","wordwrap","getScripts","exportScripts","exportScript","exportScriptByName","importScripts","getOneLineDescription","scriptObj","description","_id","context","name","getTableHeaderMd","markdown","getTableRowMd","langMap","JAVASCRIPT","GROOVY","language","split","join","listScripts","long","outcome","scripts","sort","a","b","localeCompare","table","forEach","script","push","toString","error","message","exportScriptToFile","scriptId","file","fileName","scriptExport","exportScriptByNameToFile","exportScriptsToFile","getRealm","exportScriptsToFiles","scriptList","length","exportScriptsToFilesExtract","fileExtension","scriptFileName","scriptSkeleton","getScriptSkeleton","scriptText","Array","isArray","importScriptsFromFile","reUuid","readFile","err","data","importData","JSON","parse","importScriptsFromFiles","watch","validateScripts","onChange","path","_stats","handleScriptFileImport","catch","process","exit","watcher","persistent","on","close","scriptFile","getScriptFile","getScriptExportByScriptFile","success","endsWith","replace","getScriptExport","extractFile","getExtractFile","scriptRaw","readFileSync","startsWith","scriptExportRaw","getScriptId","scriptIds","Object","keys","Error"],"sources":["ops/ScriptOps.ts"],"sourcesContent":["import {\n ExportImportUtils,\n Script,\n state,\n Types,\n TypesRaw,\n} from '@rockcarver/frodo-lib';\nimport chokidar from 'chokidar';\nimport fs from 'fs';\nimport {\n createProgressBar,\n createTable,\n debugMessage,\n failSpinner,\n printMessage,\n showSpinner,\n spinSpinner,\n stopProgressBar,\n succeedSpinner,\n updateProgressBar,\n} from '../utils/Console';\nimport {\n getTypedFilename,\n saveJsonToFile,\n saveTextToFile,\n titleCase,\n} from '../utils/ExportImportUtils';\nimport wordwrap from './utils/Wordwrap';\n\nconst {\n getScripts,\n exportScripts,\n exportScript,\n exportScriptByName,\n importScripts,\n} = Script;\n\n/**\n * Get a one-line description of the script object\n * @param {TypesRaw.ScriptSkeleton} scriptObj script object to describe\n * @returns {string} a one-line description\n */\nexport function getOneLineDescription(\n scriptObj: TypesRaw.ScriptSkeleton\n): string {\n const description = `[${scriptObj._id['brightCyan']}] ${scriptObj.context} - ${scriptObj.name}`;\n return description;\n}\n\n/**\n * Get markdown table header\n * @returns {string} markdown table header\n */\nexport function getTableHeaderMd(): string {\n let markdown = '';\n markdown += '| Name | Language | Type | Id |\\n';\n markdown += '| ---- | -------- | ---- | ---|';\n return markdown;\n}\n\n/**\n * Get a one-line description of the script object in markdown\n * @param {TypesRaw.ScriptSkeleton} scriptObj script object to describe\n * @returns {string} markdown table row\n */\nexport function getTableRowMd(scriptObj: TypesRaw.ScriptSkeleton): string {\n const langMap = { JAVASCRIPT: 'JavaSscript', GROOVY: 'Groovy' };\n const description = `| ${scriptObj.name} | ${\n langMap[scriptObj.language]\n } | ${ExportImportUtils.titleCase(\n scriptObj.context.split('_').join(' ')\n )} | \\`${scriptObj._id}\\` |`;\n return description;\n}\n\n/**\n * List scripts\n * @param {boolean} long detail list\n * @returns {Promise<boolean>} true if no errors occurred during export, false otherwise\n */\nexport async function listScripts(long = false): Promise<boolean> {\n let outcome = true;\n debugMessage(`Cli.ScriptOps.listScripts: start`);\n try {\n const scripts = await getScripts();\n scripts.sort((a, b) => a.name.localeCompare(b.name));\n if (long) {\n const table = createTable([\n 'Name',\n 'UUID',\n 'Language',\n 'Context',\n 'Description',\n ]);\n const langMap = { JAVASCRIPT: 'JS', GROOVY: 'Groovy' };\n scripts.forEach((script) => {\n table.push([\n wordwrap(script.name, 25, ' '),\n script._id,\n langMap[script.language],\n wordwrap(titleCase(script.context.split('_').join(' ')), 25),\n wordwrap(script.description, 30),\n ]);\n });\n printMessage(table.toString(), 'data');\n } else {\n scripts.forEach((script) => {\n printMessage(`${script.name}`, 'data');\n });\n }\n } catch (error) {\n outcome = false;\n printMessage(`Error listing scripts: ${error.message}`, 'error');\n debugMessage(error);\n }\n debugMessage(`Cli.ScriptOps.listScripts: end [${outcome}]`);\n return outcome;\n}\n\n/**\n * Export script by id to file\n * @param {string} scriptId script uuid\n * @param {string} file file name\n * @returns {Promise<boolean>} true if no errors occurred during export, false otherwise\n */\nexport async function exportScriptToFile(\n scriptId: string,\n file: string\n): Promise<boolean> {\n debugMessage(`Cli.ScriptOps.exportScriptToFile: start`);\n try {\n showSpinner(`Exporting script '${scriptId}'...`);\n let fileName = getTypedFilename(scriptId, 'script');\n if (file) {\n fileName = file;\n }\n spinSpinner(`Exporting script '${scriptId}' to '${fileName}'...`);\n const scriptExport = await exportScript(scriptId);\n saveJsonToFile(scriptExport, fileName);\n succeedSpinner(`Exported script '${scriptId}' to '${fileName}'.`);\n debugMessage(`Cli.ScriptOps.exportScriptToFile: end [true]`);\n return true;\n } catch (error) {\n failSpinner(`Error exporting script '${scriptId}': ${error.message}`);\n debugMessage(error);\n }\n debugMessage(`Cli.ScriptOps.exportScriptToFile: end [false]`);\n return false;\n}\n\n/**\n * Export script by name to file\n * @param {string} name script name\n * @param {string} file file name\n * @returns {Promise<boolean>} true if no errors occurred during export, false otherwise\n */\nexport async function exportScriptByNameToFile(\n name: string,\n file: string\n): Promise<boolean> {\n debugMessage(`Cli.ScriptOps.exportScriptByNameToFile: start`);\n try {\n showSpinner(`Exporting script '${name}'...`);\n let fileName = getTypedFilename(name, 'script');\n if (file) {\n fileName = file;\n }\n spinSpinner(`Exporting script '${name}' to '${fileName}'...`);\n const scriptExport = await exportScriptByName(name);\n saveJsonToFile(scriptExport, fileName);\n succeedSpinner(`Exported script '${name}' to '${fileName}'.`);\n debugMessage(`Cli.ScriptOps.exportScriptByNameToFile: end [true]`);\n return true;\n } catch (error) {\n failSpinner(`Error exporting script '${name}': ${error.message}`);\n debugMessage(error);\n }\n debugMessage(`Cli.ScriptOps.exportScriptByNameToFile: end [false]`);\n return false;\n}\n\n/**\n * Export all scripts to single file\n * @param {string} file file name\n * @returns {Promise<boolean>} true if no errors occurred during export, false otherwise\n */\nexport async function exportScriptsToFile(file: string): Promise<boolean> {\n debugMessage(`Cli.ScriptOps.exportScriptsToFile: start`);\n try {\n let fileName = getTypedFilename(\n `all${titleCase(state.getRealm())}Scripts`,\n 'script'\n );\n if (file) {\n fileName = file;\n }\n const scriptExport = await exportScripts();\n saveJsonToFile(scriptExport, fileName);\n debugMessage(`Cli.ScriptOps.exportScriptsToFile: end [true]`);\n return true;\n } catch (error) {\n printMessage(`Error exporting scripts: ${error.message}`, 'error');\n debugMessage(error);\n }\n debugMessage(`Cli.ScriptOps.exportScriptsToFile: end [false]`);\n return false;\n}\n\n/**\n * Export all scripts to individual files\n * @returns {Promise<boolean>} true if no errors occurred during export, false otherwise\n */\nexport async function exportScriptsToFiles(): Promise<boolean> {\n let outcome = true;\n debugMessage(`Cli.ScriptOps.exportScriptsToFiles: start`);\n const scriptList = await getScripts();\n createProgressBar(\n scriptList.length,\n 'Exporting scripts to individual files...'\n );\n for (const script of scriptList) {\n try {\n updateProgressBar(`Reading script ${script.name}`);\n const fileName = getTypedFilename(script.name, 'script');\n const scriptExport = await exportScriptByName(script.name);\n saveJsonToFile(scriptExport, fileName);\n } catch (error) {\n outcome = false;\n printMessage(\n `Error exporting script '${script.name}': ${error.message}`,\n 'error'\n );\n debugMessage(error);\n }\n }\n stopProgressBar(`Exported ${scriptList.length} scripts to individual files.`);\n debugMessage(`Cli.ScriptOps.exportScriptsToFiles: end [${outcome}]`);\n return outcome;\n}\n\nexport async function exportScriptsToFilesExtract(): Promise<boolean> {\n let outcome = true;\n debugMessage(`Cli.ScriptOps.exportScriptsToFilesExtract: start`);\n const scriptList = await getScripts();\n createProgressBar(\n scriptList.length,\n 'Exporting scripts to individual files...'\n );\n for (const script of scriptList) {\n try {\n updateProgressBar(`Reading script ${script.name}`);\n const fileExtension = script.language === 'JAVASCRIPT' ? 'js' : 'groovy';\n const scriptFileName = getTypedFilename(\n script.name,\n 'script',\n fileExtension\n );\n const fileName = getTypedFilename(script.name, 'script');\n\n const scriptExport = await exportScriptByName(script.name);\n\n const scriptSkeleton = getScriptSkeleton(scriptExport);\n\n const scriptText = Array.isArray(scriptSkeleton.script)\n ? scriptSkeleton.script.join('\\n')\n : scriptSkeleton.script;\n\n scriptSkeleton.script = `file://${scriptFileName}`;\n\n saveTextToFile(scriptText, scriptFileName);\n saveJsonToFile(scriptExport, fileName);\n } catch (error) {\n outcome = false;\n printMessage(\n `Error exporting script '${script.name}': ${error.message}`,\n 'error'\n );\n debugMessage(error);\n }\n }\n stopProgressBar(`Exported ${scriptList.length} scripts to individual files.`);\n debugMessage(`Cli.ScriptOps.exportScriptsToFilesExtract: end [${outcome}]`);\n return outcome;\n}\n\n/**\n * Import script(s) from file\n * @param {string} name Optional name of script. If supplied, only the script of that name is imported\n * @param {string} file file name\n * @param {boolean} reUuid true to generate a new uuid for each script on import, false otherwise\n * @returns {Promise<boolean>} true if no errors occurred during import, false otherwise\n */\nexport async function importScriptsFromFile(\n name: string,\n file: string,\n reUuid = false\n): Promise<boolean> {\n let outcome = false;\n debugMessage(`Cli.ScriptOps.importScriptsFromFile: start`);\n fs.readFile(file, 'utf8', async (err, data) => {\n try {\n if (err) throw err;\n const importData = JSON.parse(data);\n outcome = await importScripts(name, importData, reUuid);\n } catch (error) {\n printMessage(\n `Error exporting script '${name}': ${error.message}`,\n 'error'\n );\n debugMessage(error);\n }\n });\n debugMessage(`Cli.ScriptOps.importScriptsFromFile: end [${outcome}]`);\n return outcome;\n}\n\n/**\n * Import extracted scripts.\n *\n * @param watch whether or not to watch for file changes\n */\nexport async function importScriptsFromFiles(\n watch: boolean,\n reUuid: boolean,\n validateScripts: boolean\n) {\n // If watch is true, it doesn't make sense to reUuid.\n reUuid = watch ? false : reUuid;\n\n /**\n * Run on file change detection, as well as on initial run.\n */\n function onChange(path: string, _stats?: fs.Stats): void {\n handleScriptFileImport(path, reUuid, validateScripts).catch((error) => {\n printMessage(`Error importing script: ${error.message}`, 'error');\n debugMessage(error);\n process.exit(1);\n });\n }\n\n // We watch json files and script files.\n const watcher = chokidar.watch(\n [`./**/*.script.json`, `./**/*.script.js`, `./**/*.script.groovy`],\n {\n persistent: watch,\n }\n );\n\n watcher\n .on('add', onChange)\n .on('change', onChange)\n .on('error', (error) => {\n printMessage(`Watcher error: ${error}`, 'error');\n watcher.close();\n })\n .on('ready', () => {\n if (watch) {\n printMessage('Watching for changes...');\n } else {\n watcher.close();\n printMessage('Done.');\n }\n });\n}\n\n/**\n * Handle a script file import.\n *\n * @param file Either a script file or an extract file\n * @param reUuid whether or not to generate a new uuid for each script on import\n */\nasync function handleScriptFileImport(\n file: string,\n reUuid: boolean,\n validateScripts: boolean\n) {\n debugMessage(`Cli.ScriptOps.handleScriptFileImport: start`);\n const scriptFile = getScriptFile(file);\n const script = getScriptExportByScriptFile(scriptFile);\n\n const success = await importScripts('', script, reUuid, validateScripts);\n if (success) {\n printMessage(`Imported '${scriptFile}'`);\n }\n debugMessage(`Cli.ScriptOps.handleScriptFileImport: end`);\n}\n\n/**\n * Get a script file from a file.\n *\n * @param file Either a script file or an extract file\n * @returns The script file\n */\nfunction getScriptFile(file: string) {\n if (file.endsWith('.script.json')) {\n return file;\n }\n return file.replace(/\\.script\\.(js|groovy)/, '.script.json');\n}\n\n/**\n * Get a script export from a script file.\n *\n * @param scriptFile The path to the script file\n * @returns The script export\n */\nfunction getScriptExportByScriptFile(\n scriptFile: string\n): Types.ScriptExportInterface {\n const scriptExport = getScriptExport(scriptFile);\n const scriptSkeleton = getScriptSkeleton(scriptExport);\n\n const extractFile = getExtractFile(scriptSkeleton);\n if (!extractFile) {\n return scriptExport;\n }\n\n const scriptRaw = fs.readFileSync(extractFile, 'utf8');\n scriptSkeleton.script = scriptRaw.split('\\n');\n\n return scriptExport;\n}\n\n/**\n * Get an extract file from a script skeleton.\n *\n * @param scriptSkeleton The script skeleton\n * @returns The extract file or null if there is no extract file\n */\nfunction getExtractFile(\n scriptSkeleton: TypesRaw.ScriptSkeleton\n): string | null {\n const extractFile = scriptSkeleton.script;\n if (Array.isArray(extractFile)) {\n return null;\n }\n if (\n extractFile.startsWith('file://') &&\n (extractFile.endsWith('.js') || extractFile.endsWith('.groovy'))\n ) {\n return extractFile.replace('file://', '');\n }\n return null;\n}\n\n/**\n * Get a script export from a file.\n *\n * @param file The path to a script export file\n * @returns The script export\n */\nfunction getScriptExport(file: string): Types.ScriptExportInterface {\n const scriptExportRaw = fs.readFileSync(file, 'utf8');\n const scriptExport = JSON.parse(\n scriptExportRaw\n ) as Types.ScriptExportInterface;\n\n return scriptExport;\n}\n\n/**\n * Get the main script skeleton from a script export. If there is more than one\n * script, an error is thrown.\n *\n * @param script Get the main script skeleton from a script export\n * @returns The main script skeleton\n */\nfunction getScriptSkeleton(\n script: Types.ScriptExportInterface\n): TypesRaw.ScriptSkeleton {\n const scriptId = getScriptId(script);\n return script.script[scriptId];\n}\n\n/**\n * Get the main script ID from a script export. If there is more than one\n * script, an error is thrown.\n *\n * @param script The script export\n * @returns The main script ID\n */\nfunction getScriptId(script: Types.ScriptExportInterface): string {\n const scriptIds = Object.keys(script.script);\n if (scriptIds.length !== 1) {\n throw new Error(`Expected 1 script, found ${scriptIds.length}`);\n }\n return scriptIds[0];\n}\n"],"mappings":"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"}
|
|
@@ -5,6 +5,15 @@ import { printMessage } from './Console';
|
|
|
5
5
|
const {
|
|
6
6
|
getMetadata
|
|
7
7
|
} = ExportImportUtils;
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Get a typed filename. E.g. "my-script.script.json"
|
|
11
|
+
*
|
|
12
|
+
* @param name The name of the file
|
|
13
|
+
* @param type The type of the file, e.g. script, idp, etc.
|
|
14
|
+
* @param suffix The suffix of the file, e.g. json, xml, etc. Defaults to json.
|
|
15
|
+
* @returns The typed filename
|
|
16
|
+
*/
|
|
8
17
|
export function getTypedFilename(name, type, suffix = 'json') {
|
|
9
18
|
const slug = slugify(name.replace(/^http(s?):\/\//, ''));
|
|
10
19
|
return `${slug}.${type}.${suffix}`;
|
|
@@ -12,12 +21,15 @@ export function getTypedFilename(name, type, suffix = 'json') {
|
|
|
12
21
|
|
|
13
22
|
/**
|
|
14
23
|
* Save JSON object to file
|
|
15
|
-
*
|
|
16
|
-
* @param
|
|
24
|
+
*
|
|
25
|
+
* @param data data object
|
|
26
|
+
* @param filename file name
|
|
17
27
|
*/
|
|
18
28
|
export function saveJsonToFile(data, filename) {
|
|
19
29
|
const exportData = data;
|
|
20
|
-
if (!exportData.meta)
|
|
30
|
+
if (!exportData.meta) {
|
|
31
|
+
exportData.meta = getMetadata();
|
|
32
|
+
}
|
|
21
33
|
fs.writeFile(filename, JSON.stringify(exportData, null, 2), err => {
|
|
22
34
|
if (err) {
|
|
23
35
|
return printMessage(`ERROR - can't save ${filename}`, 'error');
|
|
@@ -44,6 +56,22 @@ export function saveToFile(type, data, identifier, filename) {
|
|
|
44
56
|
});
|
|
45
57
|
}
|
|
46
58
|
|
|
59
|
+
/**
|
|
60
|
+
* Save text data to file
|
|
61
|
+
* @param data text data
|
|
62
|
+
* @param filename file name
|
|
63
|
+
* @return true if successful, false otherwise
|
|
64
|
+
*/
|
|
65
|
+
export function saveTextToFile(data, filename) {
|
|
66
|
+
try {
|
|
67
|
+
fs.writeFileSync(filename, data);
|
|
68
|
+
return true;
|
|
69
|
+
} catch (error) {
|
|
70
|
+
printMessage(`ERROR - can't save ${filename}`, 'error');
|
|
71
|
+
return false;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
|
|
47
75
|
/*
|
|
48
76
|
* Output str in title case
|
|
49
77
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ExportImportUtils.js","names":["fs","slugify","ExportImportUtils","state","printMessage","getMetadata","getTypedFilename","name","type","suffix","slug","replace","saveJsonToFile","data","filename","exportData","meta","writeFile","JSON","stringify","err","saveToFile","identifier","Array","isArray","forEach","element","titleCase","input","str","toString","splitStr","toLowerCase","split","i","length","charAt","toUpperCase","slice","join","getRealmString","realm","getRealm","reduce","result","item"],"sources":["utils/ExportImportUtils.ts"],"sourcesContent":["import fs from 'fs';\nimport slugify from 'slugify';\nimport { ExportImportUtils, state } from '@rockcarver/frodo-lib';\nimport { printMessage } from './Console';\n\nconst { getMetadata } = ExportImportUtils;\n\nexport function getTypedFilename(name: string
|
|
1
|
+
{"version":3,"file":"ExportImportUtils.js","names":["fs","slugify","ExportImportUtils","state","printMessage","getMetadata","getTypedFilename","name","type","suffix","slug","replace","saveJsonToFile","data","filename","exportData","meta","writeFile","JSON","stringify","err","saveToFile","identifier","Array","isArray","forEach","element","saveTextToFile","writeFileSync","error","titleCase","input","str","toString","splitStr","toLowerCase","split","i","length","charAt","toUpperCase","slice","join","getRealmString","realm","getRealm","reduce","result","item"],"sources":["utils/ExportImportUtils.ts"],"sourcesContent":["import fs from 'fs';\nimport slugify from 'slugify';\nimport { ExportImportUtils, state } from '@rockcarver/frodo-lib';\nimport { printMessage } from './Console';\n\nconst { getMetadata } = ExportImportUtils;\n\n/**\n * Get a typed filename. E.g. \"my-script.script.json\"\n *\n * @param name The name of the file\n * @param type The type of the file, e.g. script, idp, etc.\n * @param suffix The suffix of the file, e.g. json, xml, etc. Defaults to json.\n * @returns The typed filename\n */\nexport function getTypedFilename(\n name: string,\n type: string,\n suffix = 'json'\n): string {\n const slug = slugify(name.replace(/^http(s?):\\/\\//, ''));\n return `${slug}.${type}.${suffix}`;\n}\n\n/**\n * Save JSON object to file\n *\n * @param data data object\n * @param filename file name\n */\nexport function saveJsonToFile(data: any, filename: string) {\n const exportData = data;\n if (!exportData.meta) {\n exportData.meta = getMetadata();\n }\n fs.writeFile(filename, JSON.stringify(exportData, null, 2), (err) => {\n if (err) {\n return printMessage(`ERROR - can't save ${filename}`, 'error');\n }\n return '';\n });\n}\n\nexport function saveToFile(type, data, identifier, filename) {\n const exportData = {};\n exportData['meta'] = getMetadata();\n exportData[type] = {};\n\n if (Array.isArray(data)) {\n data.forEach((element) => {\n exportData[type][element[identifier]] = element;\n });\n } else {\n exportData[type][data[identifier]] = data;\n }\n fs.writeFile(filename, JSON.stringify(exportData, null, 2), (err) => {\n if (err) {\n return printMessage(`ERROR - can't save ${type} to file`, 'error');\n }\n return '';\n });\n}\n\n/**\n * Save text data to file\n * @param data text data\n * @param filename file name\n * @return true if successful, false otherwise\n */\nexport function saveTextToFile(data: string, filename: string): boolean {\n try {\n fs.writeFileSync(filename, data);\n return true;\n } catch (error) {\n printMessage(`ERROR - can't save ${filename}`, 'error');\n return false;\n }\n}\n\n/*\n * Output str in title case\n *\n * e.g.: 'ALL UPPERCASE AND all lowercase' = 'All Uppercase And All Lowercase'\n */\nexport function titleCase(input) {\n const str = input.toString();\n const splitStr = str.toLowerCase().split(' ');\n for (let i = 0; i < splitStr.length; i += 1) {\n splitStr[i] = splitStr[i].charAt(0).toUpperCase() + splitStr[i].slice(1);\n }\n return splitStr.join(' ');\n}\n\nexport function getRealmString() {\n const realm = state.getRealm();\n return realm\n .split('/')\n .reduce((result, item) => `${result}${titleCase(item)}`, '');\n}\n"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rockcarver/frodo-cli",
|
|
3
|
-
"version": "0.20.
|
|
3
|
+
"version": "0.20.2-0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "A command line interface to manage ForgeRock Identity Cloud tenants, ForgeOps deployments, and classic deployments.",
|
|
6
6
|
"keywords": [
|
|
@@ -104,7 +104,8 @@
|
|
|
104
104
|
]
|
|
105
105
|
},
|
|
106
106
|
"dependencies": {
|
|
107
|
-
"@rockcarver/frodo-lib": "0.18.
|
|
107
|
+
"@rockcarver/frodo-lib": "0.18.2-0",
|
|
108
|
+
"chokidar": "^3.5.3",
|
|
108
109
|
"cli-progress": "^3.11.2",
|
|
109
110
|
"cli-table3": "^0.6.3",
|
|
110
111
|
"colors": "^1.4.0",
|