@rockcarver/frodo-cli 0.23.1-4 → 0.23.1-5

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.
Files changed (56) hide show
  1. package/CHANGELOG.md +5 -1
  2. package/esm/app.js +2 -0
  3. package/esm/app.js.map +1 -1
  4. package/esm/cli/admin/admin-create-oauth2-client-with-admin-privileges.js +13 -6
  5. package/esm/cli/admin/admin-create-oauth2-client-with-admin-privileges.js.map +1 -1
  6. package/esm/cli/authz/authz-policy-delete.js +43 -0
  7. package/esm/cli/authz/authz-policy-delete.js.map +1 -0
  8. package/esm/cli/authz/authz-policy-describe.js +30 -0
  9. package/esm/cli/authz/authz-policy-describe.js.map +1 -0
  10. package/esm/cli/authz/authz-policy-export.js +70 -0
  11. package/esm/cli/authz/authz-policy-export.js.map +1 -0
  12. package/esm/cli/authz/authz-policy-import.js +26 -0
  13. package/esm/cli/authz/authz-policy-import.js.map +1 -0
  14. package/esm/cli/authz/authz-policy-list.js +37 -0
  15. package/esm/cli/authz/authz-policy-list.js.map +1 -0
  16. package/esm/cli/authz/authz-policy.js +10 -0
  17. package/esm/cli/authz/authz-policy.js.map +1 -0
  18. package/esm/cli/authz/authz-set-delete.js +37 -0
  19. package/esm/cli/authz/authz-set-delete.js.map +1 -0
  20. package/esm/cli/authz/authz-set-describe.js +30 -0
  21. package/esm/cli/authz/authz-set-describe.js.map +1 -0
  22. package/esm/cli/authz/authz-set-export.js +52 -0
  23. package/esm/cli/authz/authz-set-export.js.map +1 -0
  24. package/esm/cli/authz/authz-set-import.js +57 -0
  25. package/esm/cli/authz/authz-set-import.js.map +1 -0
  26. package/esm/cli/authz/authz-set-list.js +25 -0
  27. package/esm/cli/authz/authz-set-list.js.map +1 -0
  28. package/esm/cli/authz/authz-set.js +10 -0
  29. package/esm/cli/authz/authz-set.js.map +1 -0
  30. package/esm/cli/authz/authz-type-delete.js +38 -0
  31. package/esm/cli/authz/authz-type-delete.js.map +1 -0
  32. package/esm/cli/authz/authz-type-describe.js +30 -0
  33. package/esm/cli/authz/authz-type-describe.js.map +1 -0
  34. package/esm/cli/authz/authz-type-export.js +22 -0
  35. package/esm/cli/authz/authz-type-export.js.map +1 -0
  36. package/esm/cli/authz/authz-type-import.js +22 -0
  37. package/esm/cli/authz/authz-type-import.js.map +1 -0
  38. package/esm/cli/authz/authz-type-list.js +32 -0
  39. package/esm/cli/authz/authz-type-list.js.map +1 -0
  40. package/esm/cli/authz/authz-type.js +10 -0
  41. package/esm/cli/authz/authz-type.js.map +1 -0
  42. package/esm/cli/authz/authz.js +12 -0
  43. package/esm/cli/authz/authz.js.map +1 -0
  44. package/esm/cli/idm/idm-import.js +8 -3
  45. package/esm/cli/idm/idm-import.js.map +1 -1
  46. package/esm/ops/IdmOps.js +25 -2
  47. package/esm/ops/IdmOps.js.map +1 -1
  48. package/esm/ops/PolicyOps.js +392 -0
  49. package/esm/ops/PolicyOps.js.map +1 -0
  50. package/esm/ops/PolicySetOps.js +373 -0
  51. package/esm/ops/PolicySetOps.js.map +1 -0
  52. package/esm/ops/ResourceTypeOps.js +323 -0
  53. package/esm/ops/ResourceTypeOps.js.map +1 -0
  54. package/esm/utils/Console.js +2 -0
  55. package/esm/utils/Console.js.map +1 -1
  56. package/package.json +2 -2
@@ -0,0 +1,392 @@
1
+ import fs from 'fs';
2
+ import { Policy, Utils, state } from '@rockcarver/frodo-lib';
3
+ import { createObjectTable, createProgressBar, debugMessage, failSpinner, printMessage, showSpinner, stopProgressBar, succeedSpinner, updateProgressBar } from '../utils/Console';
4
+ import { getTypedFilename, saveJsonToFile, titleCase } from '../utils/ExportImportUtils';
5
+ const {
6
+ deletePolicy: _deletePolicy,
7
+ getPolicy,
8
+ getPolicies,
9
+ getPoliciesByPolicySet,
10
+ exportPolicy,
11
+ exportPolicies,
12
+ exportPoliciesByPolicySet,
13
+ importPolicy
14
+ } = Policy;
15
+ const {
16
+ getRealmName
17
+ } = Utils;
18
+
19
+ /**
20
+ * List policies
21
+ * @param {boolean} long list with details
22
+ * @returns {Promise<boolean>} true if successful, false otherwise
23
+ */
24
+ export async function listPolicies(long = false) {
25
+ let outcome = false;
26
+ try {
27
+ const policies = await getPolicies();
28
+ policies.sort((a, b) => a._id.localeCompare(b._id));
29
+ for (const policy of policies) {
30
+ if (!long) {
31
+ printMessage(`${policy._id}`, 'data');
32
+ }
33
+ }
34
+ outcome = true;
35
+ } catch (err) {
36
+ printMessage(`listPolicies ERROR: ${err.message}`, 'error');
37
+ printMessage(err, 'error');
38
+ }
39
+ return outcome;
40
+ }
41
+
42
+ /**
43
+ * List policies by policy set
44
+ * @param {string} policySetId policy set id/name
45
+ * @param {boolean} long list with details
46
+ * @returns {Promise<boolean>} true if successful, false otherwise
47
+ */
48
+ export async function listPoliciesByPolicySet(policySetId, long = false) {
49
+ let outcome = false;
50
+ try {
51
+ const policies = await getPoliciesByPolicySet(policySetId);
52
+ policies.sort((a, b) => a._id.localeCompare(b._id));
53
+ for (const policy of policies) {
54
+ if (!long) {
55
+ printMessage(`${policy._id}`, 'data');
56
+ }
57
+ }
58
+ outcome = true;
59
+ } catch (err) {
60
+ printMessage(`listPolicies ERROR: ${err.message}`, 'error');
61
+ printMessage(err, 'error');
62
+ }
63
+ return outcome;
64
+ }
65
+
66
+ /**
67
+ * Describe policy
68
+ * @param {string} policyId policy id/name
69
+ * @param {Object} json JSON output
70
+ * @returns {Promise<boolean>} true if successful, false otherwise
71
+ */
72
+ export async function describePolicy(policyId, json = false) {
73
+ let outcome = false;
74
+ const policySet = await getPolicy(policyId);
75
+ outcome = true;
76
+ if (json) {
77
+ printMessage(policySet, 'data');
78
+ } else {
79
+ const table = createObjectTable(policySet);
80
+ printMessage(table.toString(), 'data');
81
+ }
82
+ return outcome;
83
+ }
84
+
85
+ /**
86
+ * Delete policy
87
+ * @param {string} policyId policy id/name
88
+ * @returns {Promise<boolean>} true if successful, false otherwise
89
+ */
90
+ export async function deletePolicy(policyId) {
91
+ debugMessage(`cli.PolicyOps.deletePolicy: begin`);
92
+ showSpinner(`Deleting ${policyId}...`);
93
+ let outcome = false;
94
+ const errors = [];
95
+ try {
96
+ debugMessage(`Deleting policy ${policyId}`);
97
+ await _deletePolicy(policyId);
98
+ } catch (error) {
99
+ printMessage(`Error deleting policy ${policyId}: ${error}`, 'error');
100
+ }
101
+ if (errors.length) {
102
+ const errorMessages = errors.map(error => error.message).join('\n');
103
+ failSpinner(`Error deleting ${policyId}: ${errorMessages}`);
104
+ } else {
105
+ succeedSpinner(`Deleted ${policyId}.`);
106
+ outcome = true;
107
+ }
108
+ debugMessage(`cli.PolicyOps.deletePolicy: end [outcome=${outcome}]`);
109
+ return outcome;
110
+ }
111
+
112
+ /**
113
+ * Delete all policies
114
+ * @returns {Promise<boolean>} true if successful, false otherwise
115
+ */
116
+ export async function deletePolicies() {
117
+ debugMessage(`cli.PolicyOps.deletePolicies: begin`);
118
+ let outcome = false;
119
+ const errors = [];
120
+ let policies = [];
121
+ try {
122
+ showSpinner(`Retrieving all policies...`);
123
+ try {
124
+ policies = await getPolicies();
125
+ succeedSpinner(`Found ${policies.length} policies.`);
126
+ } catch (error) {
127
+ error.message = `Error retrieving all policies: ${error.message}`;
128
+ failSpinner(error.message);
129
+ throw error;
130
+ }
131
+ if (policies.length) createProgressBar(policies.length, `Deleting ${policies.length} policies...`);
132
+ for (const policy of policies) {
133
+ const policyId = policy._id;
134
+ try {
135
+ debugMessage(`Deleting policy ${policyId}`);
136
+ await _deletePolicy(policyId);
137
+ updateProgressBar(`Deleted ${policyId}`);
138
+ } catch (error) {
139
+ error.message = `Error deleting policy ${policyId}: ${error}`;
140
+ updateProgressBar(error.message);
141
+ errors.push(error);
142
+ }
143
+ }
144
+ } catch (error) {
145
+ error.message = `Error deleting policies: ${error}`;
146
+ errors.push(error);
147
+ } finally {
148
+ if (errors.length) {
149
+ const errorMessages = errors.map(error => error.message).join('\n');
150
+ if (policies.length) stopProgressBar(`Error deleting all policies: ${errorMessages}`);
151
+ } else {
152
+ if (policies.length) stopProgressBar(`Deleted ${policies.length} policies.`);
153
+ outcome = true;
154
+ }
155
+ }
156
+ debugMessage(`cli.PolicyOps.deletePolicies: end [outcome=${outcome}]`);
157
+ return outcome;
158
+ }
159
+
160
+ /**
161
+ * Delete all policies in policy set
162
+ * @param {string} policySetId policy set id/name
163
+ * @returns {Promise<boolean>} true if successful, false otherwise
164
+ */
165
+ export async function deletePoliciesByPolicySet(policySetId) {
166
+ debugMessage(`cli.PolicyOps.deletePoliciesByPolicySet: begin`);
167
+ let outcome = false;
168
+ const errors = [];
169
+ let policies = [];
170
+ try {
171
+ showSpinner(`Retrieving all policies from policy set ${policySetId}...`);
172
+ try {
173
+ policies = await getPoliciesByPolicySet(policySetId);
174
+ succeedSpinner(`Found ${policies.length} policies in policy set ${policySetId}.`);
175
+ } catch (error) {
176
+ error.message = `Error retrieving all policies from policy set ${policySetId}: ${error.message}`;
177
+ failSpinner(error.message);
178
+ throw error;
179
+ }
180
+ if (policies.length) createProgressBar(policies.length, `Deleting ${policies.length} policies from policy set ${policySetId}...`);
181
+ for (const policy of policies) {
182
+ const policyId = policy._id;
183
+ try {
184
+ debugMessage(`Deleting policy ${policyId}`);
185
+ await _deletePolicy(policyId);
186
+ updateProgressBar(`Deleted ${policyId}`);
187
+ } catch (error) {
188
+ error.message = `Error deleting policy ${policyId} from policy set ${policySetId}: ${error}`;
189
+ updateProgressBar(error.message);
190
+ errors.push(error);
191
+ }
192
+ }
193
+ } catch (error) {
194
+ error.message = `Error deleting policies from policy set ${policySetId}: ${error}`;
195
+ errors.push(error);
196
+ } finally {
197
+ if (errors.length) {
198
+ const errorMessages = errors.map(error => error.message).join('\n');
199
+ if (policies.length) stopProgressBar(`Error deleting all policies from policy set ${policySetId}: ${errorMessages}`);
200
+ } else {
201
+ if (policies.length) stopProgressBar(`Deleted ${policies.length} policies.`);
202
+ outcome = true;
203
+ }
204
+ }
205
+ debugMessage(`cli.PolicyOps.deletePoliciesByPolicySet: end [outcome=${outcome}]`);
206
+ return outcome;
207
+ }
208
+
209
+ /**
210
+ * Export policy to file
211
+ * @param {string} policyId policy id/name
212
+ * @param {string} file file name
213
+ * @param {ApplicationExportOptions} options export options
214
+ * @returns {Promise<boolean>} true if successful, false otherwise
215
+ */
216
+ export async function exportPolicyToFile(policyId, file, options = {
217
+ useStringArrays: true,
218
+ deps: true
219
+ }) {
220
+ let outcome = false;
221
+ debugMessage(`cli.PolicyOps.exportPolicyToFile: begin`);
222
+ showSpinner(`Exporting ${policyId}...`);
223
+ try {
224
+ let fileName = getTypedFilename(policyId, 'policy.authz');
225
+ if (file) {
226
+ fileName = file;
227
+ }
228
+ const exportData = await exportPolicy(policyId, options);
229
+ saveJsonToFile(exportData, fileName);
230
+ succeedSpinner(`Exported ${policyId} to ${fileName}.`);
231
+ outcome = true;
232
+ } catch (error) {
233
+ failSpinner(`Error exporting ${policyId}: ${error.message}`);
234
+ }
235
+ debugMessage(`cli.PolicyOps.exportPolicyToFile: end`);
236
+ return outcome;
237
+ }
238
+
239
+ /**
240
+ * Export policies to file
241
+ * @param {string} file file name
242
+ * @param {PolicyExportOptions} options export options
243
+ * @returns {Promise<boolean>} true if successful, false otherwise
244
+ */
245
+ export async function exportPoliciesToFile(file, options = {
246
+ useStringArrays: true,
247
+ deps: true
248
+ }) {
249
+ let outcome = false;
250
+ debugMessage(`cli.PolicyOps.exportPoliciesToFile: begin`);
251
+ showSpinner(`Exporting all policy sets...`);
252
+ try {
253
+ let fileName = getTypedFilename(`all${titleCase(getRealmName(state.getRealm()))}Policies`, 'policy.authz');
254
+ if (file) {
255
+ fileName = file;
256
+ }
257
+ const exportData = await exportPolicies(options);
258
+ saveJsonToFile(exportData, fileName);
259
+ succeedSpinner(`Exported all policy sets to ${fileName}.`);
260
+ outcome = true;
261
+ } catch (error) {
262
+ failSpinner(`Error exporting policy sets: ${error.message}`);
263
+ }
264
+ debugMessage(`cli.PolicyOps.exportPoliciesToFile: end`);
265
+ return outcome;
266
+ }
267
+
268
+ /**
269
+ * Export policies to file
270
+ * @param {string} policySetId policy set id/name
271
+ * @param {string} file file name
272
+ * @param {PolicyExportOptions} options export options
273
+ * @returns {Promise<boolean>} true if successful, false otherwise
274
+ */
275
+ export async function exportPoliciesByPolicySetToFile(policySetId, file, options = {
276
+ useStringArrays: true,
277
+ deps: true
278
+ }) {
279
+ let outcome = false;
280
+ debugMessage(`cli.PolicyOps.exportPoliciesToFile: begin`);
281
+ showSpinner(`Exporting all policy sets...`);
282
+ try {
283
+ let fileName = getTypedFilename(`all${titleCase(getRealmName(state.getRealm()))}Policies`, 'policy.authz');
284
+ if (file) {
285
+ fileName = file;
286
+ }
287
+ const exportData = await exportPoliciesByPolicySet(policySetId, options);
288
+ saveJsonToFile(exportData, fileName);
289
+ succeedSpinner(`Exported all policy sets to ${fileName}.`);
290
+ outcome = true;
291
+ } catch (error) {
292
+ failSpinner(`Error exporting policy sets: ${error.message}`);
293
+ }
294
+ debugMessage(`cli.PolicyOps.exportPoliciesToFile: end`);
295
+ return outcome;
296
+ }
297
+
298
+ /**
299
+ * Export all policies to separate files
300
+ * @param {PolicyExportOptions} options export options
301
+ * @returns {Promise<boolean>} true if successful, false otherwise
302
+ */
303
+ export async function exportPoliciesToFiles(options = {
304
+ useStringArrays: true,
305
+ deps: true
306
+ }) {
307
+ debugMessage(`cli.PolicyOps.exportPoliciesToFiles: begin`);
308
+ const errors = [];
309
+ try {
310
+ const policies = await getPolicies();
311
+ createProgressBar(policies.length, 'Exporting policy sets...');
312
+ for (const policy of policies) {
313
+ const file = getTypedFilename(policy._id, 'policy.authz');
314
+ try {
315
+ const exportData = await exportPolicy(policy._id, options);
316
+ saveJsonToFile(exportData, file);
317
+ updateProgressBar(`Exported ${policy._id}.`);
318
+ } catch (error) {
319
+ errors.push(error);
320
+ updateProgressBar(`Error exporting ${policy._id}.`);
321
+ }
322
+ }
323
+ stopProgressBar(`Export complete.`);
324
+ } catch (error) {
325
+ errors.push(error);
326
+ stopProgressBar(`Error exporting policy sets to files`);
327
+ }
328
+ debugMessage(`cli.PolicyOps.exportPoliciesToFiles: end`);
329
+ return 0 === errors.length;
330
+ }
331
+
332
+ /**
333
+ * Export all policies to separate files
334
+ * @param {PolicyExportOptions} options export options
335
+ * @returns {Promise<boolean>} true if successful, false otherwise
336
+ */
337
+ export async function exportPoliciesByPolicySetToFiles(policySetId, options = {
338
+ useStringArrays: true,
339
+ deps: true
340
+ }) {
341
+ debugMessage(`cli.PolicyOps.exportPoliciesToFiles: begin`);
342
+ const errors = [];
343
+ try {
344
+ const policies = await getPoliciesByPolicySet(policySetId);
345
+ createProgressBar(policies.length, `Exporting policies in policy set ${policySetId}...`);
346
+ for (const policy of policies) {
347
+ const file = getTypedFilename(policy._id, 'policy.authz');
348
+ try {
349
+ const exportData = await exportPolicy(policy._id, options);
350
+ saveJsonToFile(exportData, file);
351
+ updateProgressBar(`Exported ${policy._id}.`);
352
+ } catch (error) {
353
+ errors.push(error);
354
+ updateProgressBar(`Error exporting ${policy._id}.`);
355
+ }
356
+ }
357
+ stopProgressBar(`Export complete.`);
358
+ } catch (error) {
359
+ errors.push(error);
360
+ stopProgressBar(`Error exporting policy sets to files`);
361
+ }
362
+ debugMessage(`cli.PolicyOps.exportPoliciesToFiles: end`);
363
+ return 0 === errors.length;
364
+ }
365
+
366
+ /**
367
+ * Import policy set from file
368
+ * @param {string} policyId policy set name
369
+ * @param {string} file file name
370
+ * @param {PolicyImportOptions} options import options
371
+ * @returns {Promise<boolean>} true if successful, false otherwise
372
+ */
373
+ export async function importPolicyFromFile(policyId, file, options = {
374
+ deps: true
375
+ }) {
376
+ let outcome = false;
377
+ debugMessage(`cli.PolicyOps.importPolicyFromFile: begin`);
378
+ showSpinner(`Importing ${policyId}...`);
379
+ try {
380
+ const data = fs.readFileSync(file, 'utf8');
381
+ const fileData = JSON.parse(data);
382
+ await importPolicy(policyId, fileData, options);
383
+ outcome = true;
384
+ succeedSpinner(`Imported ${policyId}.`);
385
+ } catch (error) {
386
+ failSpinner(`Error importing ${policyId}.`);
387
+ printMessage(error, 'error');
388
+ }
389
+ debugMessage(`cli.PolicyOps.importPolicyFromFile: end`);
390
+ return outcome;
391
+ }
392
+ //# sourceMappingURL=PolicyOps.js.map
@@ -0,0 +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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"}