aws-iam-policy-tool
Version:
AWS IAM role/policy management cli tool
58 lines (57 loc) • 2.28 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const policy_1 = require("../aws/policy");
const result_1 = require("../utils/result");
const operation_1 = require("../aws/operation");
class PolicyRegisterer {
constructor(opts = {}) {
this._color = !(opts['plain'] || false);
this._overwrite = opts['overwrite'] || false;
}
async prepare() {
const arnPrefix = await policy_1.getPolicyArnPrefix();
this.policyFetcher = new policy_1.PolicyFetcher(arnPrefix);
return arnPrefix;
}
async register(entry) {
const name = entry.policyName;
try {
await operation_1.createPolicy(entry.toCreatePolicyParams(4));
return result_1.OK('Created %1', name);
}
catch (err) {
if (err.code === 'EntityAlreadyExists') {
if (this._overwrite) {
return this.updatePolicyVersion(entry);
}
else {
return result_1.Skip('%1 already exists.', name);
}
}
else if (err.code === 'MalformedPolicyDocument') {
return result_1.NG('%1 is invalid Policy JSON format.', name);
}
throw err;
}
}
async updatePolicyVersion(entry) {
const name = entry.policyName;
const localDocJson = entry.documentAsJson();
const { oldestId: deleteVerId, count, currentPolicy: remotePolicy, } = await this.policyFetcher.getPolicyDefaultWithVersionInfo(entry);
if (localDocJson === remotePolicy.documentAsJson()) {
return result_1.Skip('%1 not changed', name);
}
else {
if (count === 5) {
await operation_1.deletePolicyVersion(remotePolicy.arn, deleteVerId);
await operation_1.createPolicyDefaultVersion(remotePolicy.arn, localDocJson);
return result_1.OK(`Updated %1 and deleted the oldest ${deleteVerId}`, name);
}
else {
await operation_1.createPolicyDefaultVersion(remotePolicy.arn, localDocJson);
return result_1.OK('Updated %1', name);
}
}
}
}
exports.PolicyRegisterer = PolicyRegisterer;