@cloud-copilot/iam-expand 0.6.0 → 0.7.0-rc2
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/dist/cjs/cli.js +42 -6
- package/dist/cjs/cli.js.map +1 -1
- package/dist/cjs/cli_utils.d.ts +3 -1
- package/dist/cjs/cli_utils.d.ts.map +1 -1
- package/dist/cjs/cli_utils.js.map +1 -1
- package/dist/cjs/expand.d.ts +0 -6
- package/dist/cjs/expand.d.ts.map +1 -1
- package/dist/cjs/expand.js +6 -11
- package/dist/cjs/expand.js.map +1 -1
- package/dist/cjs/expand_file.d.ts +4 -1
- package/dist/cjs/expand_file.d.ts.map +1 -1
- package/dist/cjs/expand_file.js +19 -4
- package/dist/cjs/expand_file.js.map +1 -1
- package/dist/cjs/invert.d.ts +4 -0
- package/dist/cjs/invert.d.ts.map +1 -0
- package/dist/cjs/invert.js +54 -0
- package/dist/cjs/invert.js.map +1 -0
- package/dist/cjs/util.d.ts +3 -0
- package/dist/cjs/util.d.ts.map +1 -0
- package/dist/cjs/util.js +10 -0
- package/dist/cjs/util.js.map +1 -0
- package/dist/esm/cli.js +42 -6
- package/dist/esm/cli.js.map +1 -1
- package/dist/esm/cli_utils.d.ts +3 -1
- package/dist/esm/cli_utils.d.ts.map +1 -1
- package/dist/esm/cli_utils.js.map +1 -1
- package/dist/esm/expand.d.ts +0 -6
- package/dist/esm/expand.d.ts.map +1 -1
- package/dist/esm/expand.js +4 -9
- package/dist/esm/expand.js.map +1 -1
- package/dist/esm/expand_file.d.ts +4 -1
- package/dist/esm/expand_file.d.ts.map +1 -1
- package/dist/esm/expand_file.js +19 -4
- package/dist/esm/expand_file.js.map +1 -1
- package/dist/esm/invert.d.ts +4 -0
- package/dist/esm/invert.d.ts.map +1 -0
- package/dist/esm/invert.js +51 -0
- package/dist/esm/invert.js.map +1 -0
- package/dist/esm/util.d.ts +3 -0
- package/dist/esm/util.d.ts.map +1 -0
- package/dist/esm/util.js +6 -0
- package/dist/esm/util.js.map +1 -0
- package/package.json +2 -2
package/dist/cjs/cli.js
CHANGED
|
@@ -4,11 +4,17 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
4
4
|
const iam_data_1 = require("@cloud-copilot/iam-data");
|
|
5
5
|
const cli_utils_js_1 = require("./cli_utils.js");
|
|
6
6
|
const expand_js_1 = require("./expand.js");
|
|
7
|
+
const invert_js_1 = require("./invert.js");
|
|
7
8
|
const commandName = 'iam-expand';
|
|
8
9
|
const dataPackage = '@cloud-copilot/iam-data';
|
|
9
|
-
|
|
10
|
+
/**
|
|
11
|
+
* Run a function and print the results to the console
|
|
12
|
+
*
|
|
13
|
+
* @param func the function to run
|
|
14
|
+
*/
|
|
15
|
+
async function runAndPrint(func) {
|
|
10
16
|
try {
|
|
11
|
-
const result = await (
|
|
17
|
+
const result = await func();
|
|
12
18
|
for (const action of result) {
|
|
13
19
|
console.log(action);
|
|
14
20
|
}
|
|
@@ -18,6 +24,9 @@ async function expandAndPrint(actionStrings, options) {
|
|
|
18
24
|
process.exit(1);
|
|
19
25
|
}
|
|
20
26
|
}
|
|
27
|
+
/**
|
|
28
|
+
* Print the usage of the CLI to the console
|
|
29
|
+
*/
|
|
21
30
|
function printUsage() {
|
|
22
31
|
console.log('No arguments provided or input from stdin.');
|
|
23
32
|
console.log('Usage:');
|
|
@@ -25,19 +34,31 @@ function printUsage() {
|
|
|
25
34
|
console.log(` <input from stdout> | ${commandName} [options]`);
|
|
26
35
|
console.log('Action Expanding Options:');
|
|
27
36
|
console.log(' --expand-asterisk: Expand the * action to all actions');
|
|
28
|
-
console.log(' --expand-service-asterisk: Expand service:* to all actions for that service');
|
|
29
37
|
console.log(' --error-on-invalid-format: Throw an error if the action string is not in the correct format');
|
|
30
38
|
console.log(' --error-on-invalid-service: Throw an error if a service is not found');
|
|
31
39
|
console.log(' --invalid-action-behavior: What to do when an invalid action is encountered:');
|
|
32
40
|
console.log(' --invalid-action-behavior=remove: Remove the invalid action');
|
|
33
41
|
console.log(' --invalid-action-behavior=include: Include the invalid action');
|
|
34
42
|
console.log(' --invalid-action-behavior=error: Throw an error if an invalid action is encountered');
|
|
43
|
+
console.log('Inverting Actions:');
|
|
44
|
+
console.log(' --invert: If not JSON, print the inverse of the actions provided');
|
|
45
|
+
console.log(' --invert-not-actions: If JSON, replace NotAction strings or arrays with Action arrays that have the inverse actions');
|
|
35
46
|
console.log('CLI Behavior Options:');
|
|
36
47
|
console.log(' --show-data-version: Print the version of the iam-data package being used and exit');
|
|
37
48
|
console.log(' --read-wait-ms: Millisenconds to wait for the first byte from stdin before timing out.');
|
|
38
49
|
console.log(' Example: --read-wait-ms=10_000');
|
|
39
50
|
process.exit(1);
|
|
40
51
|
}
|
|
52
|
+
/**
|
|
53
|
+
* Print a list of warnings to the console
|
|
54
|
+
*
|
|
55
|
+
* @param warnings the list of warnings to print
|
|
56
|
+
*/
|
|
57
|
+
function printWarnings(warnings) {
|
|
58
|
+
for (const warning of warnings) {
|
|
59
|
+
console.warn(`Notice: ${warning}`);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
41
62
|
const args = process.argv.slice(2); // Ignore the first two elements
|
|
42
63
|
const actionStrings = [];
|
|
43
64
|
const optionStrings = [];
|
|
@@ -61,23 +82,38 @@ async function run() {
|
|
|
61
82
|
console.log(` npm update -g ${dataPackage}`);
|
|
62
83
|
return;
|
|
63
84
|
}
|
|
85
|
+
const warnings = [];
|
|
64
86
|
if (actionStrings.length === 0) {
|
|
65
87
|
//If no actions are provided, read from stdin
|
|
66
88
|
const stdInResult = await (0, cli_utils_js_1.parseStdIn)(options);
|
|
67
89
|
if (stdInResult.object) {
|
|
68
90
|
console.log(JSON.stringify(stdInResult.object, null, 2));
|
|
91
|
+
if (options.invert) {
|
|
92
|
+
printWarnings(['--invert is not supported when processing JSON, ignoring. Did you mean --invert-not-actions ?']);
|
|
93
|
+
}
|
|
69
94
|
return;
|
|
70
95
|
}
|
|
71
96
|
else if (stdInResult.strings) {
|
|
72
97
|
const otherActions = stdInResult.strings;
|
|
73
|
-
if (otherActions.length > 0
|
|
74
|
-
|
|
98
|
+
if (otherActions.length > 0) {
|
|
99
|
+
if (options.expandAsterisk) {
|
|
100
|
+
warnings.push('--expand-asterisk is not supported when reading from stdin, ignoring.');
|
|
101
|
+
}
|
|
75
102
|
}
|
|
76
103
|
actionStrings.push(...otherActions);
|
|
77
104
|
}
|
|
78
105
|
}
|
|
79
106
|
if (actionStrings.length > 0) {
|
|
80
|
-
|
|
107
|
+
if (options.invertNotActions) {
|
|
108
|
+
warnings.push('--invert-not-actions is only supported when processing JSON, ignoring.');
|
|
109
|
+
}
|
|
110
|
+
if (options.invert) {
|
|
111
|
+
await runAndPrint(() => (0, invert_js_1.invert)(actionStrings, options));
|
|
112
|
+
}
|
|
113
|
+
else {
|
|
114
|
+
await runAndPrint(() => (0, expand_js_1.expandIamActions)(actionStrings, options));
|
|
115
|
+
}
|
|
116
|
+
printWarnings(warnings);
|
|
81
117
|
return;
|
|
82
118
|
}
|
|
83
119
|
printUsage();
|
package/dist/cjs/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":";;;AAEA,sDAA2E;AAC3E,iDAA4D;AAC5D,
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/cjs/cli_utils.d.ts
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { ExpandIamActionsOptions } from "./expand.js";
|
|
2
|
-
|
|
2
|
+
import { ExpandJsonDocumentOptions } from "./expand_file.js";
|
|
3
|
+
interface CliOptions extends ExpandIamActionsOptions, ExpandJsonDocumentOptions {
|
|
4
|
+
invert: boolean;
|
|
3
5
|
showDataVersion: boolean;
|
|
4
6
|
readWaitMs: string;
|
|
5
7
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli_utils.d.ts","sourceRoot":"","sources":["../../src/cli_utils.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,uBAAuB,EAAyB,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"cli_utils.d.ts","sourceRoot":"","sources":["../../src/cli_utils.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,uBAAuB,EAAyB,MAAM,aAAa,CAAC;AAC7E,OAAO,EAAsB,yBAAyB,EAAE,MAAM,kBAAkB,CAAC;AAGjF,UAAU,UAAW,SAAQ,uBAAuB,EAAE,yBAAyB;IAC7E,MAAM,EAAE,OAAO,CAAA;IACf,eAAe,EAAE,OAAO,CAAA;IACxB,UAAU,EAAE,MAAM,CAAA;CACnB;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAGnD;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,UAAU,CAAC,CAyBxE;AAGD,wBAAgB,6BAA6B,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAMpE;AAED;;;;GAIG;AACH,wBAAsB,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,UAAU,CAAC,GAAG,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,MAAM,CAAC,EAAE,GAAG,CAAA;CAAC,CAAC,CAgB1G"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli_utils.js","sourceRoot":"","sources":["../../src/cli_utils.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"cli_utils.js","sourceRoot":"","sources":["../../src/cli_utils.ts"],"names":[],"mappings":"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"}
|
package/dist/cjs/expand.d.ts
CHANGED
|
@@ -14,12 +14,6 @@ export interface ExpandIamActionsOptions {
|
|
|
14
14
|
* Default: false
|
|
15
15
|
*/
|
|
16
16
|
expandAsterisk: boolean;
|
|
17
|
-
/**
|
|
18
|
-
* If true, `service:*` will be expanded to all actions for that service
|
|
19
|
-
* If false, `service:*` will be returned as is
|
|
20
|
-
* Default: false
|
|
21
|
-
*/
|
|
22
|
-
expandServiceAsterisk: boolean;
|
|
23
17
|
/**
|
|
24
18
|
* If true, an error will be thrown if the action string is not in the correct format
|
|
25
19
|
* If false, an empty array will be returned
|
package/dist/cjs/expand.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"expand.d.ts","sourceRoot":"","sources":["../../src/expand.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"expand.d.ts","sourceRoot":"","sources":["../../src/expand.ts"],"names":[],"mappings":"AAGA,oBAAY,qBAAqB;IAC/B,MAAM,WAAW;IACjB,KAAK,UAAU;IACf,OAAO,YAAY;CACpB;AAED;;;GAGG;AACH,MAAM,WAAW,uBAAuB;IACtC;;;;OAIG;IACH,cAAc,EAAE,OAAO,CAAA;IAEvB;;;;OAIG;IACH,oBAAoB,EAAE,OAAO,CAAA;IAE7B;;;;OAIG;IACH,qBAAqB,EAAE,OAAO,CAAA;IAE9B;;;;;;;OAOG;IACH,qBAAqB,EAAE,qBAAqB,CAAA;CAC7C;AASD;;;;;;;;;;GAUG;AACH,wBAAsB,gBAAgB,CAAC,qBAAqB,EAAE,MAAM,GAAG,MAAM,EAAE,EAAE,eAAe,CAAC,EAAE,OAAO,CAAC,uBAAuB,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAwFtJ"}
|
package/dist/cjs/expand.js
CHANGED
|
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.InvalidActionBehavior = void 0;
|
|
4
4
|
exports.expandIamActions = expandIamActions;
|
|
5
5
|
const iam_data_1 = require("@cloud-copilot/iam-data");
|
|
6
|
+
const util_js_1 = require("./util.js");
|
|
6
7
|
var InvalidActionBehavior;
|
|
7
8
|
(function (InvalidActionBehavior) {
|
|
8
9
|
InvalidActionBehavior["Remove"] = "Remove";
|
|
@@ -11,12 +12,10 @@ var InvalidActionBehavior;
|
|
|
11
12
|
})(InvalidActionBehavior || (exports.InvalidActionBehavior = InvalidActionBehavior = {}));
|
|
12
13
|
const defaultOptions = {
|
|
13
14
|
expandAsterisk: false,
|
|
14
|
-
expandServiceAsterisk: false,
|
|
15
15
|
errorOnInvalidFormat: false,
|
|
16
16
|
errorOnInvalidService: false,
|
|
17
17
|
invalidActionBehavior: InvalidActionBehavior.Remove,
|
|
18
18
|
};
|
|
19
|
-
const allAsterisksPattern = /^\*+$/i;
|
|
20
19
|
/**
|
|
21
20
|
* Expands an IAM action string that contains wildcards.
|
|
22
21
|
* If the action string contains no wildcards, it is returned as is.
|
|
@@ -43,7 +42,7 @@ async function expandIamActions(actionStringOrStrings, overrideOptions) {
|
|
|
43
42
|
return allMatches;
|
|
44
43
|
}
|
|
45
44
|
const actionString = actionStringOrStrings.trim();
|
|
46
|
-
if (actionString.match(allAsterisksPattern)) {
|
|
45
|
+
if (actionString.match(util_js_1.allAsterisksPattern)) {
|
|
47
46
|
if (options.expandAsterisk) {
|
|
48
47
|
//If that's really what you want...
|
|
49
48
|
const allActions = [];
|
|
@@ -76,12 +75,9 @@ async function expandIamActions(actionStringOrStrings, overrideOptions) {
|
|
|
76
75
|
}
|
|
77
76
|
return [];
|
|
78
77
|
}
|
|
79
|
-
if (wildcardActions.match(allAsterisksPattern)) {
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
return actionsForService.map(action => `${service}:${action}`);
|
|
83
|
-
}
|
|
84
|
-
return [`${service}:*`];
|
|
78
|
+
if (wildcardActions.match(util_js_1.allAsterisksPattern)) {
|
|
79
|
+
const actionsForService = await (0, iam_data_1.iamActionsForService)(service);
|
|
80
|
+
return actionsForService.map(action => `${service}:${action}`);
|
|
85
81
|
}
|
|
86
82
|
if (!actionString.includes('*') && !actionString.includes('?')) {
|
|
87
83
|
const actionExists = await (0, iam_data_1.iamActionExists)(service, wildcardActions);
|
|
@@ -104,8 +100,7 @@ async function expandIamActions(actionStringOrStrings, overrideOptions) {
|
|
|
104
100
|
}
|
|
105
101
|
}
|
|
106
102
|
const allActions = await (0, iam_data_1.iamActionsForService)(service);
|
|
107
|
-
const
|
|
108
|
-
const regex = new RegExp(pattern, 'i');
|
|
103
|
+
const regex = (0, util_js_1.convertStringToPattern)(wildcardActions);
|
|
109
104
|
const matchingActions = allActions.filter(action => regex.test(action)).map(action => `${service}:${action}`);
|
|
110
105
|
matchingActions.sort();
|
|
111
106
|
return matchingActions;
|
package/dist/cjs/expand.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"expand.js","sourceRoot":"","sources":["../../src/expand.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"expand.js","sourceRoot":"","sources":["../../src/expand.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
import { ExpandIamActionsOptions } from "./expand.js";
|
|
2
|
+
export interface ExpandJsonDocumentOptions extends ExpandIamActionsOptions {
|
|
3
|
+
invertNotActions: boolean;
|
|
4
|
+
}
|
|
2
5
|
/**
|
|
3
6
|
* Takes any JSON document and expands any Action or NotAction string or array of strings in the document.
|
|
4
7
|
* *MODIFIES THE DOCUMENT IN PLACE*
|
|
@@ -8,5 +11,5 @@ import { ExpandIamActionsOptions } from "./expand.js";
|
|
|
8
11
|
* @param key the key of the current node in the document
|
|
9
12
|
* @returns the original JSON document with any actions expanded in place
|
|
10
13
|
*/
|
|
11
|
-
export declare function expandJsonDocument(options: Partial<
|
|
14
|
+
export declare function expandJsonDocument(options: Partial<ExpandJsonDocumentOptions>, document: any, key?: string): Promise<any>;
|
|
12
15
|
//# sourceMappingURL=expand_file.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"expand_file.d.ts","sourceRoot":"","sources":["../../src/expand_file.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,uBAAuB,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"expand_file.d.ts","sourceRoot":"","sources":["../../src/expand_file.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,uBAAuB,EAAE,MAAM,aAAa,CAAC;AAGxE,MAAM,WAAW,yBAA0B,SAAQ,uBAAuB;IACxE,gBAAgB,EAAE,OAAO,CAAA;CAC1B;AAMD;;;;;;;;GAQG;AACH,wBAAsB,kBAAkB,CAAC,OAAO,EAAE,OAAO,CAAC,yBAAyB,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CA+B/H"}
|
package/dist/cjs/expand_file.js
CHANGED
|
@@ -2,6 +2,10 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.expandJsonDocument = expandJsonDocument;
|
|
4
4
|
const expand_js_1 = require("./expand.js");
|
|
5
|
+
const invert_js_1 = require("./invert.js");
|
|
6
|
+
const defaultOptions = {
|
|
7
|
+
invertNotActions: false
|
|
8
|
+
};
|
|
5
9
|
/**
|
|
6
10
|
* Takes any JSON document and expands any Action or NotAction string or array of strings in the document.
|
|
7
11
|
* *MODIFIES THE DOCUMENT IN PLACE*
|
|
@@ -12,11 +16,9 @@ const expand_js_1 = require("./expand.js");
|
|
|
12
16
|
* @returns the original JSON document with any actions expanded in place
|
|
13
17
|
*/
|
|
14
18
|
async function expandJsonDocument(options, document, key) {
|
|
19
|
+
options = { ...defaultOptions, ...options };
|
|
15
20
|
if (key === 'Action' || key === 'NotAction') {
|
|
16
|
-
if (
|
|
17
|
-
return (0, expand_js_1.expandIamActions)(document, options);
|
|
18
|
-
}
|
|
19
|
-
if (Array.isArray(document) && document.length > 0 && typeof document[0] === 'string') {
|
|
21
|
+
if (isStringOrArrayofStrings(document)) {
|
|
20
22
|
return (0, expand_js_1.expandIamActions)(document, options);
|
|
21
23
|
}
|
|
22
24
|
}
|
|
@@ -28,6 +30,10 @@ async function expandJsonDocument(options, document, key) {
|
|
|
28
30
|
return results;
|
|
29
31
|
}
|
|
30
32
|
if (typeof document === 'object' && document !== null) {
|
|
33
|
+
if (options.invertNotActions && document.NotAction && isStringOrArrayofStrings(document.NotAction)) {
|
|
34
|
+
document.Action = (0, invert_js_1.invert)(document.NotAction);
|
|
35
|
+
delete document.NotAction;
|
|
36
|
+
}
|
|
31
37
|
for (const key of Object.keys(document)) {
|
|
32
38
|
document[key] = await expandJsonDocument(options, document[key], key);
|
|
33
39
|
}
|
|
@@ -35,4 +41,13 @@ async function expandJsonDocument(options, document, key) {
|
|
|
35
41
|
}
|
|
36
42
|
return document;
|
|
37
43
|
}
|
|
44
|
+
/**
|
|
45
|
+
* Checks to see if a value is a string or an array of strings, used for type narrowing
|
|
46
|
+
*
|
|
47
|
+
* @param value The value to test
|
|
48
|
+
* @returns
|
|
49
|
+
*/
|
|
50
|
+
function isStringOrArrayofStrings(value) {
|
|
51
|
+
return typeof value === 'string' || (Array.isArray(value) && value.length > 0 && typeof value[0] === 'string');
|
|
52
|
+
}
|
|
38
53
|
//# sourceMappingURL=expand_file.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"expand_file.js","sourceRoot":"","sources":["../../src/expand_file.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"expand_file.js","sourceRoot":"","sources":["../../src/expand_file.ts"],"names":[],"mappings":";;AAoBA,gDA+BC;AAnDD,2CAAwE;AACxE,2CAAqC;AAMrC,MAAM,cAAc,GAAwD;IAC1E,gBAAgB,EAAE,KAAK;CACxB,CAAA;AAED;;;;;;;;GAQG;AACI,KAAK,UAAU,kBAAkB,CAAC,OAA2C,EAAE,QAAa,EAAE,GAAY;IAC/G,OAAO,GAAG,EAAC,GAAG,cAAc,EAAE,GAAG,OAAO,EAAC,CAAC;IAE1C,IAAI,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,WAAW,EAAE,CAAC;QAC5C,IAAI,wBAAwB,CAAC,QAAQ,CAAC,EAAE,CAAC;YACvC,OAAO,IAAA,4BAAgB,EAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAC7C,CAAC;IACH,CAAC;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC5B,MAAM,OAAO,GAAG,EAAE,CAAC;QACnB,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;YAC5B,OAAO,CAAC,IAAI,CAAC,MAAM,kBAAkB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;QACxD,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;QACtD,IAAG,OAAO,CAAC,gBAAgB,IAAI,QAAQ,CAAC,SAAS,IAAI,wBAAwB,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;YAClG,QAAQ,CAAC,MAAM,GAAG,IAAA,kBAAM,EAAC,QAAQ,CAAC,SAAS,CAAC,CAAA;YAC5C,OAAO,QAAQ,CAAC,SAAS,CAAA;QAC3B,CAAC;QAED,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;YACxC,QAAQ,CAAC,GAAG,CAAC,GAAG,MAAM,kBAAkB,CAAC,OAAO,EAAE,QAAQ,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;QACxE,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;;;;GAKG;AACH,SAAS,wBAAwB,CAAC,KAAU;IAC1C,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC;AACjH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"invert.d.ts","sourceRoot":"","sources":["../../src/invert.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,uBAAuB;CACvC;AAID,wBAAsB,MAAM,CAAC,qBAAqB,EAAE,MAAM,GAAG,MAAM,EAAE,EAAE,eAAe,CAAC,EAAE,OAAO,CAAC,uBAAuB,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAoD5I"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.invert = invert;
|
|
4
|
+
const iam_data_1 = require("@cloud-copilot/iam-data");
|
|
5
|
+
const util_js_1 = require("./util.js");
|
|
6
|
+
const defaultOptions = {};
|
|
7
|
+
async function invert(actionStringOrStrings, overrideOptions) {
|
|
8
|
+
const options = { ...defaultOptions, ...overrideOptions };
|
|
9
|
+
if (!actionStringOrStrings) {
|
|
10
|
+
throw new Error('at least one action must be provided to invert');
|
|
11
|
+
}
|
|
12
|
+
let allActionsFound = false;
|
|
13
|
+
const servicesToExclude = new Set();
|
|
14
|
+
const excludePatterns = {};
|
|
15
|
+
const actionsToInvert = Array.isArray(actionStringOrStrings) ? actionStringOrStrings : [actionStringOrStrings];
|
|
16
|
+
for (const action of actionsToInvert) {
|
|
17
|
+
if (action.match(util_js_1.allAsterisksPattern)) {
|
|
18
|
+
allActionsFound = true;
|
|
19
|
+
break;
|
|
20
|
+
}
|
|
21
|
+
const parts = action.split(':');
|
|
22
|
+
if (parts.length !== 2) {
|
|
23
|
+
continue;
|
|
24
|
+
}
|
|
25
|
+
const [service, wildcardActions] = parts.map(part => part.toLowerCase());
|
|
26
|
+
if (wildcardActions.match(util_js_1.allAsterisksPattern)) {
|
|
27
|
+
servicesToExclude.add(service);
|
|
28
|
+
continue;
|
|
29
|
+
}
|
|
30
|
+
if (!excludePatterns[service]) {
|
|
31
|
+
excludePatterns[service] = [];
|
|
32
|
+
}
|
|
33
|
+
excludePatterns[service].push((0, util_js_1.convertStringToPattern)(wildcardActions));
|
|
34
|
+
}
|
|
35
|
+
if (allActionsFound) {
|
|
36
|
+
return [];
|
|
37
|
+
}
|
|
38
|
+
const allServices = await (0, iam_data_1.iamServiceKeys)();
|
|
39
|
+
const actionLists = await Promise.all(allServices.map(async (serviceKey) => {
|
|
40
|
+
if (servicesToExclude.has(serviceKey)) {
|
|
41
|
+
return [];
|
|
42
|
+
}
|
|
43
|
+
const serviceActions = await (0, iam_data_1.iamActionsForService)(serviceKey);
|
|
44
|
+
const excludePatternsForService = excludePatterns[serviceKey] || [];
|
|
45
|
+
if (excludePatternsForService.length === 0) {
|
|
46
|
+
return serviceActions.map(action => `${serviceKey}:${action}`);
|
|
47
|
+
}
|
|
48
|
+
return serviceActions.filter(action => {
|
|
49
|
+
return !excludePatternsForService.some(pattern => action.match(pattern));
|
|
50
|
+
}).map(action => `${serviceKey}:${action}`);
|
|
51
|
+
}));
|
|
52
|
+
return Array.from(new Set(actionLists.flat())).sort();
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=invert.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"invert.js","sourceRoot":"","sources":["../../src/invert.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../src/util.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,mBAAmB,QAAW,CAAA;AAE3C,wBAAgB,sBAAsB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAGnE"}
|
package/dist/cjs/util.js
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.allAsterisksPattern = void 0;
|
|
4
|
+
exports.convertStringToPattern = convertStringToPattern;
|
|
5
|
+
exports.allAsterisksPattern = /^\*+$/i;
|
|
6
|
+
function convertStringToPattern(actionString) {
|
|
7
|
+
const pattern = "^" + actionString.replace(/\?/g, '.').replace(/\*/g, '.*?') + "$";
|
|
8
|
+
return new RegExp(pattern, 'i');
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=util.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"util.js","sourceRoot":"","sources":["../../src/util.ts"],"names":[],"mappings":";;;AAEA,wDAGC;AALY,QAAA,mBAAmB,GAAG,QAAQ,CAAA;AAE3C,SAAgB,sBAAsB,CAAC,YAAoB;IACzD,MAAM,OAAO,GAAG,GAAG,GAAG,YAAY,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,GAAG,CAAA;IAClF,OAAO,IAAI,MAAM,CAAC,OAAO,EAAE,GAAG,CAAC,CAAA;AACjC,CAAC"}
|
package/dist/esm/cli.js
CHANGED
|
@@ -2,11 +2,17 @@
|
|
|
2
2
|
import { iamDataUpdatedAt, iamDataVersion } from "@cloud-copilot/iam-data";
|
|
3
3
|
import { convertOptions, parseStdIn } from "./cli_utils.js";
|
|
4
4
|
import { expandIamActions } from "./expand.js";
|
|
5
|
+
import { invert } from "./invert.js";
|
|
5
6
|
const commandName = 'iam-expand';
|
|
6
7
|
const dataPackage = '@cloud-copilot/iam-data';
|
|
7
|
-
|
|
8
|
+
/**
|
|
9
|
+
* Run a function and print the results to the console
|
|
10
|
+
*
|
|
11
|
+
* @param func the function to run
|
|
12
|
+
*/
|
|
13
|
+
async function runAndPrint(func) {
|
|
8
14
|
try {
|
|
9
|
-
const result = await
|
|
15
|
+
const result = await func();
|
|
10
16
|
for (const action of result) {
|
|
11
17
|
console.log(action);
|
|
12
18
|
}
|
|
@@ -16,6 +22,9 @@ async function expandAndPrint(actionStrings, options) {
|
|
|
16
22
|
process.exit(1);
|
|
17
23
|
}
|
|
18
24
|
}
|
|
25
|
+
/**
|
|
26
|
+
* Print the usage of the CLI to the console
|
|
27
|
+
*/
|
|
19
28
|
function printUsage() {
|
|
20
29
|
console.log('No arguments provided or input from stdin.');
|
|
21
30
|
console.log('Usage:');
|
|
@@ -23,19 +32,31 @@ function printUsage() {
|
|
|
23
32
|
console.log(` <input from stdout> | ${commandName} [options]`);
|
|
24
33
|
console.log('Action Expanding Options:');
|
|
25
34
|
console.log(' --expand-asterisk: Expand the * action to all actions');
|
|
26
|
-
console.log(' --expand-service-asterisk: Expand service:* to all actions for that service');
|
|
27
35
|
console.log(' --error-on-invalid-format: Throw an error if the action string is not in the correct format');
|
|
28
36
|
console.log(' --error-on-invalid-service: Throw an error if a service is not found');
|
|
29
37
|
console.log(' --invalid-action-behavior: What to do when an invalid action is encountered:');
|
|
30
38
|
console.log(' --invalid-action-behavior=remove: Remove the invalid action');
|
|
31
39
|
console.log(' --invalid-action-behavior=include: Include the invalid action');
|
|
32
40
|
console.log(' --invalid-action-behavior=error: Throw an error if an invalid action is encountered');
|
|
41
|
+
console.log('Inverting Actions:');
|
|
42
|
+
console.log(' --invert: If not JSON, print the inverse of the actions provided');
|
|
43
|
+
console.log(' --invert-not-actions: If JSON, replace NotAction strings or arrays with Action arrays that have the inverse actions');
|
|
33
44
|
console.log('CLI Behavior Options:');
|
|
34
45
|
console.log(' --show-data-version: Print the version of the iam-data package being used and exit');
|
|
35
46
|
console.log(' --read-wait-ms: Millisenconds to wait for the first byte from stdin before timing out.');
|
|
36
47
|
console.log(' Example: --read-wait-ms=10_000');
|
|
37
48
|
process.exit(1);
|
|
38
49
|
}
|
|
50
|
+
/**
|
|
51
|
+
* Print a list of warnings to the console
|
|
52
|
+
*
|
|
53
|
+
* @param warnings the list of warnings to print
|
|
54
|
+
*/
|
|
55
|
+
function printWarnings(warnings) {
|
|
56
|
+
for (const warning of warnings) {
|
|
57
|
+
console.warn(`Notice: ${warning}`);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
39
60
|
const args = process.argv.slice(2); // Ignore the first two elements
|
|
40
61
|
const actionStrings = [];
|
|
41
62
|
const optionStrings = [];
|
|
@@ -59,23 +80,38 @@ async function run() {
|
|
|
59
80
|
console.log(` npm update -g ${dataPackage}`);
|
|
60
81
|
return;
|
|
61
82
|
}
|
|
83
|
+
const warnings = [];
|
|
62
84
|
if (actionStrings.length === 0) {
|
|
63
85
|
//If no actions are provided, read from stdin
|
|
64
86
|
const stdInResult = await parseStdIn(options);
|
|
65
87
|
if (stdInResult.object) {
|
|
66
88
|
console.log(JSON.stringify(stdInResult.object, null, 2));
|
|
89
|
+
if (options.invert) {
|
|
90
|
+
printWarnings(['--invert is not supported when processing JSON, ignoring. Did you mean --invert-not-actions ?']);
|
|
91
|
+
}
|
|
67
92
|
return;
|
|
68
93
|
}
|
|
69
94
|
else if (stdInResult.strings) {
|
|
70
95
|
const otherActions = stdInResult.strings;
|
|
71
|
-
if (otherActions.length > 0
|
|
72
|
-
|
|
96
|
+
if (otherActions.length > 0) {
|
|
97
|
+
if (options.expandAsterisk) {
|
|
98
|
+
warnings.push('--expand-asterisk is not supported when reading from stdin, ignoring.');
|
|
99
|
+
}
|
|
73
100
|
}
|
|
74
101
|
actionStrings.push(...otherActions);
|
|
75
102
|
}
|
|
76
103
|
}
|
|
77
104
|
if (actionStrings.length > 0) {
|
|
78
|
-
|
|
105
|
+
if (options.invertNotActions) {
|
|
106
|
+
warnings.push('--invert-not-actions is only supported when processing JSON, ignoring.');
|
|
107
|
+
}
|
|
108
|
+
if (options.invert) {
|
|
109
|
+
await runAndPrint(() => invert(actionStrings, options));
|
|
110
|
+
}
|
|
111
|
+
else {
|
|
112
|
+
await runAndPrint(() => expandIamActions(actionStrings, options));
|
|
113
|
+
}
|
|
114
|
+
printWarnings(warnings);
|
|
79
115
|
return;
|
|
80
116
|
}
|
|
81
117
|
printUsage();
|
package/dist/esm/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAC3E,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5D,OAAO,EAAE,gBAAgB,
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/esm/cli_utils.d.ts
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { ExpandIamActionsOptions } from "./expand.js";
|
|
2
|
-
|
|
2
|
+
import { ExpandJsonDocumentOptions } from "./expand_file.js";
|
|
3
|
+
interface CliOptions extends ExpandIamActionsOptions, ExpandJsonDocumentOptions {
|
|
4
|
+
invert: boolean;
|
|
3
5
|
showDataVersion: boolean;
|
|
4
6
|
readWaitMs: string;
|
|
5
7
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli_utils.d.ts","sourceRoot":"","sources":["../../src/cli_utils.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,uBAAuB,EAAyB,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"cli_utils.d.ts","sourceRoot":"","sources":["../../src/cli_utils.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,uBAAuB,EAAyB,MAAM,aAAa,CAAC;AAC7E,OAAO,EAAsB,yBAAyB,EAAE,MAAM,kBAAkB,CAAC;AAGjF,UAAU,UAAW,SAAQ,uBAAuB,EAAE,yBAAyB;IAC7E,MAAM,EAAE,OAAO,CAAA;IACf,eAAe,EAAE,OAAO,CAAA;IACxB,UAAU,EAAE,MAAM,CAAA;CACnB;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAGnD;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,UAAU,CAAC,CAyBxE;AAGD,wBAAgB,6BAA6B,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAMpE;AAED;;;;GAIG;AACH,wBAAsB,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,UAAU,CAAC,GAAG,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,MAAM,CAAC,EAAE,GAAG,CAAA;CAAC,CAAC,CAgB1G"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli_utils.js","sourceRoot":"","sources":["../../src/cli_utils.ts"],"names":[],"mappings":"AACA,OAAO,EAA2B,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAC7E,OAAO,EAAE,kBAAkB,
|
|
1
|
+
{"version":3,"file":"cli_utils.js","sourceRoot":"","sources":["../../src/cli_utils.ts"],"names":[],"mappings":"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"}
|
package/dist/esm/expand.d.ts
CHANGED
|
@@ -14,12 +14,6 @@ export interface ExpandIamActionsOptions {
|
|
|
14
14
|
* Default: false
|
|
15
15
|
*/
|
|
16
16
|
expandAsterisk: boolean;
|
|
17
|
-
/**
|
|
18
|
-
* If true, `service:*` will be expanded to all actions for that service
|
|
19
|
-
* If false, `service:*` will be returned as is
|
|
20
|
-
* Default: false
|
|
21
|
-
*/
|
|
22
|
-
expandServiceAsterisk: boolean;
|
|
23
17
|
/**
|
|
24
18
|
* If true, an error will be thrown if the action string is not in the correct format
|
|
25
19
|
* If false, an empty array will be returned
|
package/dist/esm/expand.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"expand.d.ts","sourceRoot":"","sources":["../../src/expand.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"expand.d.ts","sourceRoot":"","sources":["../../src/expand.ts"],"names":[],"mappings":"AAGA,oBAAY,qBAAqB;IAC/B,MAAM,WAAW;IACjB,KAAK,UAAU;IACf,OAAO,YAAY;CACpB;AAED;;;GAGG;AACH,MAAM,WAAW,uBAAuB;IACtC;;;;OAIG;IACH,cAAc,EAAE,OAAO,CAAA;IAEvB;;;;OAIG;IACH,oBAAoB,EAAE,OAAO,CAAA;IAE7B;;;;OAIG;IACH,qBAAqB,EAAE,OAAO,CAAA;IAE9B;;;;;;;OAOG;IACH,qBAAqB,EAAE,qBAAqB,CAAA;CAC7C;AASD;;;;;;;;;;GAUG;AACH,wBAAsB,gBAAgB,CAAC,qBAAqB,EAAE,MAAM,GAAG,MAAM,EAAE,EAAE,eAAe,CAAC,EAAE,OAAO,CAAC,uBAAuB,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAwFtJ"}
|
package/dist/esm/expand.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { iamActionDetails, iamActionExists, iamActionsForService, iamServiceExists, iamServiceKeys } from '@cloud-copilot/iam-data';
|
|
2
|
+
import { allAsterisksPattern, convertStringToPattern } from './util.js';
|
|
2
3
|
export var InvalidActionBehavior;
|
|
3
4
|
(function (InvalidActionBehavior) {
|
|
4
5
|
InvalidActionBehavior["Remove"] = "Remove";
|
|
@@ -7,12 +8,10 @@ export var InvalidActionBehavior;
|
|
|
7
8
|
})(InvalidActionBehavior || (InvalidActionBehavior = {}));
|
|
8
9
|
const defaultOptions = {
|
|
9
10
|
expandAsterisk: false,
|
|
10
|
-
expandServiceAsterisk: false,
|
|
11
11
|
errorOnInvalidFormat: false,
|
|
12
12
|
errorOnInvalidService: false,
|
|
13
13
|
invalidActionBehavior: InvalidActionBehavior.Remove,
|
|
14
14
|
};
|
|
15
|
-
const allAsterisksPattern = /^\*+$/i;
|
|
16
15
|
/**
|
|
17
16
|
* Expands an IAM action string that contains wildcards.
|
|
18
17
|
* If the action string contains no wildcards, it is returned as is.
|
|
@@ -73,11 +72,8 @@ export async function expandIamActions(actionStringOrStrings, overrideOptions) {
|
|
|
73
72
|
return [];
|
|
74
73
|
}
|
|
75
74
|
if (wildcardActions.match(allAsterisksPattern)) {
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
return actionsForService.map(action => `${service}:${action}`);
|
|
79
|
-
}
|
|
80
|
-
return [`${service}:*`];
|
|
75
|
+
const actionsForService = await iamActionsForService(service);
|
|
76
|
+
return actionsForService.map(action => `${service}:${action}`);
|
|
81
77
|
}
|
|
82
78
|
if (!actionString.includes('*') && !actionString.includes('?')) {
|
|
83
79
|
const actionExists = await iamActionExists(service, wildcardActions);
|
|
@@ -100,8 +96,7 @@ export async function expandIamActions(actionStringOrStrings, overrideOptions) {
|
|
|
100
96
|
}
|
|
101
97
|
}
|
|
102
98
|
const allActions = await iamActionsForService(service);
|
|
103
|
-
const
|
|
104
|
-
const regex = new RegExp(pattern, 'i');
|
|
99
|
+
const regex = convertStringToPattern(wildcardActions);
|
|
105
100
|
const matchingActions = allActions.filter(action => regex.test(action)).map(action => `${service}:${action}`);
|
|
106
101
|
matchingActions.sort();
|
|
107
102
|
return matchingActions;
|
package/dist/esm/expand.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"expand.js","sourceRoot":"","sources":["../../src/expand.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;
|
|
1
|
+
{"version":3,"file":"expand.js","sourceRoot":"","sources":["../../src/expand.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
import { ExpandIamActionsOptions } from "./expand.js";
|
|
2
|
+
export interface ExpandJsonDocumentOptions extends ExpandIamActionsOptions {
|
|
3
|
+
invertNotActions: boolean;
|
|
4
|
+
}
|
|
2
5
|
/**
|
|
3
6
|
* Takes any JSON document and expands any Action or NotAction string or array of strings in the document.
|
|
4
7
|
* *MODIFIES THE DOCUMENT IN PLACE*
|
|
@@ -8,5 +11,5 @@ import { ExpandIamActionsOptions } from "./expand.js";
|
|
|
8
11
|
* @param key the key of the current node in the document
|
|
9
12
|
* @returns the original JSON document with any actions expanded in place
|
|
10
13
|
*/
|
|
11
|
-
export declare function expandJsonDocument(options: Partial<
|
|
14
|
+
export declare function expandJsonDocument(options: Partial<ExpandJsonDocumentOptions>, document: any, key?: string): Promise<any>;
|
|
12
15
|
//# sourceMappingURL=expand_file.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"expand_file.d.ts","sourceRoot":"","sources":["../../src/expand_file.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,uBAAuB,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"expand_file.d.ts","sourceRoot":"","sources":["../../src/expand_file.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,uBAAuB,EAAE,MAAM,aAAa,CAAC;AAGxE,MAAM,WAAW,yBAA0B,SAAQ,uBAAuB;IACxE,gBAAgB,EAAE,OAAO,CAAA;CAC1B;AAMD;;;;;;;;GAQG;AACH,wBAAsB,kBAAkB,CAAC,OAAO,EAAE,OAAO,CAAC,yBAAyB,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CA+B/H"}
|
package/dist/esm/expand_file.js
CHANGED
|
@@ -1,4 +1,8 @@
|
|
|
1
1
|
import { expandIamActions } from "./expand.js";
|
|
2
|
+
import { invert } from "./invert.js";
|
|
3
|
+
const defaultOptions = {
|
|
4
|
+
invertNotActions: false
|
|
5
|
+
};
|
|
2
6
|
/**
|
|
3
7
|
* Takes any JSON document and expands any Action or NotAction string or array of strings in the document.
|
|
4
8
|
* *MODIFIES THE DOCUMENT IN PLACE*
|
|
@@ -9,11 +13,9 @@ import { expandIamActions } from "./expand.js";
|
|
|
9
13
|
* @returns the original JSON document with any actions expanded in place
|
|
10
14
|
*/
|
|
11
15
|
export async function expandJsonDocument(options, document, key) {
|
|
16
|
+
options = { ...defaultOptions, ...options };
|
|
12
17
|
if (key === 'Action' || key === 'NotAction') {
|
|
13
|
-
if (
|
|
14
|
-
return expandIamActions(document, options);
|
|
15
|
-
}
|
|
16
|
-
if (Array.isArray(document) && document.length > 0 && typeof document[0] === 'string') {
|
|
18
|
+
if (isStringOrArrayofStrings(document)) {
|
|
17
19
|
return expandIamActions(document, options);
|
|
18
20
|
}
|
|
19
21
|
}
|
|
@@ -25,6 +27,10 @@ export async function expandJsonDocument(options, document, key) {
|
|
|
25
27
|
return results;
|
|
26
28
|
}
|
|
27
29
|
if (typeof document === 'object' && document !== null) {
|
|
30
|
+
if (options.invertNotActions && document.NotAction && isStringOrArrayofStrings(document.NotAction)) {
|
|
31
|
+
document.Action = invert(document.NotAction);
|
|
32
|
+
delete document.NotAction;
|
|
33
|
+
}
|
|
28
34
|
for (const key of Object.keys(document)) {
|
|
29
35
|
document[key] = await expandJsonDocument(options, document[key], key);
|
|
30
36
|
}
|
|
@@ -32,4 +38,13 @@ export async function expandJsonDocument(options, document, key) {
|
|
|
32
38
|
}
|
|
33
39
|
return document;
|
|
34
40
|
}
|
|
41
|
+
/**
|
|
42
|
+
* Checks to see if a value is a string or an array of strings, used for type narrowing
|
|
43
|
+
*
|
|
44
|
+
* @param value The value to test
|
|
45
|
+
* @returns
|
|
46
|
+
*/
|
|
47
|
+
function isStringOrArrayofStrings(value) {
|
|
48
|
+
return typeof value === 'string' || (Array.isArray(value) && value.length > 0 && typeof value[0] === 'string');
|
|
49
|
+
}
|
|
35
50
|
//# sourceMappingURL=expand_file.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"expand_file.js","sourceRoot":"","sources":["../../src/expand_file.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAA2B,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"expand_file.js","sourceRoot":"","sources":["../../src/expand_file.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAA2B,MAAM,aAAa,CAAC;AACxE,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAMrC,MAAM,cAAc,GAAwD;IAC1E,gBAAgB,EAAE,KAAK;CACxB,CAAA;AAED;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,OAA2C,EAAE,QAAa,EAAE,GAAY;IAC/G,OAAO,GAAG,EAAC,GAAG,cAAc,EAAE,GAAG,OAAO,EAAC,CAAC;IAE1C,IAAI,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,WAAW,EAAE,CAAC;QAC5C,IAAI,wBAAwB,CAAC,QAAQ,CAAC,EAAE,CAAC;YACvC,OAAO,gBAAgB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAC7C,CAAC;IACH,CAAC;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC5B,MAAM,OAAO,GAAG,EAAE,CAAC;QACnB,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;YAC5B,OAAO,CAAC,IAAI,CAAC,MAAM,kBAAkB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;QACxD,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;QACtD,IAAG,OAAO,CAAC,gBAAgB,IAAI,QAAQ,CAAC,SAAS,IAAI,wBAAwB,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;YAClG,QAAQ,CAAC,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAA;YAC5C,OAAO,QAAQ,CAAC,SAAS,CAAA;QAC3B,CAAC;QAED,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;YACxC,QAAQ,CAAC,GAAG,CAAC,GAAG,MAAM,kBAAkB,CAAC,OAAO,EAAE,QAAQ,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;QACxE,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;;;;GAKG;AACH,SAAS,wBAAwB,CAAC,KAAU;IAC1C,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC;AACjH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"invert.d.ts","sourceRoot":"","sources":["../../src/invert.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,uBAAuB;CACvC;AAID,wBAAsB,MAAM,CAAC,qBAAqB,EAAE,MAAM,GAAG,MAAM,EAAE,EAAE,eAAe,CAAC,EAAE,OAAO,CAAC,uBAAuB,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAoD5I"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { iamActionsForService, iamServiceKeys } from "@cloud-copilot/iam-data";
|
|
2
|
+
import { allAsterisksPattern, convertStringToPattern } from "./util.js";
|
|
3
|
+
const defaultOptions = {};
|
|
4
|
+
export async function invert(actionStringOrStrings, overrideOptions) {
|
|
5
|
+
const options = { ...defaultOptions, ...overrideOptions };
|
|
6
|
+
if (!actionStringOrStrings) {
|
|
7
|
+
throw new Error('at least one action must be provided to invert');
|
|
8
|
+
}
|
|
9
|
+
let allActionsFound = false;
|
|
10
|
+
const servicesToExclude = new Set();
|
|
11
|
+
const excludePatterns = {};
|
|
12
|
+
const actionsToInvert = Array.isArray(actionStringOrStrings) ? actionStringOrStrings : [actionStringOrStrings];
|
|
13
|
+
for (const action of actionsToInvert) {
|
|
14
|
+
if (action.match(allAsterisksPattern)) {
|
|
15
|
+
allActionsFound = true;
|
|
16
|
+
break;
|
|
17
|
+
}
|
|
18
|
+
const parts = action.split(':');
|
|
19
|
+
if (parts.length !== 2) {
|
|
20
|
+
continue;
|
|
21
|
+
}
|
|
22
|
+
const [service, wildcardActions] = parts.map(part => part.toLowerCase());
|
|
23
|
+
if (wildcardActions.match(allAsterisksPattern)) {
|
|
24
|
+
servicesToExclude.add(service);
|
|
25
|
+
continue;
|
|
26
|
+
}
|
|
27
|
+
if (!excludePatterns[service]) {
|
|
28
|
+
excludePatterns[service] = [];
|
|
29
|
+
}
|
|
30
|
+
excludePatterns[service].push(convertStringToPattern(wildcardActions));
|
|
31
|
+
}
|
|
32
|
+
if (allActionsFound) {
|
|
33
|
+
return [];
|
|
34
|
+
}
|
|
35
|
+
const allServices = await iamServiceKeys();
|
|
36
|
+
const actionLists = await Promise.all(allServices.map(async (serviceKey) => {
|
|
37
|
+
if (servicesToExclude.has(serviceKey)) {
|
|
38
|
+
return [];
|
|
39
|
+
}
|
|
40
|
+
const serviceActions = await iamActionsForService(serviceKey);
|
|
41
|
+
const excludePatternsForService = excludePatterns[serviceKey] || [];
|
|
42
|
+
if (excludePatternsForService.length === 0) {
|
|
43
|
+
return serviceActions.map(action => `${serviceKey}:${action}`);
|
|
44
|
+
}
|
|
45
|
+
return serviceActions.filter(action => {
|
|
46
|
+
return !excludePatternsForService.some(pattern => action.match(pattern));
|
|
47
|
+
}).map(action => `${serviceKey}:${action}`);
|
|
48
|
+
}));
|
|
49
|
+
return Array.from(new Set(actionLists.flat())).sort();
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=invert.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"invert.js","sourceRoot":"","sources":["../../src/invert.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../src/util.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,mBAAmB,QAAW,CAAA;AAE3C,wBAAgB,sBAAsB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAGnE"}
|
package/dist/esm/util.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"util.js","sourceRoot":"","sources":["../../src/util.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,mBAAmB,GAAG,QAAQ,CAAA;AAE3C,MAAM,UAAU,sBAAsB,CAAC,YAAoB;IACzD,MAAM,OAAO,GAAG,GAAG,GAAG,YAAY,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,GAAG,CAAA;IAClF,OAAO,IAAI,MAAM,CAAC,OAAO,EAAE,GAAG,CAAC,CAAA;AACjC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cloud-copilot/iam-expand",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.7.0-rc2",
|
|
4
4
|
"description": "Expand AWS IAM Actions with Wildcards",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
"build": "npx tsc -p tsconfig.cjs.json && npx tsc -p tsconfig.esm.json && ./postbuild.sh",
|
|
24
24
|
"clean": "rm -rf dist",
|
|
25
25
|
"test": "npx vitest --run --coverage",
|
|
26
|
-
"release": "npm run clean && npm run build && npm run test && npm publish"
|
|
26
|
+
"release": "npm install && npm run clean && npm run build && npm run test && npm publish"
|
|
27
27
|
},
|
|
28
28
|
"keywords": [
|
|
29
29
|
"AWS",
|