UNPKG

aws-iam-policy-tool

Version:
58 lines (57 loc) 2.28 kB
"use strict"; 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;