@rockcarver/frodo-cli 0.23.1-6 → 0.23.1-8
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 +9 -1
- package/esm/cli/authz/authz-policy-import.js +40 -1
- package/esm/cli/authz/authz-policy-import.js.map +1 -1
- package/esm/cli/authz/authz-set-import.js +1 -1
- package/esm/cli/authz/authz-set-import.js.map +1 -1
- package/esm/cli/authz/authz-type-delete.js +18 -13
- package/esm/cli/authz/authz-type-delete.js.map +1 -1
- package/esm/cli/authz/authz-type-describe.js +7 -3
- package/esm/cli/authz/authz-type-describe.js.map +1 -1
- package/esm/cli/authz/authz-type-export.js +32 -5
- package/esm/cli/authz/authz-type-export.js.map +1 -1
- package/esm/cli/authz/authz-type-import.js +38 -5
- package/esm/cli/authz/authz-type-import.js.map +1 -1
- package/esm/cli/authz/authz-type-list.js +4 -10
- package/esm/cli/authz/authz-type-list.js.map +1 -1
- package/esm/ops/EmailTemplateOps.js +24 -3
- package/esm/ops/EmailTemplateOps.js.map +1 -1
- package/esm/ops/PolicyOps.js +96 -3
- package/esm/ops/PolicyOps.js.map +1 -1
- package/esm/ops/ResourceTypeOps.js +156 -25
- package/esm/ops/ResourceTypeOps.js.map +1 -1
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EmailTemplateOps.js","names":["fs","EmailTemplate","ExportImportUtils","getTypedFilename","saveJsonToFile","createProgressIndicator","updateProgressIndicator","stopProgressIndicator","printMessage","createTable","showSpinner","succeedSpinner","failSpinner","debugMessage","wordwrap","path","EMAIL_TEMPLATE_FILE_TYPE","EMAIL_TEMPLATE_TYPE","getEmailTemplate","getEmailTemplates","putEmailTemplate","validateImport","regexEmailTemplateType","RegExp","getFileDataTemplate","meta","emailTemplate","getOneLineDescription","templateObj","description","_id","split","displayName","defaultLocale","subject","Object","values","getTableHeaderMd","markdown","getTableRowMd","templateId","replace","locales","keys","length","filter","locale","join","row","name","listEmailTemplates","long","emailTemplates","result","error","message","sort","a","b","localeCompare","entries","table","push","enabled","from","toString","exportEmailTemplateToFile","file","fileName","templateData","fileData","err","exportEmailTemplatesToFile","response","templates","resultCount","template","exportEmailTemplatesToFiles","importEmailTemplateFromFile","raw","replaceAll","readFile","data","JSON","parse","emailTemplateData","putEmailTemplateError","importEmailTemplatesFromFile","id","hasOwnProperty","call","getEmailTemplateIdFromFile","basename","substring","indexOf","importEmailTemplatesFromFiles","names","readdirSync","jsonFiles","startsWith","endsWith","toLowerCase","total","totalErrors","readFileSync","errors","importFirstEmailTemplateFromFile"],"sources":["ops/EmailTemplateOps.ts"],"sourcesContent":["import fs from 'fs';\nimport { EmailTemplateSkeleton } from '@rockcarver/frodo-lib/types/api/ApiTypes';\nimport { EmailTemplate, ExportImportUtils } from '@rockcarver/frodo-lib';\nimport { getTypedFilename, saveJsonToFile } from '../utils/ExportImportUtils';\nimport {\n createProgressIndicator,\n updateProgressIndicator,\n stopProgressIndicator,\n printMessage,\n createTable,\n showSpinner,\n succeedSpinner,\n failSpinner,\n debugMessage,\n} from '../utils/Console';\nimport wordwrap from './utils/Wordwrap';\nimport path from 'path';\n\nconst EMAIL_TEMPLATE_FILE_TYPE = 'template.email';\nconst {\n EMAIL_TEMPLATE_TYPE,\n getEmailTemplate,\n getEmailTemplates,\n putEmailTemplate,\n} = EmailTemplate;\nconst { validateImport } = ExportImportUtils;\n\nconst regexEmailTemplateType = new RegExp(`${EMAIL_TEMPLATE_TYPE}/`, 'g');\n\n// use a function vs a template variable to avoid problems in loops\nfunction getFileDataTemplate() {\n return {\n meta: {},\n emailTemplate: {},\n };\n}\n\n/**\n * Get a one-line description of the email template\n * @param {EmailTemplateSkeleton} templateObj email template object to describe\n * @returns {string} a one-line description\n */\nexport function getOneLineDescription(\n templateObj: EmailTemplateSkeleton\n): string {\n const description = `[${templateObj._id.split('/')[1]['brightCyan']}] ${\n templateObj.displayName ? templateObj.displayName : ''\n } - ${\n templateObj.defaultLocale\n ? templateObj.subject[templateObj.defaultLocale]\n : Object.values(templateObj.subject)[0]\n }`;\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 += '| Display Name | Locale(s) | Subject | Id |\\n';\n markdown += '| ------------ | --------- | ------- | ---|';\n return markdown;\n}\n\n/**\n * Get a table-row of the email template in markdown\n * @param {EmailTemplateSkeleton} templateObj email template object to describe\n * @returns {string} a table-row of the email template in markdown\n */\nexport function getTableRowMd(templateObj: EmailTemplateSkeleton): string {\n const templateId = templateObj._id.replace(`${EMAIL_TEMPLATE_TYPE}/`, '');\n const locales = `${templateObj.defaultLocale}${\n Object.keys(templateObj.subject).length > 1\n ? ` (${Object.keys(templateObj.subject)\n .filter((locale) => locale !== templateObj.defaultLocale)\n .join(',')})`\n : ''\n }`;\n const row = `| ${\n templateObj.name ? templateObj.name : templateId\n } | ${locales} | ${\n templateObj.subject[templateObj.defaultLocale]\n } | \\`${templateId}\\` |`;\n return row;\n}\n\n/**\n * List email templates\n * @param {boolean} long Long list format with details\n * @return {Promise<unknown[]>} a promise that resolves to an array of email template objects\n */\nexport async function listEmailTemplates(long = false): Promise<unknown[]> {\n let emailTemplates = [];\n try {\n emailTemplates = (await getEmailTemplates()).result;\n } catch (error) {\n printMessage(`Error retrieving email templates: ${error.message}`, 'error');\n }\n emailTemplates.sort((a, b) => a._id.localeCompare(b._id));\n if (!long) {\n for (const [, emailTemplate] of emailTemplates.entries()) {\n printMessage(\n `${emailTemplate._id.replace(`${EMAIL_TEMPLATE_TYPE}/`, '')}`,\n 'data'\n );\n }\n } else {\n const table = createTable([\n 'Id'['brightCyan'],\n 'Name'['brightCyan'],\n 'Status'['brightCyan'],\n 'Locale(s)'['brightCyan'],\n 'From'['brightCyan'],\n 'Subject'['brightCyan'],\n ]);\n for (const emailTemplate of emailTemplates) {\n table.push([\n // Id\n `${emailTemplate._id.replace(`${EMAIL_TEMPLATE_TYPE}/`, '')}`,\n // Name\n `${emailTemplate.displayName ? emailTemplate.displayName : ''}`,\n // Status\n emailTemplate.enabled === false\n ? 'disabled'['brightRed']\n : 'enabled'['brightGreen'],\n // Locale(s)\n `${emailTemplate.defaultLocale}${\n Object.keys(emailTemplate.subject).length > 1\n ? ` (${Object.keys(emailTemplate.subject)\n .filter((locale) => locale !== emailTemplate.defaultLocale)\n .join(',')})`\n : ''\n }`,\n // From\n `${emailTemplate.from ? emailTemplate.from : ''}`,\n // Subject\n wordwrap(emailTemplate.subject[emailTemplate.defaultLocale], 40),\n ]);\n }\n printMessage(table.toString(), 'data');\n }\n return emailTemplates;\n}\n\n/**\n * Export single email template to a file\n * @param {string} templateId email template id to export\n * @param {string} file filename where to export the template data\n */\nexport async function exportEmailTemplateToFile(\n templateId: string,\n file: string\n) {\n let fileName = file;\n if (!fileName) {\n fileName = getTypedFilename(templateId, EMAIL_TEMPLATE_FILE_TYPE);\n }\n createProgressIndicator('determinate', 1, `Exporting ${templateId}`);\n try {\n const templateData = await getEmailTemplate(templateId);\n updateProgressIndicator(`Writing file ${fileName}`);\n const fileData = getFileDataTemplate();\n fileData.emailTemplate[templateId] = templateData;\n saveJsonToFile(fileData, fileName);\n stopProgressIndicator(\n `Exported ${templateId['brightCyan']} to ${fileName['brightCyan']}.`\n );\n } catch (err) {\n stopProgressIndicator(`${err}`);\n printMessage(err, 'error');\n }\n}\n\n/**\n * Export all email templates to file\n * @param {String} file optional filename\n */\nexport async function exportEmailTemplatesToFile(file) {\n let fileName = file;\n if (!fileName) {\n fileName = getTypedFilename(`allEmailTemplates`, EMAIL_TEMPLATE_FILE_TYPE);\n }\n try {\n const fileData = getFileDataTemplate();\n const response = await getEmailTemplates();\n const templates = response.result;\n createProgressIndicator(\n 'determinate',\n response.resultCount,\n 'Exporting email templates'\n );\n for (const template of templates) {\n const templateId = template._id.replace(`${EMAIL_TEMPLATE_TYPE}/`, '');\n updateProgressIndicator(`Exporting ${templateId}`);\n fileData.emailTemplate[templateId] = template;\n }\n saveJsonToFile(fileData, fileName);\n stopProgressIndicator(\n `${response.resultCount} templates exported to ${fileName}.`\n );\n } catch (err) {\n stopProgressIndicator(`${err}`);\n printMessage(err, 'error');\n }\n}\n\n/**\n * Export all email templates to separate files\n */\nexport async function exportEmailTemplatesToFiles() {\n try {\n const response = await getEmailTemplates();\n const templates = response.result;\n createProgressIndicator(\n 'determinate',\n response.resultCount,\n 'Exporting email templates'\n );\n for (const template of templates) {\n const templateId = template._id.replace(`${EMAIL_TEMPLATE_TYPE}/`, '');\n const fileName = getTypedFilename(templateId, EMAIL_TEMPLATE_FILE_TYPE);\n const fileData = getFileDataTemplate();\n updateProgressIndicator(`Exporting ${templateId}`);\n fileData.emailTemplate[templateId] = template;\n saveJsonToFile(fileData, fileName);\n }\n stopProgressIndicator(`${response.resultCount} templates exported.`);\n } catch (err) {\n stopProgressIndicator(`${err}`);\n printMessage(err, 'error');\n }\n}\n\n/**\n * Import email template by id from file\n * @param {string} templateId email template id\n * @param {string} file optional filename\n * @param {boolean} raw import raw data file lacking frodo export envelop\n */\nexport async function importEmailTemplateFromFile(\n templateId: string,\n file: string,\n raw = false\n) {\n // eslint-disable-next-line no-param-reassign\n templateId = templateId.replaceAll(`${EMAIL_TEMPLATE_TYPE}/`, '');\n fs.readFile(file, 'utf8', async (err, data) => {\n if (err) throw err;\n const fileData = JSON.parse(data);\n if (raw || validateImport(fileData.meta)) {\n createProgressIndicator('determinate', 1, `Importing ${templateId}`);\n if (\n fileData.emailTemplate[templateId] ||\n (raw && fileData._id === templateId)\n ) {\n try {\n const emailTemplateData = raw\n ? fileData\n : fileData.emailTemplate[templateId];\n await putEmailTemplate(templateId, emailTemplateData);\n updateProgressIndicator(`Importing ${templateId}`);\n stopProgressIndicator(`Imported ${templateId}`);\n } catch (putEmailTemplateError) {\n stopProgressIndicator(`${putEmailTemplateError}`);\n printMessage(putEmailTemplateError, 'error');\n }\n } else {\n stopProgressIndicator(\n `Email template ${templateId} not found in ${file}!`\n );\n printMessage(\n `Email template ${templateId} not found in ${file}!`,\n 'error'\n );\n }\n } else {\n printMessage('Import validation failed...', 'error');\n }\n });\n}\n\n/**\n * Import all email templates from file\n * @param {string} file optional filename\n */\nexport async function importEmailTemplatesFromFile(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 createProgressIndicator(\n 'determinate',\n Object.keys(fileData.emailTemplate).length,\n `Importing email templates`\n );\n for (const id in fileData.emailTemplate) {\n if ({}.hasOwnProperty.call(fileData.emailTemplate, id)) {\n const templateId = id.replace(regexEmailTemplateType, '');\n try {\n // eslint-disable-next-line no-await-in-loop\n await putEmailTemplate(\n templateId,\n fileData.emailTemplate[templateId]\n );\n updateProgressIndicator(`Imported ${templateId}`);\n } catch (putEmailTemplateError) {\n printMessage(`\\nError importing ${templateId}`, 'error');\n printMessage(putEmailTemplateError.response.data, 'error');\n }\n }\n }\n stopProgressIndicator(`Done.`);\n } else {\n printMessage('Import validation failed...', 'error');\n }\n });\n}\n\n/**\n * Helper function to get email template id from file name\n * @param {string} file file name\n * @returns {string} email template id/name\n */\nfunction getEmailTemplateIdFromFile(file: string) {\n debugMessage(`cli.EmailTemplateOps.getEmailTemplateIdFromFile: file=${file}`);\n const fileName = path.basename(file);\n const templateId = fileName.substring(14, fileName.indexOf('.'));\n debugMessage(\n `cli.EmailTemplateOps.getEmailTemplateIdFromFile: templateId=${templateId}`\n );\n return templateId;\n}\n\n/**\n * Import all email templates from separate files\n * @param {boolean} raw import raw data file lacking frodo export envelop\n */\nexport async function importEmailTemplatesFromFiles(raw = false) {\n const names = fs.readdirSync('.');\n const jsonFiles = raw\n ? names.filter(\n (name) =>\n name.startsWith(`${EMAIL_TEMPLATE_TYPE}-`) && name.endsWith(`.json`)\n )\n : names.filter((name) =>\n name.toLowerCase().endsWith(`${EMAIL_TEMPLATE_FILE_TYPE}.json`)\n );\n createProgressIndicator(\n 'determinate',\n jsonFiles.length,\n 'Importing email templates...'\n );\n let total = 0;\n let totalErrors = 0;\n for (const file of jsonFiles) {\n const data = fs.readFileSync(file, 'utf8');\n const fileData = JSON.parse(data);\n if (\n (raw && file.startsWith('emailTemplate-')) ||\n validateImport(fileData.meta)\n ) {\n let errors = 0;\n if (raw) {\n total++;\n const templateId = getEmailTemplateIdFromFile(file);\n try {\n await putEmailTemplate(templateId, fileData);\n } catch (putEmailTemplateError) {\n errors += 1;\n printMessage(`\\nError importing ${templateId}`, 'error');\n printMessage(putEmailTemplateError, 'error');\n printMessage(putEmailTemplateError.response?.data, 'error');\n }\n } else {\n total += Object.keys(fileData.emailTemplate).length;\n for (const id in fileData.emailTemplate) {\n if ({}.hasOwnProperty.call(fileData.emailTemplate, id)) {\n const templateId = id.replace(regexEmailTemplateType, '');\n try {\n await putEmailTemplate(\n templateId,\n fileData.emailTemplate[templateId]\n );\n } catch (putEmailTemplateError) {\n errors += 1;\n printMessage(`\\nError importing ${templateId}`, 'error');\n printMessage(putEmailTemplateError.response.data, 'error');\n }\n }\n }\n }\n totalErrors += errors;\n updateProgressIndicator(`Imported ${file}`);\n } else {\n printMessage(`Validation of ${file} failed!`, 'error');\n }\n }\n stopProgressIndicator(\n `Imported ${total - totalErrors} of ${total} email template(s) from ${\n jsonFiles.length\n } file(s).`\n );\n}\n\n/**\n * Import first email template from file\n * @param {String} file optional filename\n */\nexport async function importFirstEmailTemplateFromFile(\n file: string,\n raw = false\n) {\n fs.readFile(file, 'utf8', async (err, data) => {\n if (err) throw err;\n const fileData = JSON.parse(data);\n if (\n (raw && file.startsWith('emailTemplate-')) ||\n validateImport(fileData.meta)\n ) {\n showSpinner(`Importing first email template`);\n if (raw) {\n const templateId = getEmailTemplateIdFromFile(file);\n try {\n await putEmailTemplate(templateId, fileData);\n succeedSpinner(`Imported ${templateId}`);\n } catch (putEmailTemplateError) {\n failSpinner(`Error importing ${templateId}`);\n printMessage(putEmailTemplateError.response?.data, 'error');\n }\n } else {\n for (const id in fileData.emailTemplate) {\n if ({}.hasOwnProperty.call(fileData.emailTemplate, id)) {\n try {\n await putEmailTemplate(\n id.replace(regexEmailTemplateType, ''),\n fileData.emailTemplate[id]\n );\n succeedSpinner(`Imported ${id}`);\n } catch (putEmailTemplateError) {\n failSpinner(`Error importing ${id}`);\n printMessage(putEmailTemplateError.response?.data, 'error');\n }\n break;\n }\n }\n }\n } else {\n printMessage('Import validation failed...', 'error');\n }\n });\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"EmailTemplateOps.js","names":["fs","EmailTemplate","ExportImportUtils","getTypedFilename","saveJsonToFile","createProgressIndicator","updateProgressIndicator","stopProgressIndicator","printMessage","createTable","showSpinner","succeedSpinner","failSpinner","debugMessage","wordwrap","path","cloneDeep","EMAIL_TEMPLATE_FILE_TYPE","EMAIL_TEMPLATE_TYPE","getEmailTemplate","getEmailTemplates","putEmailTemplate","validateImport","regexEmailTemplateType","RegExp","getFileDataTemplate","meta","emailTemplate","getOneLineDescription","templateObj","description","_id","split","displayName","defaultLocale","subject","Object","values","getTableHeaderMd","markdown","getTableRowMd","templateId","replace","locales","keys","length","filter","locale","join","row","name","listEmailTemplates","long","emailTemplates","result","error","message","sort","a","b","localeCompare","entries","table","push","enabled","from","toString","exportEmailTemplateToFile","file","fileName","templateData","fileData","err","exportEmailTemplatesToFile","response","templates","resultCount","template","exportEmailTemplatesToFiles","importEmailTemplateFromFile","raw","replaceAll","readFile","data","JSON","parse","emailTemplateData","s2sConvert","putEmailTemplateError","importEmailTemplatesFromFile","id","hasOwnProperty","call","getEmailTemplateIdFromFile","basename","substring","indexOf","html","convertedData","importEmailTemplatesFromFiles","names","readdirSync","jsonFiles","startsWith","endsWith","toLowerCase","total","totalErrors","readFileSync","errors","importFirstEmailTemplateFromFile"],"sources":["ops/EmailTemplateOps.ts"],"sourcesContent":["import fs from 'fs';\nimport { EmailTemplateSkeleton } from '@rockcarver/frodo-lib/types/api/ApiTypes';\nimport { EmailTemplate, ExportImportUtils } from '@rockcarver/frodo-lib';\nimport { getTypedFilename, saveJsonToFile } from '../utils/ExportImportUtils';\nimport {\n createProgressIndicator,\n updateProgressIndicator,\n stopProgressIndicator,\n printMessage,\n createTable,\n showSpinner,\n succeedSpinner,\n failSpinner,\n debugMessage,\n} from '../utils/Console';\nimport wordwrap from './utils/Wordwrap';\nimport path from 'path';\nimport { cloneDeep } from './utils/OpsUtils';\n\nconst EMAIL_TEMPLATE_FILE_TYPE = 'template.email';\nconst {\n EMAIL_TEMPLATE_TYPE,\n getEmailTemplate,\n getEmailTemplates,\n putEmailTemplate,\n} = EmailTemplate;\nconst { validateImport } = ExportImportUtils;\n\nconst regexEmailTemplateType = new RegExp(`${EMAIL_TEMPLATE_TYPE}/`, 'g');\n\n// use a function vs a template variable to avoid problems in loops\nfunction getFileDataTemplate() {\n return {\n meta: {},\n emailTemplate: {},\n };\n}\n\n/**\n * Get a one-line description of the email template\n * @param {EmailTemplateSkeleton} templateObj email template object to describe\n * @returns {string} a one-line description\n */\nexport function getOneLineDescription(\n templateObj: EmailTemplateSkeleton\n): string {\n const description = `[${templateObj._id.split('/')[1]['brightCyan']}] ${\n templateObj.displayName ? templateObj.displayName : ''\n } - ${\n templateObj.defaultLocale\n ? templateObj.subject[templateObj.defaultLocale]\n : Object.values(templateObj.subject)[0]\n }`;\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 += '| Display Name | Locale(s) | Subject | Id |\\n';\n markdown += '| ------------ | --------- | ------- | ---|';\n return markdown;\n}\n\n/**\n * Get a table-row of the email template in markdown\n * @param {EmailTemplateSkeleton} templateObj email template object to describe\n * @returns {string} a table-row of the email template in markdown\n */\nexport function getTableRowMd(templateObj: EmailTemplateSkeleton): string {\n const templateId = templateObj._id.replace(`${EMAIL_TEMPLATE_TYPE}/`, '');\n const locales = `${templateObj.defaultLocale}${\n Object.keys(templateObj.subject).length > 1\n ? ` (${Object.keys(templateObj.subject)\n .filter((locale) => locale !== templateObj.defaultLocale)\n .join(',')})`\n : ''\n }`;\n const row = `| ${\n templateObj.name ? templateObj.name : templateId\n } | ${locales} | ${\n templateObj.subject[templateObj.defaultLocale]\n } | \\`${templateId}\\` |`;\n return row;\n}\n\n/**\n * List email templates\n * @param {boolean} long Long list format with details\n * @return {Promise<unknown[]>} a promise that resolves to an array of email template objects\n */\nexport async function listEmailTemplates(long = false): Promise<unknown[]> {\n let emailTemplates = [];\n try {\n emailTemplates = (await getEmailTemplates()).result;\n } catch (error) {\n printMessage(`Error retrieving email templates: ${error.message}`, 'error');\n }\n emailTemplates.sort((a, b) => a._id.localeCompare(b._id));\n if (!long) {\n for (const [, emailTemplate] of emailTemplates.entries()) {\n printMessage(\n `${emailTemplate._id.replace(`${EMAIL_TEMPLATE_TYPE}/`, '')}`,\n 'data'\n );\n }\n } else {\n const table = createTable([\n 'Id'['brightCyan'],\n 'Name'['brightCyan'],\n 'Status'['brightCyan'],\n 'Locale(s)'['brightCyan'],\n 'From'['brightCyan'],\n 'Subject'['brightCyan'],\n ]);\n for (const emailTemplate of emailTemplates) {\n table.push([\n // Id\n `${emailTemplate._id.replace(`${EMAIL_TEMPLATE_TYPE}/`, '')}`,\n // Name\n `${emailTemplate.displayName ? emailTemplate.displayName : ''}`,\n // Status\n emailTemplate.enabled === false\n ? 'disabled'['brightRed']\n : 'enabled'['brightGreen'],\n // Locale(s)\n `${emailTemplate.defaultLocale}${\n Object.keys(emailTemplate.subject).length > 1\n ? ` (${Object.keys(emailTemplate.subject)\n .filter((locale) => locale !== emailTemplate.defaultLocale)\n .join(',')})`\n : ''\n }`,\n // From\n `${emailTemplate.from ? emailTemplate.from : ''}`,\n // Subject\n wordwrap(emailTemplate.subject[emailTemplate.defaultLocale], 40),\n ]);\n }\n printMessage(table.toString(), 'data');\n }\n return emailTemplates;\n}\n\n/**\n * Export single email template to a file\n * @param {string} templateId email template id to export\n * @param {string} file filename where to export the template data\n */\nexport async function exportEmailTemplateToFile(\n templateId: string,\n file: string\n) {\n let fileName = file;\n if (!fileName) {\n fileName = getTypedFilename(templateId, EMAIL_TEMPLATE_FILE_TYPE);\n }\n createProgressIndicator('determinate', 1, `Exporting ${templateId}`);\n try {\n const templateData = await getEmailTemplate(templateId);\n updateProgressIndicator(`Writing file ${fileName}`);\n const fileData = getFileDataTemplate();\n fileData.emailTemplate[templateId] = templateData;\n saveJsonToFile(fileData, fileName);\n stopProgressIndicator(\n `Exported ${templateId['brightCyan']} to ${fileName['brightCyan']}.`\n );\n } catch (err) {\n stopProgressIndicator(`${err}`);\n printMessage(err, 'error');\n }\n}\n\n/**\n * Export all email templates to file\n * @param {String} file optional filename\n */\nexport async function exportEmailTemplatesToFile(file) {\n let fileName = file;\n if (!fileName) {\n fileName = getTypedFilename(`allEmailTemplates`, EMAIL_TEMPLATE_FILE_TYPE);\n }\n try {\n const fileData = getFileDataTemplate();\n const response = await getEmailTemplates();\n const templates = response.result;\n createProgressIndicator(\n 'determinate',\n response.resultCount,\n 'Exporting email templates'\n );\n for (const template of templates) {\n const templateId = template._id.replace(`${EMAIL_TEMPLATE_TYPE}/`, '');\n updateProgressIndicator(`Exporting ${templateId}`);\n fileData.emailTemplate[templateId] = template;\n }\n saveJsonToFile(fileData, fileName);\n stopProgressIndicator(\n `${response.resultCount} templates exported to ${fileName}.`\n );\n } catch (err) {\n stopProgressIndicator(`${err}`);\n printMessage(err, 'error');\n }\n}\n\n/**\n * Export all email templates to separate files\n */\nexport async function exportEmailTemplatesToFiles() {\n try {\n const response = await getEmailTemplates();\n const templates = response.result;\n createProgressIndicator(\n 'determinate',\n response.resultCount,\n 'Exporting email templates'\n );\n for (const template of templates) {\n const templateId = template._id.replace(`${EMAIL_TEMPLATE_TYPE}/`, '');\n const fileName = getTypedFilename(templateId, EMAIL_TEMPLATE_FILE_TYPE);\n const fileData = getFileDataTemplate();\n updateProgressIndicator(`Exporting ${templateId}`);\n fileData.emailTemplate[templateId] = template;\n saveJsonToFile(fileData, fileName);\n }\n stopProgressIndicator(`${response.resultCount} templates exported.`);\n } catch (err) {\n stopProgressIndicator(`${err}`);\n printMessage(err, 'error');\n }\n}\n\n/**\n * Import email template by id from file\n * @param {string} templateId email template id\n * @param {string} file optional filename\n * @param {boolean} raw import raw data file lacking frodo export envelop\n */\nexport async function importEmailTemplateFromFile(\n templateId: string,\n file: string,\n raw = false\n) {\n // eslint-disable-next-line no-param-reassign\n templateId = templateId.replaceAll(`${EMAIL_TEMPLATE_TYPE}/`, '');\n fs.readFile(file, 'utf8', async (err, data) => {\n if (err) throw err;\n const fileData = JSON.parse(data);\n if (raw || validateImport(fileData.meta)) {\n createProgressIndicator('determinate', 1, `Importing ${templateId}`);\n if (\n fileData.emailTemplate[templateId] ||\n (raw && fileData._id === templateId)\n ) {\n try {\n const emailTemplateData = raw\n ? s2sConvert(fileData)\n : fileData.emailTemplate[templateId];\n await putEmailTemplate(templateId, emailTemplateData);\n updateProgressIndicator(`Importing ${templateId}`);\n stopProgressIndicator(`Imported ${templateId}`);\n } catch (putEmailTemplateError) {\n stopProgressIndicator(`${putEmailTemplateError}`);\n printMessage(putEmailTemplateError, 'error');\n }\n } else {\n stopProgressIndicator(\n `Email template ${templateId} not found in ${file}!`\n );\n printMessage(\n `Email template ${templateId} not found in ${file}!`,\n 'error'\n );\n }\n } else {\n printMessage('Import validation failed...', 'error');\n }\n });\n}\n\n/**\n * Import all email templates from file\n * @param {string} file optional filename\n */\nexport async function importEmailTemplatesFromFile(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 createProgressIndicator(\n 'determinate',\n Object.keys(fileData.emailTemplate).length,\n `Importing email templates`\n );\n for (const id in fileData.emailTemplate) {\n if ({}.hasOwnProperty.call(fileData.emailTemplate, id)) {\n const templateId = id.replace(regexEmailTemplateType, '');\n try {\n // eslint-disable-next-line no-await-in-loop\n await putEmailTemplate(\n templateId,\n fileData.emailTemplate[templateId]\n );\n updateProgressIndicator(`Imported ${templateId}`);\n } catch (putEmailTemplateError) {\n printMessage(`\\nError importing ${templateId}`, 'error');\n printMessage(putEmailTemplateError.response.data, 'error');\n }\n }\n }\n stopProgressIndicator(`Done.`);\n } else {\n printMessage('Import validation failed...', 'error');\n }\n });\n}\n\n/**\n * Helper function to get email template id from file name\n * @param {string} file file name\n * @returns {string} email template id/name\n */\nfunction getEmailTemplateIdFromFile(file: string) {\n debugMessage(`cli.EmailTemplateOps.getEmailTemplateIdFromFile: file=${file}`);\n const fileName = path.basename(file);\n const templateId = fileName.substring(14, fileName.indexOf('.'));\n debugMessage(\n `cli.EmailTemplateOps.getEmailTemplateIdFromFile: templateId=${templateId}`\n );\n return templateId;\n}\n\n/**\n * Convert template for s2s purposes (software-to-saas migration)\n * @param {EmailTemplateSkeleton} templateData template object\n * @returns {EmailTemplateSkeleton} converted template object\n */\nfunction s2sConvert(\n templateData: EmailTemplateSkeleton\n): EmailTemplateSkeleton {\n if (templateData.message && !templateData.html) {\n const convertedData = cloneDeep(templateData);\n convertedData.html = cloneDeep(templateData.message);\n debugMessage(`cli.EmailTemplateOps.s2sConvert: templateData:`);\n debugMessage(templateData);\n debugMessage(`cli.EmailTemplateOps.s2sConvert: convertedData:`);\n debugMessage(convertedData);\n return convertedData;\n }\n return templateData;\n}\n\n/**\n * Import all email templates from separate files\n * @param {boolean} raw import raw data file lacking frodo export envelop\n */\nexport async function importEmailTemplatesFromFiles(raw = false) {\n const names = fs.readdirSync('.');\n const jsonFiles = raw\n ? names.filter(\n (name) =>\n name.startsWith(`${EMAIL_TEMPLATE_TYPE}-`) && name.endsWith(`.json`)\n )\n : names.filter((name) =>\n name.toLowerCase().endsWith(`${EMAIL_TEMPLATE_FILE_TYPE}.json`)\n );\n createProgressIndicator(\n 'determinate',\n jsonFiles.length,\n 'Importing email templates...'\n );\n let total = 0;\n let totalErrors = 0;\n for (const file of jsonFiles) {\n const data = fs.readFileSync(file, 'utf8');\n const fileData = JSON.parse(data);\n if (\n (raw && file.startsWith('emailTemplate-')) ||\n validateImport(fileData.meta)\n ) {\n let errors = 0;\n if (raw) {\n total++;\n const templateId = getEmailTemplateIdFromFile(file);\n try {\n const templateData = s2sConvert(fileData);\n await putEmailTemplate(templateId, templateData);\n } catch (putEmailTemplateError) {\n errors += 1;\n printMessage(`\\nError importing ${templateId}`, 'error');\n printMessage(putEmailTemplateError, 'error');\n printMessage(putEmailTemplateError.response?.data, 'error');\n }\n } else {\n total += Object.keys(fileData.emailTemplate).length;\n for (const id in fileData.emailTemplate) {\n if ({}.hasOwnProperty.call(fileData.emailTemplate, id)) {\n const templateId = id.replace(regexEmailTemplateType, '');\n try {\n await putEmailTemplate(\n templateId,\n fileData.emailTemplate[templateId]\n );\n } catch (putEmailTemplateError) {\n errors += 1;\n printMessage(`\\nError importing ${templateId}`, 'error');\n printMessage(putEmailTemplateError.response.data, 'error');\n }\n }\n }\n }\n totalErrors += errors;\n updateProgressIndicator(`Imported ${file}`);\n } else {\n printMessage(`Validation of ${file} failed!`, 'error');\n }\n }\n stopProgressIndicator(\n `Imported ${total - totalErrors} of ${total} email template(s) from ${\n jsonFiles.length\n } file(s).`\n );\n}\n\n/**\n * Import first email template from file\n * @param {String} file optional filename\n */\nexport async function importFirstEmailTemplateFromFile(\n file: string,\n raw = false\n) {\n fs.readFile(file, 'utf8', async (err, data) => {\n if (err) throw err;\n const fileData = JSON.parse(data);\n if (\n (raw && file.startsWith('emailTemplate-')) ||\n validateImport(fileData.meta)\n ) {\n showSpinner(`Importing first email template`);\n if (raw) {\n const templateId = getEmailTemplateIdFromFile(file);\n try {\n const templateData = s2sConvert(fileData);\n await putEmailTemplate(templateId, templateData);\n succeedSpinner(`Imported ${templateId}`);\n } catch (putEmailTemplateError) {\n failSpinner(`Error importing ${templateId}`);\n printMessage(putEmailTemplateError.response?.data, 'error');\n }\n } else {\n for (const id in fileData.emailTemplate) {\n if ({}.hasOwnProperty.call(fileData.emailTemplate, id)) {\n try {\n await putEmailTemplate(\n id.replace(regexEmailTemplateType, ''),\n fileData.emailTemplate[id]\n );\n succeedSpinner(`Imported ${id}`);\n } catch (putEmailTemplateError) {\n failSpinner(`Error importing ${id}`);\n printMessage(putEmailTemplateError.response?.data, 'error');\n }\n break;\n }\n }\n }\n } else {\n printMessage('Import validation failed...', 'error');\n }\n });\n}\n"],"mappings":"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"}
|
package/esm/ops/PolicyOps.js
CHANGED
|
@@ -10,7 +10,9 @@ const {
|
|
|
10
10
|
exportPolicy,
|
|
11
11
|
exportPolicies,
|
|
12
12
|
exportPoliciesByPolicySet,
|
|
13
|
-
importPolicy
|
|
13
|
+
importPolicy,
|
|
14
|
+
importFirstPolicy,
|
|
15
|
+
importPolicies
|
|
14
16
|
} = Policy;
|
|
15
17
|
const {
|
|
16
18
|
getRealmName
|
|
@@ -364,8 +366,8 @@ export async function exportPoliciesByPolicySetToFiles(policySetId, options = {
|
|
|
364
366
|
}
|
|
365
367
|
|
|
366
368
|
/**
|
|
367
|
-
* Import policy
|
|
368
|
-
* @param {string} policyId policy
|
|
369
|
+
* Import policy from file
|
|
370
|
+
* @param {string} policyId policy id/name
|
|
369
371
|
* @param {string} file file name
|
|
370
372
|
* @param {PolicyImportOptions} options import options
|
|
371
373
|
* @returns {Promise<boolean>} true if successful, false otherwise
|
|
@@ -389,4 +391,95 @@ export async function importPolicyFromFile(policyId, file, options = {
|
|
|
389
391
|
debugMessage(`cli.PolicyOps.importPolicyFromFile: end`);
|
|
390
392
|
return outcome;
|
|
391
393
|
}
|
|
394
|
+
|
|
395
|
+
/**
|
|
396
|
+
* Import first policy from file
|
|
397
|
+
* @param {string} file file name
|
|
398
|
+
* @param {PolicyImportOptions} options import options
|
|
399
|
+
* @returns {Promise<boolean>} true if successful, false otherwise
|
|
400
|
+
*/
|
|
401
|
+
export async function importFirstPolicyFromFile(file, options = {
|
|
402
|
+
deps: true
|
|
403
|
+
}) {
|
|
404
|
+
let outcome = false;
|
|
405
|
+
debugMessage(`cli.PolicySetOps.importFirstPolicyFromFile: begin`);
|
|
406
|
+
showSpinner(`Importing ${file}...`);
|
|
407
|
+
try {
|
|
408
|
+
const data = fs.readFileSync(file, 'utf8');
|
|
409
|
+
const fileData = JSON.parse(data);
|
|
410
|
+
await importFirstPolicy(fileData, options);
|
|
411
|
+
outcome = true;
|
|
412
|
+
succeedSpinner(`Imported ${file}.`);
|
|
413
|
+
} catch (error) {
|
|
414
|
+
failSpinner(`Error importing ${file}.`);
|
|
415
|
+
printMessage(error, 'error');
|
|
416
|
+
}
|
|
417
|
+
debugMessage(`cli.PolicySetOps.importFirstPolicyFromFile: end`);
|
|
418
|
+
return outcome;
|
|
419
|
+
}
|
|
420
|
+
|
|
421
|
+
/**
|
|
422
|
+
* Import policies from file
|
|
423
|
+
* @param {string} file file name
|
|
424
|
+
* @param {PolicyImportOptions} options import options
|
|
425
|
+
* @returns {Promise<boolean>} true if successful, false otherwise
|
|
426
|
+
*/
|
|
427
|
+
export async function importPoliciesFromFile(file, options = {
|
|
428
|
+
deps: true
|
|
429
|
+
}) {
|
|
430
|
+
let outcome = false;
|
|
431
|
+
debugMessage(`cli.PolicyOps.importPoliciesFromFile: begin`);
|
|
432
|
+
showSpinner(`Importing ${file}...`);
|
|
433
|
+
try {
|
|
434
|
+
const data = fs.readFileSync(file, 'utf8');
|
|
435
|
+
const fileData = JSON.parse(data);
|
|
436
|
+
await importPolicies(fileData, options);
|
|
437
|
+
outcome = true;
|
|
438
|
+
succeedSpinner(`Imported ${file}.`);
|
|
439
|
+
} catch (error) {
|
|
440
|
+
failSpinner(`Error importing ${file}.`);
|
|
441
|
+
printMessage(error, 'error');
|
|
442
|
+
}
|
|
443
|
+
debugMessage(`cli.PolicyOps.importPoliciesFromFile: end`);
|
|
444
|
+
return outcome;
|
|
445
|
+
}
|
|
446
|
+
|
|
447
|
+
/**
|
|
448
|
+
* Import policies from files
|
|
449
|
+
* @param {PolicyImportOptions} options import options
|
|
450
|
+
* @returns {Promise<boolean>} true if successful, false otherwise
|
|
451
|
+
*/
|
|
452
|
+
export async function importPoliciesFromFiles(options = {
|
|
453
|
+
deps: true
|
|
454
|
+
}) {
|
|
455
|
+
const errors = [];
|
|
456
|
+
try {
|
|
457
|
+
debugMessage(`cli.PolicyOps.importPoliciesFromFiles: begin`);
|
|
458
|
+
const names = fs.readdirSync('.');
|
|
459
|
+
const files = names.filter(name => name.toLowerCase().endsWith('.policy.authz.json'));
|
|
460
|
+
createProgressBar(files.length, 'Importing policies...');
|
|
461
|
+
let total = 0;
|
|
462
|
+
for (const file of files) {
|
|
463
|
+
try {
|
|
464
|
+
const data = fs.readFileSync(file, 'utf8');
|
|
465
|
+
const fileData = JSON.parse(data);
|
|
466
|
+
const count = Object.keys(fileData.policyset).length;
|
|
467
|
+
total += count;
|
|
468
|
+
await importPolicies(fileData, options);
|
|
469
|
+
updateProgressBar(`Imported ${count} policies from ${file}`);
|
|
470
|
+
} catch (error) {
|
|
471
|
+
errors.push(error);
|
|
472
|
+
updateProgressBar(`Error importing policies from ${file}`);
|
|
473
|
+
printMessage(error, 'error');
|
|
474
|
+
}
|
|
475
|
+
}
|
|
476
|
+
stopProgressBar(`Finished importing ${total} policies from ${files.length} files.`);
|
|
477
|
+
} catch (error) {
|
|
478
|
+
errors.push(error);
|
|
479
|
+
stopProgressBar(`Error importing policies from files.`);
|
|
480
|
+
printMessage(error, 'error');
|
|
481
|
+
}
|
|
482
|
+
debugMessage(`cli.PolicyOps.importPoliciesFromFiles: end`);
|
|
483
|
+
return 0 === errors.length;
|
|
484
|
+
}
|
|
392
485
|
//# sourceMappingURL=PolicyOps.js.map
|
package/esm/ops/PolicyOps.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PolicyOps.js","names":["fs","Policy","Utils","state","createObjectTable","createProgressBar","debugMessage","failSpinner","printMessage","showSpinner","stopProgressBar","succeedSpinner","updateProgressBar","getTypedFilename","saveJsonToFile","titleCase","deletePolicy","_deletePolicy","getPolicy","getPolicies","getPoliciesByPolicySet","exportPolicy","exportPolicies","exportPoliciesByPolicySet","importPolicy","getRealmName","listPolicies","long","outcome","policies","sort","a","b","_id","localeCompare","policy","err","message","listPoliciesByPolicySet","policySetId","describePolicy","policyId","json","policySet","table","toString","errors","error","length","errorMessages","map","join","deletePolicies","push","deletePoliciesByPolicySet","exportPolicyToFile","file","options","useStringArrays","deps","fileName","exportData","exportPoliciesToFile","getRealm","exportPoliciesByPolicySetToFile","exportPoliciesToFiles","exportPoliciesByPolicySetToFiles","importPolicyFromFile","data","readFileSync","fileData","JSON","parse"],"sources":["ops/PolicyOps.ts"],"sourcesContent":["import fs from 'fs';\nimport { PolicySkeleton } from '@rockcarver/frodo-lib/types/api/ApiTypes';\nimport { Policy, Utils, state } from '@rockcarver/frodo-lib';\nimport {\n createObjectTable,\n createProgressBar,\n debugMessage,\n failSpinner,\n printMessage,\n showSpinner,\n stopProgressBar,\n succeedSpinner,\n updateProgressBar,\n} from '../utils/Console';\nimport {\n getTypedFilename,\n saveJsonToFile,\n titleCase,\n} from '../utils/ExportImportUtils';\nimport {\n PolicyExportOptions,\n PolicyImportOptions,\n PolicyExportInterface,\n} from '@rockcarver/frodo-lib/types/ops/PolicyOps';\n\nconst {\n deletePolicy: _deletePolicy,\n getPolicy,\n getPolicies,\n getPoliciesByPolicySet,\n exportPolicy,\n exportPolicies,\n exportPoliciesByPolicySet,\n importPolicy,\n} = Policy;\nconst { getRealmName } = Utils;\n\n/**\n * List policies\n * @param {boolean} long list with details\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function listPolicies(long = false): Promise<boolean> {\n let outcome = false;\n try {\n const policies = await getPolicies();\n policies.sort((a, b) => a._id.localeCompare(b._id));\n for (const policy of policies) {\n if (!long) {\n printMessage(`${policy._id}`, 'data');\n }\n }\n outcome = true;\n } catch (err) {\n printMessage(`listPolicies ERROR: ${err.message}`, 'error');\n printMessage(err, 'error');\n }\n return outcome;\n}\n\n/**\n * List policies by policy set\n * @param {string} policySetId policy set id/name\n * @param {boolean} long list with details\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function listPoliciesByPolicySet(\n policySetId: string,\n long = false\n): Promise<boolean> {\n let outcome = false;\n try {\n const policies = await getPoliciesByPolicySet(policySetId);\n policies.sort((a, b) => a._id.localeCompare(b._id));\n for (const policy of policies) {\n if (!long) {\n printMessage(`${policy._id}`, 'data');\n }\n }\n outcome = true;\n } catch (err) {\n printMessage(`listPolicies ERROR: ${err.message}`, 'error');\n printMessage(err, 'error');\n }\n return outcome;\n}\n\n/**\n * Describe policy\n * @param {string} policyId policy id/name\n * @param {Object} json JSON output\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function describePolicy(\n policyId: string,\n json = false\n): Promise<boolean> {\n let outcome = false;\n const policySet = await getPolicy(policyId);\n outcome = true;\n if (json) {\n printMessage(policySet, 'data');\n } else {\n const table = createObjectTable(policySet);\n printMessage(table.toString(), 'data');\n }\n return outcome;\n}\n\n/**\n * Delete policy\n * @param {string} policyId policy id/name\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function deletePolicy(policyId: string): Promise<boolean> {\n debugMessage(`cli.PolicyOps.deletePolicy: begin`);\n showSpinner(`Deleting ${policyId}...`);\n let outcome = false;\n const errors = [];\n try {\n debugMessage(`Deleting policy ${policyId}`);\n await _deletePolicy(policyId);\n } catch (error) {\n printMessage(`Error deleting policy ${policyId}: ${error}`, 'error');\n }\n if (errors.length) {\n const errorMessages = errors.map((error) => error.message).join('\\n');\n failSpinner(`Error deleting ${policyId}: ${errorMessages}`);\n } else {\n succeedSpinner(`Deleted ${policyId}.`);\n outcome = true;\n }\n debugMessage(`cli.PolicyOps.deletePolicy: end [outcome=${outcome}]`);\n return outcome;\n}\n\n/**\n * Delete all policies\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function deletePolicies(): Promise<boolean> {\n debugMessage(`cli.PolicyOps.deletePolicies: begin`);\n let outcome = false;\n const errors = [];\n let policies: PolicySkeleton[] = [];\n try {\n showSpinner(`Retrieving all policies...`);\n try {\n policies = await getPolicies();\n succeedSpinner(`Found ${policies.length} policies.`);\n } catch (error) {\n error.message = `Error retrieving all policies: ${error.message}`;\n failSpinner(error.message);\n throw error;\n }\n if (policies.length)\n createProgressBar(\n policies.length,\n `Deleting ${policies.length} policies...`\n );\n for (const policy of policies) {\n const policyId = policy._id;\n try {\n debugMessage(`Deleting policy ${policyId}`);\n await _deletePolicy(policyId);\n updateProgressBar(`Deleted ${policyId}`);\n } catch (error) {\n error.message = `Error deleting policy ${policyId}: ${error}`;\n updateProgressBar(error.message);\n errors.push(error);\n }\n }\n } catch (error) {\n error.message = `Error deleting policies: ${error}`;\n errors.push(error);\n } finally {\n if (errors.length) {\n const errorMessages = errors.map((error) => error.message).join('\\n');\n if (policies.length)\n stopProgressBar(`Error deleting all policies: ${errorMessages}`);\n } else {\n if (policies.length)\n stopProgressBar(`Deleted ${policies.length} policies.`);\n outcome = true;\n }\n }\n debugMessage(`cli.PolicyOps.deletePolicies: end [outcome=${outcome}]`);\n return outcome;\n}\n\n/**\n * Delete all policies in policy set\n * @param {string} policySetId policy set id/name\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function deletePoliciesByPolicySet(\n policySetId: string\n): Promise<boolean> {\n debugMessage(`cli.PolicyOps.deletePoliciesByPolicySet: begin`);\n let outcome = false;\n const errors = [];\n let policies: PolicySkeleton[] = [];\n try {\n showSpinner(`Retrieving all policies from policy set ${policySetId}...`);\n try {\n policies = await getPoliciesByPolicySet(policySetId);\n succeedSpinner(\n `Found ${policies.length} policies in policy set ${policySetId}.`\n );\n } catch (error) {\n error.message = `Error retrieving all policies from policy set ${policySetId}: ${error.message}`;\n failSpinner(error.message);\n throw error;\n }\n if (policies.length)\n createProgressBar(\n policies.length,\n `Deleting ${policies.length} policies from policy set ${policySetId}...`\n );\n for (const policy of policies) {\n const policyId = policy._id;\n try {\n debugMessage(`Deleting policy ${policyId}`);\n await _deletePolicy(policyId);\n updateProgressBar(`Deleted ${policyId}`);\n } catch (error) {\n error.message = `Error deleting policy ${policyId} from policy set ${policySetId}: ${error}`;\n updateProgressBar(error.message);\n errors.push(error);\n }\n }\n } catch (error) {\n error.message = `Error deleting policies from policy set ${policySetId}: ${error}`;\n errors.push(error);\n } finally {\n if (errors.length) {\n const errorMessages = errors.map((error) => error.message).join('\\n');\n if (policies.length)\n stopProgressBar(\n `Error deleting all policies from policy set ${policySetId}: ${errorMessages}`\n );\n } else {\n if (policies.length)\n stopProgressBar(`Deleted ${policies.length} policies.`);\n outcome = true;\n }\n }\n debugMessage(\n `cli.PolicyOps.deletePoliciesByPolicySet: end [outcome=${outcome}]`\n );\n return outcome;\n}\n\n/**\n * Export policy to file\n * @param {string} policyId policy id/name\n * @param {string} file file name\n * @param {ApplicationExportOptions} options export options\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function exportPolicyToFile(\n policyId: string,\n file: string,\n options: PolicyExportOptions = { useStringArrays: true, deps: true }\n): Promise<boolean> {\n let outcome = false;\n debugMessage(`cli.PolicyOps.exportPolicyToFile: begin`);\n showSpinner(`Exporting ${policyId}...`);\n try {\n let fileName = getTypedFilename(policyId, 'policy.authz');\n if (file) {\n fileName = file;\n }\n const exportData = await exportPolicy(policyId, options);\n saveJsonToFile(exportData, fileName);\n succeedSpinner(`Exported ${policyId} to ${fileName}.`);\n outcome = true;\n } catch (error) {\n failSpinner(`Error exporting ${policyId}: ${error.message}`);\n }\n debugMessage(`cli.PolicyOps.exportPolicyToFile: end`);\n return outcome;\n}\n\n/**\n * Export policies to file\n * @param {string} file file name\n * @param {PolicyExportOptions} options export options\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function exportPoliciesToFile(\n file: string,\n options: PolicyExportOptions = { useStringArrays: true, deps: true }\n): Promise<boolean> {\n let outcome = false;\n debugMessage(`cli.PolicyOps.exportPoliciesToFile: begin`);\n showSpinner(`Exporting all policy sets...`);\n try {\n let fileName = getTypedFilename(\n `all${titleCase(getRealmName(state.getRealm()))}Policies`,\n 'policy.authz'\n );\n if (file) {\n fileName = file;\n }\n const exportData = await exportPolicies(options);\n saveJsonToFile(exportData, fileName);\n succeedSpinner(`Exported all policy sets to ${fileName}.`);\n outcome = true;\n } catch (error) {\n failSpinner(`Error exporting policy sets: ${error.message}`);\n }\n debugMessage(`cli.PolicyOps.exportPoliciesToFile: end`);\n return outcome;\n}\n\n/**\n * Export policies to file\n * @param {string} policySetId policy set id/name\n * @param {string} file file name\n * @param {PolicyExportOptions} options export options\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function exportPoliciesByPolicySetToFile(\n policySetId: string,\n file: string,\n options: PolicyExportOptions = { useStringArrays: true, deps: true }\n): Promise<boolean> {\n let outcome = false;\n debugMessage(`cli.PolicyOps.exportPoliciesToFile: begin`);\n showSpinner(`Exporting all policy sets...`);\n try {\n let fileName = getTypedFilename(\n `all${titleCase(getRealmName(state.getRealm()))}Policies`,\n 'policy.authz'\n );\n if (file) {\n fileName = file;\n }\n const exportData = await exportPoliciesByPolicySet(policySetId, options);\n saveJsonToFile(exportData, fileName);\n succeedSpinner(`Exported all policy sets to ${fileName}.`);\n outcome = true;\n } catch (error) {\n failSpinner(`Error exporting policy sets: ${error.message}`);\n }\n debugMessage(`cli.PolicyOps.exportPoliciesToFile: end`);\n return outcome;\n}\n\n/**\n * Export all policies to separate files\n * @param {PolicyExportOptions} options export options\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function exportPoliciesToFiles(\n options: PolicyExportOptions = { useStringArrays: true, deps: true }\n): Promise<boolean> {\n debugMessage(`cli.PolicyOps.exportPoliciesToFiles: begin`);\n const errors = [];\n try {\n const policies: PolicySkeleton[] = await getPolicies();\n createProgressBar(policies.length, 'Exporting policy sets...');\n for (const policy of policies) {\n const file = getTypedFilename(policy._id, 'policy.authz');\n try {\n const exportData: PolicyExportInterface = await exportPolicy(\n policy._id,\n options\n );\n saveJsonToFile(exportData, file);\n updateProgressBar(`Exported ${policy._id}.`);\n } catch (error) {\n errors.push(error);\n updateProgressBar(`Error exporting ${policy._id}.`);\n }\n }\n stopProgressBar(`Export complete.`);\n } catch (error) {\n errors.push(error);\n stopProgressBar(`Error exporting policy sets to files`);\n }\n debugMessage(`cli.PolicyOps.exportPoliciesToFiles: end`);\n return 0 === errors.length;\n}\n\n/**\n * Export all policies to separate files\n * @param {PolicyExportOptions} options export options\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function exportPoliciesByPolicySetToFiles(\n policySetId: string,\n options: PolicyExportOptions = { useStringArrays: true, deps: true }\n): Promise<boolean> {\n debugMessage(`cli.PolicyOps.exportPoliciesToFiles: begin`);\n const errors = [];\n try {\n const policies: PolicySkeleton[] = await getPoliciesByPolicySet(\n policySetId\n );\n createProgressBar(\n policies.length,\n `Exporting policies in policy set ${policySetId}...`\n );\n for (const policy of policies) {\n const file = getTypedFilename(policy._id, 'policy.authz');\n try {\n const exportData: PolicyExportInterface = await exportPolicy(\n policy._id,\n options\n );\n saveJsonToFile(exportData, file);\n updateProgressBar(`Exported ${policy._id}.`);\n } catch (error) {\n errors.push(error);\n updateProgressBar(`Error exporting ${policy._id}.`);\n }\n }\n stopProgressBar(`Export complete.`);\n } catch (error) {\n errors.push(error);\n stopProgressBar(`Error exporting policy sets to files`);\n }\n debugMessage(`cli.PolicyOps.exportPoliciesToFiles: end`);\n return 0 === errors.length;\n}\n\n/**\n * Import policy set from file\n * @param {string} policyId policy set name\n * @param {string} file file name\n * @param {PolicyImportOptions} options import options\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function importPolicyFromFile(\n policyId: string,\n file: string,\n options: PolicyImportOptions = { deps: true }\n): Promise<boolean> {\n let outcome = false;\n debugMessage(`cli.PolicyOps.importPolicyFromFile: begin`);\n showSpinner(`Importing ${policyId}...`);\n try {\n const data = fs.readFileSync(file, 'utf8');\n const fileData = JSON.parse(data);\n await importPolicy(policyId, fileData, options);\n outcome = true;\n succeedSpinner(`Imported ${policyId}.`);\n } catch (error) {\n failSpinner(`Error importing ${policyId}.`);\n printMessage(error, 'error');\n }\n debugMessage(`cli.PolicyOps.importPolicyFromFile: end`);\n return outcome;\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"PolicyOps.js","names":["fs","Policy","Utils","state","createObjectTable","createProgressBar","debugMessage","failSpinner","printMessage","showSpinner","stopProgressBar","succeedSpinner","updateProgressBar","getTypedFilename","saveJsonToFile","titleCase","deletePolicy","_deletePolicy","getPolicy","getPolicies","getPoliciesByPolicySet","exportPolicy","exportPolicies","exportPoliciesByPolicySet","importPolicy","importFirstPolicy","importPolicies","getRealmName","listPolicies","long","outcome","policies","sort","a","b","_id","localeCompare","policy","err","message","listPoliciesByPolicySet","policySetId","describePolicy","policyId","json","policySet","table","toString","errors","error","length","errorMessages","map","join","deletePolicies","push","deletePoliciesByPolicySet","exportPolicyToFile","file","options","useStringArrays","deps","fileName","exportData","exportPoliciesToFile","getRealm","exportPoliciesByPolicySetToFile","exportPoliciesToFiles","exportPoliciesByPolicySetToFiles","importPolicyFromFile","data","readFileSync","fileData","JSON","parse","importFirstPolicyFromFile","importPoliciesFromFile","importPoliciesFromFiles","names","readdirSync","files","filter","name","toLowerCase","endsWith","total","count","Object","keys","policyset"],"sources":["ops/PolicyOps.ts"],"sourcesContent":["import fs from 'fs';\nimport { PolicySkeleton } from '@rockcarver/frodo-lib/types/api/ApiTypes';\nimport { Policy, Utils, state } from '@rockcarver/frodo-lib';\nimport {\n createObjectTable,\n createProgressBar,\n debugMessage,\n failSpinner,\n printMessage,\n showSpinner,\n stopProgressBar,\n succeedSpinner,\n updateProgressBar,\n} from '../utils/Console';\nimport {\n getTypedFilename,\n saveJsonToFile,\n titleCase,\n} from '../utils/ExportImportUtils';\nimport {\n PolicyExportOptions,\n PolicyImportOptions,\n PolicyExportInterface,\n} from '@rockcarver/frodo-lib/types/ops/PolicyOps';\n\nconst {\n deletePolicy: _deletePolicy,\n getPolicy,\n getPolicies,\n getPoliciesByPolicySet,\n exportPolicy,\n exportPolicies,\n exportPoliciesByPolicySet,\n importPolicy,\n importFirstPolicy,\n importPolicies,\n} = Policy;\nconst { getRealmName } = Utils;\n\n/**\n * List policies\n * @param {boolean} long list with details\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function listPolicies(long = false): Promise<boolean> {\n let outcome = false;\n try {\n const policies = await getPolicies();\n policies.sort((a, b) => a._id.localeCompare(b._id));\n for (const policy of policies) {\n if (!long) {\n printMessage(`${policy._id}`, 'data');\n }\n }\n outcome = true;\n } catch (err) {\n printMessage(`listPolicies ERROR: ${err.message}`, 'error');\n printMessage(err, 'error');\n }\n return outcome;\n}\n\n/**\n * List policies by policy set\n * @param {string} policySetId policy set id/name\n * @param {boolean} long list with details\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function listPoliciesByPolicySet(\n policySetId: string,\n long = false\n): Promise<boolean> {\n let outcome = false;\n try {\n const policies = await getPoliciesByPolicySet(policySetId);\n policies.sort((a, b) => a._id.localeCompare(b._id));\n for (const policy of policies) {\n if (!long) {\n printMessage(`${policy._id}`, 'data');\n }\n }\n outcome = true;\n } catch (err) {\n printMessage(`listPolicies ERROR: ${err.message}`, 'error');\n printMessage(err, 'error');\n }\n return outcome;\n}\n\n/**\n * Describe policy\n * @param {string} policyId policy id/name\n * @param {Object} json JSON output\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function describePolicy(\n policyId: string,\n json = false\n): Promise<boolean> {\n let outcome = false;\n const policySet = await getPolicy(policyId);\n outcome = true;\n if (json) {\n printMessage(policySet, 'data');\n } else {\n const table = createObjectTable(policySet);\n printMessage(table.toString(), 'data');\n }\n return outcome;\n}\n\n/**\n * Delete policy\n * @param {string} policyId policy id/name\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function deletePolicy(policyId: string): Promise<boolean> {\n debugMessage(`cli.PolicyOps.deletePolicy: begin`);\n showSpinner(`Deleting ${policyId}...`);\n let outcome = false;\n const errors = [];\n try {\n debugMessage(`Deleting policy ${policyId}`);\n await _deletePolicy(policyId);\n } catch (error) {\n printMessage(`Error deleting policy ${policyId}: ${error}`, 'error');\n }\n if (errors.length) {\n const errorMessages = errors.map((error) => error.message).join('\\n');\n failSpinner(`Error deleting ${policyId}: ${errorMessages}`);\n } else {\n succeedSpinner(`Deleted ${policyId}.`);\n outcome = true;\n }\n debugMessage(`cli.PolicyOps.deletePolicy: end [outcome=${outcome}]`);\n return outcome;\n}\n\n/**\n * Delete all policies\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function deletePolicies(): Promise<boolean> {\n debugMessage(`cli.PolicyOps.deletePolicies: begin`);\n let outcome = false;\n const errors = [];\n let policies: PolicySkeleton[] = [];\n try {\n showSpinner(`Retrieving all policies...`);\n try {\n policies = await getPolicies();\n succeedSpinner(`Found ${policies.length} policies.`);\n } catch (error) {\n error.message = `Error retrieving all policies: ${error.message}`;\n failSpinner(error.message);\n throw error;\n }\n if (policies.length)\n createProgressBar(\n policies.length,\n `Deleting ${policies.length} policies...`\n );\n for (const policy of policies) {\n const policyId = policy._id;\n try {\n debugMessage(`Deleting policy ${policyId}`);\n await _deletePolicy(policyId);\n updateProgressBar(`Deleted ${policyId}`);\n } catch (error) {\n error.message = `Error deleting policy ${policyId}: ${error}`;\n updateProgressBar(error.message);\n errors.push(error);\n }\n }\n } catch (error) {\n error.message = `Error deleting policies: ${error}`;\n errors.push(error);\n } finally {\n if (errors.length) {\n const errorMessages = errors.map((error) => error.message).join('\\n');\n if (policies.length)\n stopProgressBar(`Error deleting all policies: ${errorMessages}`);\n } else {\n if (policies.length)\n stopProgressBar(`Deleted ${policies.length} policies.`);\n outcome = true;\n }\n }\n debugMessage(`cli.PolicyOps.deletePolicies: end [outcome=${outcome}]`);\n return outcome;\n}\n\n/**\n * Delete all policies in policy set\n * @param {string} policySetId policy set id/name\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function deletePoliciesByPolicySet(\n policySetId: string\n): Promise<boolean> {\n debugMessage(`cli.PolicyOps.deletePoliciesByPolicySet: begin`);\n let outcome = false;\n const errors = [];\n let policies: PolicySkeleton[] = [];\n try {\n showSpinner(`Retrieving all policies from policy set ${policySetId}...`);\n try {\n policies = await getPoliciesByPolicySet(policySetId);\n succeedSpinner(\n `Found ${policies.length} policies in policy set ${policySetId}.`\n );\n } catch (error) {\n error.message = `Error retrieving all policies from policy set ${policySetId}: ${error.message}`;\n failSpinner(error.message);\n throw error;\n }\n if (policies.length)\n createProgressBar(\n policies.length,\n `Deleting ${policies.length} policies from policy set ${policySetId}...`\n );\n for (const policy of policies) {\n const policyId = policy._id;\n try {\n debugMessage(`Deleting policy ${policyId}`);\n await _deletePolicy(policyId);\n updateProgressBar(`Deleted ${policyId}`);\n } catch (error) {\n error.message = `Error deleting policy ${policyId} from policy set ${policySetId}: ${error}`;\n updateProgressBar(error.message);\n errors.push(error);\n }\n }\n } catch (error) {\n error.message = `Error deleting policies from policy set ${policySetId}: ${error}`;\n errors.push(error);\n } finally {\n if (errors.length) {\n const errorMessages = errors.map((error) => error.message).join('\\n');\n if (policies.length)\n stopProgressBar(\n `Error deleting all policies from policy set ${policySetId}: ${errorMessages}`\n );\n } else {\n if (policies.length)\n stopProgressBar(`Deleted ${policies.length} policies.`);\n outcome = true;\n }\n }\n debugMessage(\n `cli.PolicyOps.deletePoliciesByPolicySet: end [outcome=${outcome}]`\n );\n return outcome;\n}\n\n/**\n * Export policy to file\n * @param {string} policyId policy id/name\n * @param {string} file file name\n * @param {ApplicationExportOptions} options export options\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function exportPolicyToFile(\n policyId: string,\n file: string,\n options: PolicyExportOptions = { useStringArrays: true, deps: true }\n): Promise<boolean> {\n let outcome = false;\n debugMessage(`cli.PolicyOps.exportPolicyToFile: begin`);\n showSpinner(`Exporting ${policyId}...`);\n try {\n let fileName = getTypedFilename(policyId, 'policy.authz');\n if (file) {\n fileName = file;\n }\n const exportData = await exportPolicy(policyId, options);\n saveJsonToFile(exportData, fileName);\n succeedSpinner(`Exported ${policyId} to ${fileName}.`);\n outcome = true;\n } catch (error) {\n failSpinner(`Error exporting ${policyId}: ${error.message}`);\n }\n debugMessage(`cli.PolicyOps.exportPolicyToFile: end`);\n return outcome;\n}\n\n/**\n * Export policies to file\n * @param {string} file file name\n * @param {PolicyExportOptions} options export options\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function exportPoliciesToFile(\n file: string,\n options: PolicyExportOptions = { useStringArrays: true, deps: true }\n): Promise<boolean> {\n let outcome = false;\n debugMessage(`cli.PolicyOps.exportPoliciesToFile: begin`);\n showSpinner(`Exporting all policy sets...`);\n try {\n let fileName = getTypedFilename(\n `all${titleCase(getRealmName(state.getRealm()))}Policies`,\n 'policy.authz'\n );\n if (file) {\n fileName = file;\n }\n const exportData = await exportPolicies(options);\n saveJsonToFile(exportData, fileName);\n succeedSpinner(`Exported all policy sets to ${fileName}.`);\n outcome = true;\n } catch (error) {\n failSpinner(`Error exporting policy sets: ${error.message}`);\n }\n debugMessage(`cli.PolicyOps.exportPoliciesToFile: end`);\n return outcome;\n}\n\n/**\n * Export policies to file\n * @param {string} policySetId policy set id/name\n * @param {string} file file name\n * @param {PolicyExportOptions} options export options\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function exportPoliciesByPolicySetToFile(\n policySetId: string,\n file: string,\n options: PolicyExportOptions = { useStringArrays: true, deps: true }\n): Promise<boolean> {\n let outcome = false;\n debugMessage(`cli.PolicyOps.exportPoliciesToFile: begin`);\n showSpinner(`Exporting all policy sets...`);\n try {\n let fileName = getTypedFilename(\n `all${titleCase(getRealmName(state.getRealm()))}Policies`,\n 'policy.authz'\n );\n if (file) {\n fileName = file;\n }\n const exportData = await exportPoliciesByPolicySet(policySetId, options);\n saveJsonToFile(exportData, fileName);\n succeedSpinner(`Exported all policy sets to ${fileName}.`);\n outcome = true;\n } catch (error) {\n failSpinner(`Error exporting policy sets: ${error.message}`);\n }\n debugMessage(`cli.PolicyOps.exportPoliciesToFile: end`);\n return outcome;\n}\n\n/**\n * Export all policies to separate files\n * @param {PolicyExportOptions} options export options\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function exportPoliciesToFiles(\n options: PolicyExportOptions = { useStringArrays: true, deps: true }\n): Promise<boolean> {\n debugMessage(`cli.PolicyOps.exportPoliciesToFiles: begin`);\n const errors = [];\n try {\n const policies: PolicySkeleton[] = await getPolicies();\n createProgressBar(policies.length, 'Exporting policy sets...');\n for (const policy of policies) {\n const file = getTypedFilename(policy._id, 'policy.authz');\n try {\n const exportData: PolicyExportInterface = await exportPolicy(\n policy._id,\n options\n );\n saveJsonToFile(exportData, file);\n updateProgressBar(`Exported ${policy._id}.`);\n } catch (error) {\n errors.push(error);\n updateProgressBar(`Error exporting ${policy._id}.`);\n }\n }\n stopProgressBar(`Export complete.`);\n } catch (error) {\n errors.push(error);\n stopProgressBar(`Error exporting policy sets to files`);\n }\n debugMessage(`cli.PolicyOps.exportPoliciesToFiles: end`);\n return 0 === errors.length;\n}\n\n/**\n * Export all policies to separate files\n * @param {PolicyExportOptions} options export options\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function exportPoliciesByPolicySetToFiles(\n policySetId: string,\n options: PolicyExportOptions = { useStringArrays: true, deps: true }\n): Promise<boolean> {\n debugMessage(`cli.PolicyOps.exportPoliciesToFiles: begin`);\n const errors = [];\n try {\n const policies: PolicySkeleton[] = await getPoliciesByPolicySet(\n policySetId\n );\n createProgressBar(\n policies.length,\n `Exporting policies in policy set ${policySetId}...`\n );\n for (const policy of policies) {\n const file = getTypedFilename(policy._id, 'policy.authz');\n try {\n const exportData: PolicyExportInterface = await exportPolicy(\n policy._id,\n options\n );\n saveJsonToFile(exportData, file);\n updateProgressBar(`Exported ${policy._id}.`);\n } catch (error) {\n errors.push(error);\n updateProgressBar(`Error exporting ${policy._id}.`);\n }\n }\n stopProgressBar(`Export complete.`);\n } catch (error) {\n errors.push(error);\n stopProgressBar(`Error exporting policy sets to files`);\n }\n debugMessage(`cli.PolicyOps.exportPoliciesToFiles: end`);\n return 0 === errors.length;\n}\n\n/**\n * Import policy from file\n * @param {string} policyId policy id/name\n * @param {string} file file name\n * @param {PolicyImportOptions} options import options\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function importPolicyFromFile(\n policyId: string,\n file: string,\n options: PolicyImportOptions = { deps: true }\n): Promise<boolean> {\n let outcome = false;\n debugMessage(`cli.PolicyOps.importPolicyFromFile: begin`);\n showSpinner(`Importing ${policyId}...`);\n try {\n const data = fs.readFileSync(file, 'utf8');\n const fileData = JSON.parse(data);\n await importPolicy(policyId, fileData, options);\n outcome = true;\n succeedSpinner(`Imported ${policyId}.`);\n } catch (error) {\n failSpinner(`Error importing ${policyId}.`);\n printMessage(error, 'error');\n }\n debugMessage(`cli.PolicyOps.importPolicyFromFile: end`);\n return outcome;\n}\n\n/**\n * Import first policy from file\n * @param {string} file file name\n * @param {PolicyImportOptions} options import options\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function importFirstPolicyFromFile(\n file: string,\n options: PolicyImportOptions = { deps: true }\n): Promise<boolean> {\n let outcome = false;\n debugMessage(`cli.PolicySetOps.importFirstPolicyFromFile: begin`);\n showSpinner(`Importing ${file}...`);\n try {\n const data = fs.readFileSync(file, 'utf8');\n const fileData = JSON.parse(data);\n await importFirstPolicy(fileData, options);\n outcome = true;\n succeedSpinner(`Imported ${file}.`);\n } catch (error) {\n failSpinner(`Error importing ${file}.`);\n printMessage(error, 'error');\n }\n debugMessage(`cli.PolicySetOps.importFirstPolicyFromFile: end`);\n return outcome;\n}\n\n/**\n * Import policies from file\n * @param {string} file file name\n * @param {PolicyImportOptions} options import options\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function importPoliciesFromFile(\n file: string,\n options: PolicyImportOptions = { deps: true }\n): Promise<boolean> {\n let outcome = false;\n debugMessage(`cli.PolicyOps.importPoliciesFromFile: begin`);\n showSpinner(`Importing ${file}...`);\n try {\n const data = fs.readFileSync(file, 'utf8');\n const fileData = JSON.parse(data);\n await importPolicies(fileData, options);\n outcome = true;\n succeedSpinner(`Imported ${file}.`);\n } catch (error) {\n failSpinner(`Error importing ${file}.`);\n printMessage(error, 'error');\n }\n debugMessage(`cli.PolicyOps.importPoliciesFromFile: end`);\n return outcome;\n}\n\n/**\n * Import policies from files\n * @param {PolicyImportOptions} options import options\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function importPoliciesFromFiles(\n options: PolicyImportOptions = { deps: true }\n): Promise<boolean> {\n const errors = [];\n try {\n debugMessage(`cli.PolicyOps.importPoliciesFromFiles: begin`);\n const names = fs.readdirSync('.');\n const files = names.filter((name) =>\n name.toLowerCase().endsWith('.policy.authz.json')\n );\n createProgressBar(files.length, 'Importing policies...');\n let total = 0;\n for (const file of files) {\n try {\n const data = fs.readFileSync(file, 'utf8');\n const fileData: PolicyExportInterface = JSON.parse(data);\n const count = Object.keys(fileData.policyset).length;\n total += count;\n await importPolicies(fileData, options);\n updateProgressBar(`Imported ${count} policies from ${file}`);\n } catch (error) {\n errors.push(error);\n updateProgressBar(`Error importing policies from ${file}`);\n printMessage(error, 'error');\n }\n }\n stopProgressBar(\n `Finished importing ${total} policies from ${files.length} files.`\n );\n } catch (error) {\n errors.push(error);\n stopProgressBar(`Error importing policies from files.`);\n printMessage(error, 'error');\n }\n debugMessage(`cli.PolicyOps.importPoliciesFromFiles: end`);\n return 0 === errors.length;\n}\n"],"mappings":"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"}
|