@cloud-copilot/iam-convert 0.1.1
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/LICENSE.txt +661 -0
- package/dist/cjs/cli.d.ts +3 -0
- package/dist/cjs/cli.d.ts.map +1 -0
- package/dist/cjs/cli.js +80 -0
- package/dist/cjs/cli.js.map +1 -0
- package/dist/cjs/convert.d.ts +22 -0
- package/dist/cjs/convert.d.ts.map +1 -0
- package/dist/cjs/convert.js +31 -0
- package/dist/cjs/convert.js.map +1 -0
- package/dist/cjs/converters/converter.d.ts +12 -0
- package/dist/cjs/converters/converter.d.ts.map +1 -0
- package/dist/cjs/converters/converter.js +3 -0
- package/dist/cjs/converters/converter.js.map +1 -0
- package/dist/cjs/converters/terraform.d.ts +14 -0
- package/dist/cjs/converters/terraform.d.ts.map +1 -0
- package/dist/cjs/converters/terraform.js +150 -0
- package/dist/cjs/converters/terraform.js.map +1 -0
- package/dist/cjs/defaults.d.ts +5 -0
- package/dist/cjs/defaults.d.ts.map +1 -0
- package/dist/cjs/defaults.js +8 -0
- package/dist/cjs/defaults.js.map +1 -0
- package/dist/cjs/index.d.ts +2 -0
- package/dist/cjs/index.d.ts.map +1 -0
- package/dist/cjs/index.js +6 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/package.json +3 -0
- package/dist/cjs/util/StringBuffer.d.ts +36 -0
- package/dist/cjs/util/StringBuffer.d.ts.map +1 -0
- package/dist/cjs/util/StringBuffer.js +58 -0
- package/dist/cjs/util/StringBuffer.js.map +1 -0
- package/dist/cjs/util/json.d.ts +8 -0
- package/dist/cjs/util/json.d.ts.map +1 -0
- package/dist/cjs/util/json.js +18 -0
- package/dist/cjs/util/json.js.map +1 -0
- package/dist/esm/cli.d.ts +3 -0
- package/dist/esm/cli.d.ts.map +1 -0
- package/dist/esm/cli.js +78 -0
- package/dist/esm/cli.js.map +1 -0
- package/dist/esm/convert.d.ts +22 -0
- package/dist/esm/convert.d.ts.map +1 -0
- package/dist/esm/convert.js +28 -0
- package/dist/esm/convert.js.map +1 -0
- package/dist/esm/converters/converter.d.ts +12 -0
- package/dist/esm/converters/converter.d.ts.map +1 -0
- package/dist/esm/converters/converter.js +2 -0
- package/dist/esm/converters/converter.js.map +1 -0
- package/dist/esm/converters/terraform.d.ts +14 -0
- package/dist/esm/converters/terraform.d.ts.map +1 -0
- package/dist/esm/converters/terraform.js +146 -0
- package/dist/esm/converters/terraform.js.map +1 -0
- package/dist/esm/defaults.d.ts +5 -0
- package/dist/esm/defaults.d.ts.map +1 -0
- package/dist/esm/defaults.js +5 -0
- package/dist/esm/defaults.js.map +1 -0
- package/dist/esm/index.d.ts +2 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +2 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/package.json +3 -0
- package/dist/esm/util/StringBuffer.d.ts +36 -0
- package/dist/esm/util/StringBuffer.d.ts.map +1 -0
- package/dist/esm/util/StringBuffer.js +52 -0
- package/dist/esm/util/StringBuffer.js.map +1 -0
- package/dist/esm/util/json.d.ts +8 -0
- package/dist/esm/util/json.d.ts.map +1 -0
- package/dist/esm/util/json.js +15 -0
- package/dist/esm/util/json.js.map +1 -0
- package/package.json +55 -0
package/dist/cjs/cli.js
ADDED
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
const cli_1 = require("@cloud-copilot/cli");
|
|
5
|
+
const iam_policy_1 = require("@cloud-copilot/iam-policy");
|
|
6
|
+
const fs_1 = require("fs");
|
|
7
|
+
const convert_js_1 = require("./convert.js");
|
|
8
|
+
const json_js_1 = require("./util/json.js");
|
|
9
|
+
async function run() {
|
|
10
|
+
const cli = (0, cli_1.parseCliArguments)('iam-convert', {}, {
|
|
11
|
+
indentBy: {
|
|
12
|
+
description: 'The string to use for indentation, defaults to two spaces. Wrap values in quotes',
|
|
13
|
+
type: 'string',
|
|
14
|
+
values: 'single'
|
|
15
|
+
},
|
|
16
|
+
lineSeparator: {
|
|
17
|
+
description: 'The string to use for new lines, defaults to "lf" (\\n). Use "crlf" for Windows style line endings',
|
|
18
|
+
type: 'enum',
|
|
19
|
+
values: 'single',
|
|
20
|
+
validValues: ['lf', 'crlf']
|
|
21
|
+
},
|
|
22
|
+
format: {
|
|
23
|
+
description: 'The format to convert to',
|
|
24
|
+
type: 'enum',
|
|
25
|
+
values: 'single',
|
|
26
|
+
validValues: ['tf']
|
|
27
|
+
},
|
|
28
|
+
file: {
|
|
29
|
+
description: 'A file to read the policy from. If not provided, stdin is used',
|
|
30
|
+
type: 'string',
|
|
31
|
+
values: 'single'
|
|
32
|
+
}
|
|
33
|
+
}, {
|
|
34
|
+
expectOperands: false
|
|
35
|
+
});
|
|
36
|
+
let policyContents = undefined;
|
|
37
|
+
if (cli.args.file) {
|
|
38
|
+
const fileExists = (0, fs_1.existsSync)(cli.args.file);
|
|
39
|
+
if (!fileExists) {
|
|
40
|
+
console.error(`File ${cli.args.file} does not exist`);
|
|
41
|
+
process.exit(1);
|
|
42
|
+
}
|
|
43
|
+
policyContents = (0, fs_1.readFileSync)(cli.args.file, 'utf-8');
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
const stdIn = await (0, cli_1.readStdin)(undefined);
|
|
47
|
+
if (!stdIn) {
|
|
48
|
+
console.error('No input provided. Must provide either a file using --file or pipe contents to stdin.');
|
|
49
|
+
cli.printHelp();
|
|
50
|
+
process.exit(1);
|
|
51
|
+
}
|
|
52
|
+
policyContents = stdIn;
|
|
53
|
+
}
|
|
54
|
+
const json = (0, json_js_1.tryParseJson)(policyContents);
|
|
55
|
+
if (!json) {
|
|
56
|
+
console.error('Invalid JSON provided');
|
|
57
|
+
process.exit(1);
|
|
58
|
+
}
|
|
59
|
+
const policyErrors = (0, iam_policy_1.validatePolicySyntax)(json);
|
|
60
|
+
if (policyErrors.length > 0) {
|
|
61
|
+
console.error('Invalid policy provided');
|
|
62
|
+
console.error(policyErrors);
|
|
63
|
+
process.exit(1);
|
|
64
|
+
}
|
|
65
|
+
const policy = (0, iam_policy_1.loadPolicy)(json);
|
|
66
|
+
const format = cli.args.format || 'tf';
|
|
67
|
+
const result = (0, convert_js_1.convert)(policy, 'tf', {
|
|
68
|
+
indentBy: cli.args.indentBy,
|
|
69
|
+
lineSeparator: cli.args.lineSeparator == 'crlf' ? `\r\n` : undefined
|
|
70
|
+
});
|
|
71
|
+
console.log(result);
|
|
72
|
+
}
|
|
73
|
+
run()
|
|
74
|
+
.catch((e) => {
|
|
75
|
+
console.error(e);
|
|
76
|
+
process.exit(1);
|
|
77
|
+
})
|
|
78
|
+
.then(() => { })
|
|
79
|
+
.finally(() => { });
|
|
80
|
+
//# sourceMappingURL=cli.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { Policy } from '@cloud-copilot/iam-policy';
|
|
2
|
+
import { TerraformConverter } from './converters/terraform.js';
|
|
3
|
+
declare const converters: {
|
|
4
|
+
/**
|
|
5
|
+
* Convert to Terraform
|
|
6
|
+
*/
|
|
7
|
+
tf: typeof TerraformConverter;
|
|
8
|
+
};
|
|
9
|
+
/**
|
|
10
|
+
* Convert a policy to a string in the specified format
|
|
11
|
+
*
|
|
12
|
+
* @param policy the policy to convert, it is assumed to be valid
|
|
13
|
+
* @param format the format to convert to
|
|
14
|
+
* @param options optional options for the conversion
|
|
15
|
+
* @returns the policy as a string converted to the specified format
|
|
16
|
+
*/
|
|
17
|
+
export declare function convert(policy: Policy, format: keyof typeof converters, options?: {
|
|
18
|
+
indentBy?: string;
|
|
19
|
+
lineSeparator?: string;
|
|
20
|
+
}): string;
|
|
21
|
+
export {};
|
|
22
|
+
//# sourceMappingURL=convert.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"convert.d.ts","sourceRoot":"","sources":["../../src/convert.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAA;AAClD,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAA;AAI9D,QAAA,MAAM,UAAU;IACd;;OAEG;;CAEJ,CAAA;AAED;;;;;;;GAOG;AACH,wBAAgB,OAAO,CACrB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,OAAO,UAAU,EAC/B,OAAO,CAAC,EAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,aAAa,CAAC,EAAE,MAAM,CAAA;CAAE,GACtD,MAAM,CAWR"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.convert = convert;
|
|
4
|
+
const terraform_js_1 = require("./converters/terraform.js");
|
|
5
|
+
const defaults_js_1 = require("./defaults.js");
|
|
6
|
+
const StringBuffer_js_1 = require("./util/StringBuffer.js");
|
|
7
|
+
const converters = {
|
|
8
|
+
/**
|
|
9
|
+
* Convert to Terraform
|
|
10
|
+
*/
|
|
11
|
+
tf: terraform_js_1.TerraformConverter
|
|
12
|
+
};
|
|
13
|
+
/**
|
|
14
|
+
* Convert a policy to a string in the specified format
|
|
15
|
+
*
|
|
16
|
+
* @param policy the policy to convert, it is assumed to be valid
|
|
17
|
+
* @param format the format to convert to
|
|
18
|
+
* @param options optional options for the conversion
|
|
19
|
+
* @returns the policy as a string converted to the specified format
|
|
20
|
+
*/
|
|
21
|
+
function convert(policy, format, options) {
|
|
22
|
+
if (!converters[format]) {
|
|
23
|
+
throw new Error(`Unsupported format: ${format}`);
|
|
24
|
+
}
|
|
25
|
+
options = { ...defaults_js_1.defaultOptions, ...(options || {}) };
|
|
26
|
+
const converter = new converters[format]();
|
|
27
|
+
const stringBuffer = new StringBuffer_js_1.StringBuffer(options.indentBy, options.lineSeparator);
|
|
28
|
+
converter.convert(policy, stringBuffer);
|
|
29
|
+
return stringBuffer.toString();
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=convert.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"convert.js","sourceRoot":"","sources":["../../src/convert.ts"],"names":[],"mappings":";;AAoBA,0BAeC;AAlCD,4DAA8D;AAC9D,+CAA8C;AAC9C,4DAAqD;AAErD,MAAM,UAAU,GAAG;IACjB;;OAEG;IACH,EAAE,EAAE,iCAAkB;CACvB,CAAA;AAED;;;;;;;GAOG;AACH,SAAgB,OAAO,CACrB,MAAc,EACd,MAA+B,EAC/B,OAAuD;IAEvD,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,uBAAuB,MAAM,EAAE,CAAC,CAAA;IAClD,CAAC;IAED,OAAO,GAAG,EAAE,GAAG,4BAAc,EAAE,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC,EAAE,CAAA;IAEnD,MAAM,SAAS,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,EAAE,CAAA;IAC1C,MAAM,YAAY,GAAG,IAAI,8BAAY,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,aAAa,CAAC,CAAA;IAC9E,SAAS,CAAC,OAAO,CAAC,MAAM,EAAE,YAAY,CAAC,CAAA;IACvC,OAAO,YAAY,CAAC,QAAQ,EAAE,CAAA;AAChC,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { Policy } from "@cloud-copilot/iam-policy";
|
|
2
|
+
import { StringBuffer } from "../util/StringBuffer.js";
|
|
3
|
+
export interface Converter {
|
|
4
|
+
/**
|
|
5
|
+
* Converts the given policy to a new format in the given StringBuffer
|
|
6
|
+
*
|
|
7
|
+
* @param policy the policy to convert
|
|
8
|
+
* @param buffer the buffer to write the result to
|
|
9
|
+
*/
|
|
10
|
+
convert(policy: Policy, buffer: StringBuffer): void;
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=converter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"converter.d.ts","sourceRoot":"","sources":["../../../src/converters/converter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAEvD,MAAM,WAAW,SAAS;IACxB;;;;;OAKG;IACH,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,GAAG,IAAI,CAAC;CACrD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"converter.js","sourceRoot":"","sources":["../../../src/converters/converter.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { Policy } from '@cloud-copilot/iam-policy';
|
|
2
|
+
import { StringBuffer } from '../util/StringBuffer.js';
|
|
3
|
+
import { Converter } from './converter.js';
|
|
4
|
+
/**
|
|
5
|
+
* Converts an IAM policy to a Terraform aws_iam_policy_document data object.
|
|
6
|
+
*/
|
|
7
|
+
export declare class TerraformConverter implements Converter {
|
|
8
|
+
convert(policy: Policy, stringBuffer: StringBuffer): void;
|
|
9
|
+
private convertActions;
|
|
10
|
+
private convertResources;
|
|
11
|
+
private convertPrincipals;
|
|
12
|
+
private convertConditions;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=terraform.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"terraform.d.ts","sourceRoot":"","sources":["../../../src/converters/terraform.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqB,MAAM,EAAuB,MAAM,2BAA2B,CAAA;AAC1F,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA;AACtD,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAE1C;;GAEG;AACH,qBAAa,kBAAmB,YAAW,SAAS;IAClD,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,YAAY;IAoElD,OAAO,CAAC,cAAc;IAatB,OAAO,CAAC,gBAAgB;IAaxB,OAAO,CAAC,iBAAiB;IAqDzB,OAAO,CAAC,iBAAiB;CAuB1B"}
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TerraformConverter = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Converts an IAM policy to a Terraform aws_iam_policy_document data object.
|
|
6
|
+
*/
|
|
7
|
+
class TerraformConverter {
|
|
8
|
+
convert(policy, stringBuffer) {
|
|
9
|
+
stringBuffer.pushLine(`data "aws_iam_policy_document" "policy" {`);
|
|
10
|
+
stringBuffer.withIndent((policyBuffer) => {
|
|
11
|
+
if (policy.version() && policy.version() !== '2012-10-17') {
|
|
12
|
+
policyBuffer.pushLine(`version = "${policy.version()}"`);
|
|
13
|
+
}
|
|
14
|
+
for (const statement of policy.statements()) {
|
|
15
|
+
policyBuffer.pushLine(`statement {`);
|
|
16
|
+
policyBuffer.withIndent((statementBuffer) => {
|
|
17
|
+
if (statement.sid()) {
|
|
18
|
+
statementBuffer.pushLine(`sid = "${statement.sid()}"`);
|
|
19
|
+
statementBuffer.pushLine('');
|
|
20
|
+
}
|
|
21
|
+
if (statement.isDeny()) {
|
|
22
|
+
statementBuffer.pushLine(`effect = "Deny"`);
|
|
23
|
+
}
|
|
24
|
+
if (statement.isActionStatement()) {
|
|
25
|
+
statementBuffer.pushLine(`actions = [`);
|
|
26
|
+
this.convertActions(statement.actions(), statementBuffer);
|
|
27
|
+
statementBuffer.pushLine(`]`);
|
|
28
|
+
}
|
|
29
|
+
if (statement.isNotActionStatement()) {
|
|
30
|
+
statementBuffer.pushLine(`not_actions = [`);
|
|
31
|
+
this.convertActions(statement.notActions(), statementBuffer);
|
|
32
|
+
statementBuffer.pushLine(`]`);
|
|
33
|
+
}
|
|
34
|
+
if (statement.isResourceStatement()) {
|
|
35
|
+
statementBuffer.pushLine(`resources = [`);
|
|
36
|
+
this.convertResources(statement.resources(), statementBuffer);
|
|
37
|
+
statementBuffer.pushLine(`]`);
|
|
38
|
+
}
|
|
39
|
+
if (statement.isNotResourceStatement()) {
|
|
40
|
+
statementBuffer.pushLine(`not_resources = [`);
|
|
41
|
+
this.convertResources(statement.notResources(), statementBuffer);
|
|
42
|
+
statementBuffer.pushLine(`]`);
|
|
43
|
+
}
|
|
44
|
+
if (statement.isPrincipalStatement()) {
|
|
45
|
+
this.convertPrincipals(statement.principals(), 'principals', statement.hasSingleWildcardPrincipal(), statementBuffer);
|
|
46
|
+
}
|
|
47
|
+
if (statement.isNotPrincipalStatement()) {
|
|
48
|
+
this.convertPrincipals(statement.notPrincipals(), 'not_principals', statement.hasSingleWildcardNotPrincipal(), statementBuffer);
|
|
49
|
+
}
|
|
50
|
+
this.convertConditions(statement.conditions(), statementBuffer);
|
|
51
|
+
});
|
|
52
|
+
stringBuffer.pushLine(`}`);
|
|
53
|
+
}
|
|
54
|
+
});
|
|
55
|
+
stringBuffer.indent();
|
|
56
|
+
stringBuffer.unindent();
|
|
57
|
+
stringBuffer.pushLine(`}`);
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
convertActions(actions, statementBuffer) {
|
|
61
|
+
const actionCount = actions.length;
|
|
62
|
+
statementBuffer.withIndent((actionsBuffer) => {
|
|
63
|
+
actions.forEach((action, index) => {
|
|
64
|
+
let actionString = `"${action.value()}"`;
|
|
65
|
+
if (actionCount > 1 && index < actionCount - 1) {
|
|
66
|
+
actionString += ',';
|
|
67
|
+
}
|
|
68
|
+
actionsBuffer.pushLine(actionString);
|
|
69
|
+
});
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
convertResources(resources, statementBuffer) {
|
|
73
|
+
const resourceCount = resources.length;
|
|
74
|
+
statementBuffer.withIndent((resourcesBuffer) => {
|
|
75
|
+
resources.forEach((resource, index) => {
|
|
76
|
+
let resourceString = `"${resource.value()}"`;
|
|
77
|
+
if (resourceCount > 1 && index < resourceCount - 1) {
|
|
78
|
+
resourceString += ',';
|
|
79
|
+
}
|
|
80
|
+
resourcesBuffer.pushLine(resourceString);
|
|
81
|
+
});
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
convertPrincipals(principals, principalType, hasSingleWildcard, statementBuffer) {
|
|
85
|
+
if (hasSingleWildcard) {
|
|
86
|
+
statementBuffer.pushLine(`${principalType} {`);
|
|
87
|
+
statementBuffer.withIndent((principalBuffer) => {
|
|
88
|
+
principalBuffer.pushLine(`type = "*"`);
|
|
89
|
+
principalBuffer.pushLine(`identifiers = "*"`);
|
|
90
|
+
});
|
|
91
|
+
statementBuffer.pushLine(`}`);
|
|
92
|
+
statementBuffer.pushLine('');
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
const principalsByType = principals.reduce((acc, principal) => {
|
|
96
|
+
const type = principal.type();
|
|
97
|
+
if (!acc[type]) {
|
|
98
|
+
acc[type] = [];
|
|
99
|
+
}
|
|
100
|
+
acc[type].push(principal);
|
|
101
|
+
return acc;
|
|
102
|
+
}, {});
|
|
103
|
+
for (const type in principalsByType) {
|
|
104
|
+
statementBuffer.pushLine(`${principalType} {`);
|
|
105
|
+
statementBuffer.withIndent((principalBuffer) => {
|
|
106
|
+
principalBuffer.pushLine(`type = "${type}"`);
|
|
107
|
+
principalBuffer.pushLine(`identifiers = [`);
|
|
108
|
+
const principalsForType = principalsByType[type];
|
|
109
|
+
const principalCount = principalsForType.length;
|
|
110
|
+
principalBuffer.withIndent((identifiersBuffer) => {
|
|
111
|
+
principalsForType.forEach((principal, index) => {
|
|
112
|
+
let identifierString = `"${principal.value()}"`;
|
|
113
|
+
if (principalCount > 1 && index < principalCount - 1) {
|
|
114
|
+
identifierString += ',';
|
|
115
|
+
}
|
|
116
|
+
identifiersBuffer.pushLine(identifierString);
|
|
117
|
+
});
|
|
118
|
+
});
|
|
119
|
+
principalBuffer.pushLine(`]`);
|
|
120
|
+
});
|
|
121
|
+
statementBuffer.pushLine(`}`);
|
|
122
|
+
statementBuffer.pushLine('');
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
convertConditions(conditions, statementBuffer) {
|
|
126
|
+
for (const condition of conditions) {
|
|
127
|
+
statementBuffer.pushLine(`condition {`);
|
|
128
|
+
statementBuffer.withIndent((conditionBuffer) => {
|
|
129
|
+
conditionBuffer.pushLine(`test = "${condition.operation().value()}"`);
|
|
130
|
+
conditionBuffer.pushLine(`variable = "${condition.conditionKey()}"`);
|
|
131
|
+
conditionBuffer.pushLine(`values = [`);
|
|
132
|
+
const numberOfValues = condition.conditionValues().length;
|
|
133
|
+
conditionBuffer.withIndent((valuesBuffer) => {
|
|
134
|
+
condition.conditionValues().forEach((value, index) => {
|
|
135
|
+
let valueString = `"${value}"`;
|
|
136
|
+
if (numberOfValues > 1 && index < numberOfValues - 1) {
|
|
137
|
+
valueString += ',';
|
|
138
|
+
}
|
|
139
|
+
valuesBuffer.pushLine(valueString);
|
|
140
|
+
});
|
|
141
|
+
});
|
|
142
|
+
conditionBuffer.pushLine(']');
|
|
143
|
+
});
|
|
144
|
+
statementBuffer.pushLine('}');
|
|
145
|
+
statementBuffer.pushLine('');
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
exports.TerraformConverter = TerraformConverter;
|
|
150
|
+
//# sourceMappingURL=terraform.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"terraform.js","sourceRoot":"","sources":["../../../src/converters/terraform.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"defaults.d.ts","sourceRoot":"","sources":["../../src/defaults.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,cAAc;;;CAG1B,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"defaults.js","sourceRoot":"","sources":["../../src/defaults.ts"],"names":[],"mappings":";;;AAAa,QAAA,cAAc,GAAG;IAC5B,QAAQ,EAAE,IAAI;IACd,aAAa,EAAE,IAAI;CACpB,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.convert = void 0;
|
|
4
|
+
var convert_js_1 = require("./convert.js");
|
|
5
|
+
Object.defineProperty(exports, "convert", { enumerable: true, get: function () { return convert_js_1.convert; } });
|
|
6
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;AAAA,2CAAsC;AAA7B,qGAAA,OAAO,OAAA"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
export declare class StringBuffer {
|
|
2
|
+
private buffer;
|
|
3
|
+
private indentLevel;
|
|
4
|
+
private indentBy;
|
|
5
|
+
private lineSeparator;
|
|
6
|
+
constructor(indentBy?: string, lineSeparator?: string);
|
|
7
|
+
/**
|
|
8
|
+
* Executes a callback the indent level increased by one level
|
|
9
|
+
*/
|
|
10
|
+
withIndent(callback: (buffer: StringBuffer) => void): void;
|
|
11
|
+
/**
|
|
12
|
+
* Adds a new line to the buffer
|
|
13
|
+
* @param text the text to add
|
|
14
|
+
*/
|
|
15
|
+
pushLine(text: string): void;
|
|
16
|
+
/**
|
|
17
|
+
* Increases the indent level
|
|
18
|
+
*/
|
|
19
|
+
indent(): void;
|
|
20
|
+
/**
|
|
21
|
+
* Decreases the indent level
|
|
22
|
+
*/
|
|
23
|
+
unindent(): void;
|
|
24
|
+
/**
|
|
25
|
+
* Create the final string from the buffer
|
|
26
|
+
* @returns the final string of each line joined by a new line
|
|
27
|
+
*/
|
|
28
|
+
toString(): string;
|
|
29
|
+
/**
|
|
30
|
+
* Get the current buffer contents
|
|
31
|
+
*
|
|
32
|
+
* @returns the string array of buffer contents
|
|
33
|
+
*/
|
|
34
|
+
getBuffer(): string[];
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=StringBuffer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StringBuffer.d.ts","sourceRoot":"","sources":["../../../src/util/StringBuffer.ts"],"names":[],"mappings":"AAAA,qBAAa,YAAY;IACvB,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,WAAW,CAAI;IACvB,OAAO,CAAC,QAAQ,CAAQ;IACxB,OAAO,CAAC,aAAa,CAAQ;gBAEV,QAAQ,CAAC,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,MAAM;IAK5D;;OAEG;IACI,UAAU,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,YAAY,KAAK,IAAI,GAAG,IAAI;IAMjE;;;OAGG;IACI,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAKnC;;OAEG;IACI,MAAM,IAAI,IAAI;IAIrB;;OAEG;IACI,QAAQ,IAAI,IAAI;IAIvB;;;OAGG;IACI,QAAQ,IAAI,MAAM;IAIzB;;;;OAIG;IACI,SAAS,IAAI,MAAM,EAAE;CAG7B"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.StringBuffer = void 0;
|
|
4
|
+
class StringBuffer {
|
|
5
|
+
buffer = [];
|
|
6
|
+
indentLevel = 0;
|
|
7
|
+
indentBy;
|
|
8
|
+
lineSeparator;
|
|
9
|
+
constructor(indentBy, lineSeparator) {
|
|
10
|
+
this.indentBy = indentBy ?? ' ';
|
|
11
|
+
this.lineSeparator = lineSeparator ?? '\n';
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Executes a callback the indent level increased by one level
|
|
15
|
+
*/
|
|
16
|
+
withIndent(callback) {
|
|
17
|
+
this.indent();
|
|
18
|
+
callback(this);
|
|
19
|
+
this.unindent();
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Adds a new line to the buffer
|
|
23
|
+
* @param text the text to add
|
|
24
|
+
*/
|
|
25
|
+
pushLine(text) {
|
|
26
|
+
const indent = this.indentBy.repeat(this.indentLevel);
|
|
27
|
+
this.buffer.push(indent + text);
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Increases the indent level
|
|
31
|
+
*/
|
|
32
|
+
indent() {
|
|
33
|
+
this.indentLevel++;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Decreases the indent level
|
|
37
|
+
*/
|
|
38
|
+
unindent() {
|
|
39
|
+
this.indentLevel = Math.max(this.indentLevel - 1, 0);
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Create the final string from the buffer
|
|
43
|
+
* @returns the final string of each line joined by a new line
|
|
44
|
+
*/
|
|
45
|
+
toString() {
|
|
46
|
+
return this.buffer.join(this.lineSeparator);
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Get the current buffer contents
|
|
50
|
+
*
|
|
51
|
+
* @returns the string array of buffer contents
|
|
52
|
+
*/
|
|
53
|
+
getBuffer() {
|
|
54
|
+
return this.buffer;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
exports.StringBuffer = StringBuffer;
|
|
58
|
+
//# sourceMappingURL=StringBuffer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StringBuffer.js","sourceRoot":"","sources":["../../../src/util/StringBuffer.ts"],"names":[],"mappings":";;;AAAA,MAAa,YAAY;IACf,MAAM,GAAa,EAAE,CAAA;IACrB,WAAW,GAAG,CAAC,CAAA;IACf,QAAQ,CAAQ;IAChB,aAAa,CAAQ;IAE7B,YAAmB,QAAiB,EAAE,aAAsB;QAC1D,IAAI,CAAC,QAAQ,GAAG,QAAQ,IAAI,IAAI,CAAA;QAChC,IAAI,CAAC,aAAa,GAAG,aAAa,IAAI,IAAI,CAAA;IAC5C,CAAC;IAED;;OAEG;IACI,UAAU,CAAC,QAAwC;QACxD,IAAI,CAAC,MAAM,EAAE,CAAA;QACb,QAAQ,CAAC,IAAI,CAAC,CAAA;QACd,IAAI,CAAC,QAAQ,EAAE,CAAA;IACjB,CAAC;IAED;;;OAGG;IACI,QAAQ,CAAC,IAAY;QAC1B,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;QACrD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,CAAA;IACjC,CAAC;IAED;;OAEG;IACI,MAAM;QACX,IAAI,CAAC,WAAW,EAAE,CAAA;IACpB,CAAC;IAED;;OAEG;IACI,QAAQ;QACb,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,GAAG,CAAC,EAAE,CAAC,CAAC,CAAA;IACtD,CAAC;IAED;;;OAGG;IACI,QAAQ;QACb,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAA;IAC7C,CAAC;IAED;;;;OAIG;IACI,SAAS;QACd,OAAO,IAAI,CAAC,MAAM,CAAA;IACpB,CAAC;CACF;AA3DD,oCA2DC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Try to parse a string as JSON. If the string is not valid JSON, return undefined.
|
|
3
|
+
*
|
|
4
|
+
* @param input the string to parse
|
|
5
|
+
* @returns the parsed JSON or undefined if the input is not valid JSON
|
|
6
|
+
*/
|
|
7
|
+
export declare function tryParseJson(input: string): any | undefined;
|
|
8
|
+
//# sourceMappingURL=json.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json.d.ts","sourceRoot":"","sources":["../../../src/util/json.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,GAAG,GAAG,SAAS,CAM3D"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.tryParseJson = tryParseJson;
|
|
4
|
+
/**
|
|
5
|
+
* Try to parse a string as JSON. If the string is not valid JSON, return undefined.
|
|
6
|
+
*
|
|
7
|
+
* @param input the string to parse
|
|
8
|
+
* @returns the parsed JSON or undefined if the input is not valid JSON
|
|
9
|
+
*/
|
|
10
|
+
function tryParseJson(input) {
|
|
11
|
+
try {
|
|
12
|
+
return JSON.parse(input);
|
|
13
|
+
}
|
|
14
|
+
catch (e) {
|
|
15
|
+
return undefined;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=json.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json.js","sourceRoot":"","sources":["../../../src/util/json.ts"],"names":[],"mappings":";;AAMA,oCAMC;AAZD;;;;;GAKG;AACH,SAAgB,YAAY,CAAC,KAAa;IACxC,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;IAC1B,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO,SAAS,CAAA;IAClB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":""}
|
package/dist/esm/cli.js
ADDED
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { parseCliArguments, readStdin } from '@cloud-copilot/cli';
|
|
3
|
+
import { loadPolicy, validatePolicySyntax } from '@cloud-copilot/iam-policy';
|
|
4
|
+
import { existsSync, readFileSync } from 'fs';
|
|
5
|
+
import { convert } from './convert.js';
|
|
6
|
+
import { tryParseJson } from './util/json.js';
|
|
7
|
+
async function run() {
|
|
8
|
+
const cli = parseCliArguments('iam-convert', {}, {
|
|
9
|
+
indentBy: {
|
|
10
|
+
description: 'The string to use for indentation, defaults to two spaces. Wrap values in quotes',
|
|
11
|
+
type: 'string',
|
|
12
|
+
values: 'single'
|
|
13
|
+
},
|
|
14
|
+
lineSeparator: {
|
|
15
|
+
description: 'The string to use for new lines, defaults to "lf" (\\n). Use "crlf" for Windows style line endings',
|
|
16
|
+
type: 'enum',
|
|
17
|
+
values: 'single',
|
|
18
|
+
validValues: ['lf', 'crlf']
|
|
19
|
+
},
|
|
20
|
+
format: {
|
|
21
|
+
description: 'The format to convert to',
|
|
22
|
+
type: 'enum',
|
|
23
|
+
values: 'single',
|
|
24
|
+
validValues: ['tf']
|
|
25
|
+
},
|
|
26
|
+
file: {
|
|
27
|
+
description: 'A file to read the policy from. If not provided, stdin is used',
|
|
28
|
+
type: 'string',
|
|
29
|
+
values: 'single'
|
|
30
|
+
}
|
|
31
|
+
}, {
|
|
32
|
+
expectOperands: false
|
|
33
|
+
});
|
|
34
|
+
let policyContents = undefined;
|
|
35
|
+
if (cli.args.file) {
|
|
36
|
+
const fileExists = existsSync(cli.args.file);
|
|
37
|
+
if (!fileExists) {
|
|
38
|
+
console.error(`File ${cli.args.file} does not exist`);
|
|
39
|
+
process.exit(1);
|
|
40
|
+
}
|
|
41
|
+
policyContents = readFileSync(cli.args.file, 'utf-8');
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
const stdIn = await readStdin(undefined);
|
|
45
|
+
if (!stdIn) {
|
|
46
|
+
console.error('No input provided. Must provide either a file using --file or pipe contents to stdin.');
|
|
47
|
+
cli.printHelp();
|
|
48
|
+
process.exit(1);
|
|
49
|
+
}
|
|
50
|
+
policyContents = stdIn;
|
|
51
|
+
}
|
|
52
|
+
const json = tryParseJson(policyContents);
|
|
53
|
+
if (!json) {
|
|
54
|
+
console.error('Invalid JSON provided');
|
|
55
|
+
process.exit(1);
|
|
56
|
+
}
|
|
57
|
+
const policyErrors = validatePolicySyntax(json);
|
|
58
|
+
if (policyErrors.length > 0) {
|
|
59
|
+
console.error('Invalid policy provided');
|
|
60
|
+
console.error(policyErrors);
|
|
61
|
+
process.exit(1);
|
|
62
|
+
}
|
|
63
|
+
const policy = loadPolicy(json);
|
|
64
|
+
const format = cli.args.format || 'tf';
|
|
65
|
+
const result = convert(policy, 'tf', {
|
|
66
|
+
indentBy: cli.args.indentBy,
|
|
67
|
+
lineSeparator: cli.args.lineSeparator == 'crlf' ? `\r\n` : undefined
|
|
68
|
+
});
|
|
69
|
+
console.log(result);
|
|
70
|
+
}
|
|
71
|
+
run()
|
|
72
|
+
.catch((e) => {
|
|
73
|
+
console.error(e);
|
|
74
|
+
process.exit(1);
|
|
75
|
+
})
|
|
76
|
+
.then(() => { })
|
|
77
|
+
.finally(() => { });
|
|
78
|
+
//# sourceMappingURL=cli.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":"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"}
|