UNPKG

cdk-multi-profile-plugin

Version:

Adds multi profile/account, mfa and aws sso support to cdk apps

125 lines 12.9 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.PrecedenceProfileMapper = exports.LocalProjectDirMapper = exports.EnvironmentAwareGlobalProfileMapper = exports.PackageJsonProfileMapper = exports.JsonFileProfileMapper = void 0; const fs = __importStar(require("fs-extra")); const path = __importStar(require("path")); const os = __importStar(require("os")); /* * Resolves profiles from a json file. The key for resolving a mapping is "awsProfiles". * * example: * `{ * "awsProfiles": { * "123": "default123", * "456": "default123" * } * }` * */ class JsonFileProfileMapper { constructor(props) { this._workingDirectory = props.workingDirectory; this._filename = props.filename; } resolve() { const filename = path.join(this._workingDirectory, this._filename); if (!fs.existsSync(filename)) { return {}; } try { const pkg = JSON.parse(fs.readFileSync(filename, { encoding: 'utf8', flag: 'r', })); const { awsProfiles } = pkg; return awsProfiles; } catch (e) { console.log(`Failed to parse file ${this._filename}: `, e.message); } return {}; } } exports.JsonFileProfileMapper = JsonFileProfileMapper; // Will use local package.json for mapping an accountnumber to a local profile class PackageJsonProfileMapper { resolve() { return new JsonFileProfileMapper({ workingDirectory: process.cwd(), filename: 'package.json', }).resolve(); } } exports.PackageJsonProfileMapper = PackageJsonProfileMapper; // Will default to ~/.cdkmultiprofileplung.json and can be overriden by environment variable // CDK_MULTI_PROFILE_PLUGIN_CONFIG=/path/to/file.json class EnvironmentAwareGlobalProfileMapper { constructor() { this._defaultGlobalConfigurationFile = '.cdkmultiprofileplugin.json'; this._workingDirectory = os.homedir(); this._filename = this._defaultGlobalConfigurationFile; const configFileLocationOverride = process.env[EnvironmentAwareGlobalProfileMapper.environmentVariableName]; if (configFileLocationOverride) { const configFile = path.parse(configFileLocationOverride); this._workingDirectory = configFile.dir; this._filename = configFile.base; } } resolve() { return new JsonFileProfileMapper({ workingDirectory: this._workingDirectory, filename: this._filename, }).resolve(); } } exports.EnvironmentAwareGlobalProfileMapper = EnvironmentAwareGlobalProfileMapper; EnvironmentAwareGlobalProfileMapper.environmentVariableName = 'CDK_MULTI_PROFILE_PLUGIN_CONFIG'; // Can be used in local project directory. Can be added or ignored by your VCS class LocalProjectDirMapper { resolve() { return new JsonFileProfileMapper({ workingDirectory: process.cwd(), filename: 'cdkmultiprofileplugin.json', }).resolve(); } } exports.LocalProjectDirMapper = LocalProjectDirMapper; // Uses all mappers and applies precedence class PrecedenceProfileMapper { resolve() { // Temporary in order to get it working again const packageJsonMappings = new PackageJsonProfileMapper().resolve(); const projectLocalMappings = new LocalProjectDirMapper().resolve(); const globalMappings = new EnvironmentAwareGlobalProfileMapper().resolve(); return { ...packageJsonMappings, ...projectLocalMappings, ...globalMappings, }; } } exports.PrecedenceProfileMapper = PrecedenceProfileMapper; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZmlsZS1tYXBwZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvcHJvZmlsZS1tYXBwZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSw2Q0FBK0I7QUFDL0IsMkNBQTZCO0FBQzdCLHVDQUF5QjtBQWN6Qjs7Ozs7Ozs7Ozs7R0FXRztBQUNILE1BQWEscUJBQXFCO0lBSWhDLFlBQVksS0FBaUM7UUFDM0MsSUFBSSxDQUFDLGlCQUFpQixHQUFHLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQztRQUNoRCxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUM7SUFDbEMsQ0FBQztJQUVELE9BQU87UUFDTCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDbkUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLEVBQUU7WUFDNUIsT0FBTyxFQUFFLENBQUM7U0FDWDtRQUNELElBQUk7WUFDRixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUNwQixFQUFFLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRTtnQkFDeEIsUUFBUSxFQUFFLE1BQU07Z0JBQ2hCLElBQUksRUFBRSxHQUFHO2FBQ1YsQ0FBQyxDQUNILENBQUM7WUFDRixNQUFNLEVBQUUsV0FBVyxFQUFFLEdBQUcsR0FBRyxDQUFDO1lBQzVCLE9BQU8sV0FBVyxDQUFDO1NBQ3BCO1FBQUMsT0FBTyxDQUFDLEVBQUU7WUFDVixPQUFPLENBQUMsR0FBRyxDQUNULHdCQUF3QixJQUFJLENBQUMsU0FBUyxJQUFJLEVBQ3pDLENBQVcsQ0FBQyxPQUFPLENBQ3JCLENBQUM7U0FDSDtRQUNELE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQztDQUNGO0FBL0JELHNEQStCQztBQUVELDhFQUE4RTtBQUM5RSxNQUFhLHdCQUF3QjtJQUNuQyxPQUFPO1FBQ0wsT0FBTyxJQUFJLHFCQUFxQixDQUFDO1lBQy9CLGdCQUFnQixFQUFFLE9BQU8sQ0FBQyxHQUFHLEVBQUU7WUFDL0IsUUFBUSxFQUFFLGNBQWM7U0FDekIsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ2YsQ0FBQztDQUNGO0FBUEQsNERBT0M7QUFFRCw0RkFBNEY7QUFDNUYscURBQXFEO0FBQ3JELE1BQWEsbUNBQW1DO0lBUTlDO1FBTGlCLG9DQUErQixHQUM5Qyw2QkFBNkIsQ0FBQztRQUs5QixJQUFJLENBQUMsaUJBQWlCLEdBQUcsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ3RDLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLCtCQUErQixDQUFDO1FBQ3RELE1BQU0sMEJBQTBCLEdBQzlCLE9BQU8sQ0FBQyxHQUFHLENBQUMsbUNBQW1DLENBQUMsdUJBQXVCLENBQUMsQ0FBQztRQUMzRSxJQUFJLDBCQUEwQixFQUFFO1lBQzlCLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsMEJBQTBCLENBQUMsQ0FBQztZQUMxRCxJQUFJLENBQUMsaUJBQWlCLEdBQUcsVUFBVSxDQUFDLEdBQUcsQ0FBQztZQUN4QyxJQUFJLENBQUMsU0FBUyxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUM7U0FDbEM7SUFDSCxDQUFDO0lBRUQsT0FBTztRQUNMLE9BQU8sSUFBSSxxQkFBcUIsQ0FBQztZQUMvQixnQkFBZ0IsRUFBRSxJQUFJLENBQUMsaUJBQWlCO1lBQ3hDLFFBQVEsRUFBRSxJQUFJLENBQUMsU0FBUztTQUN6QixDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDZixDQUFDOztBQXpCSCxrRkEwQkM7QUF6QndCLDJEQUF1QixHQUM1QyxpQ0FBaUMsQ0FBQztBQTBCdEMsOEVBQThFO0FBQzlFLE1BQWEscUJBQXFCO0lBQ2hDLE9BQU87UUFDTCxPQUFPLElBQUkscUJBQXFCLENBQUM7WUFDL0IsZ0JBQWdCLEVBQUUsT0FBTyxDQUFDLEdBQUcsRUFBRTtZQUMvQixRQUFRLEVBQUUsNEJBQTRCO1NBQ3ZDLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUNmLENBQUM7Q0FDRjtBQVBELHNEQU9DO0FBRUQsMENBQTBDO0FBQzFDLE1BQWEsdUJBQXVCO0lBQ2xDLE9BQU87UUFDTCw2Q0FBNkM7UUFDN0MsTUFBTSxtQkFBbUIsR0FBRyxJQUFJLHdCQUF3QixFQUFFLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDckUsTUFBTSxvQkFBb0IsR0FBRyxJQUFJLHFCQUFxQixFQUFFLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDbkUsTUFBTSxjQUFjLEdBQUcsSUFBSSxtQ0FBbUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQzNFLE9BQU87WUFDTCxHQUFHLG1CQUFtQjtZQUN0QixHQUFHLG9CQUFvQjtZQUN2QixHQUFHLGNBQWM7U0FDbEIsQ0FBQztJQUNKLENBQUM7Q0FDRjtBQVpELDBEQVlDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMtZXh0cmEnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCAqIGFzIG9zIGZyb20gJ29zJztcblxuLyoqXG4gKiBDcmVhdGVzIGEgbWFwcGluZyBmcm9tIGFjY291bnRudW1iZXIgdG8gYSBsb2NhbCBhd3MgcHJvZmlsZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFByb2ZpbGVNYXBwZXIge1xuICByZXNvbHZlKCk6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSnNvbkZpbGVQcm9maWxlTWFwcGVyUHJvcHMge1xuICB3b3JraW5nRGlyZWN0b3J5OiBzdHJpbmc7XG4gIGZpbGVuYW1lOiBzdHJpbmc7XG59XG5cbi8qXG4gKiBSZXNvbHZlcyBwcm9maWxlcyBmcm9tIGEganNvbiBmaWxlLiBUaGUga2V5IGZvciByZXNvbHZpbmcgYSBtYXBwaW5nIGlzIFwiYXdzUHJvZmlsZXNcIi5cbiAqXG4gKiBleGFtcGxlOlxuICogIGB7XG4gKiAgICAgIFwiYXdzUHJvZmlsZXNcIjoge1xuICogICAgICAgIFwiMTIzXCI6IFwiZGVmYXVsdDEyM1wiLFxuICogICAgICAgIFwiNDU2XCI6IFwiZGVmYXVsdDEyM1wiXG4gKiAgICAgIH1cbiAqICB9YFxuICpcbiAqL1xuZXhwb3J0IGNsYXNzIEpzb25GaWxlUHJvZmlsZU1hcHBlciBpbXBsZW1lbnRzIFByb2ZpbGVNYXBwZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IF93b3JraW5nRGlyZWN0b3J5OiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2ZpbGVuYW1lOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IocHJvcHM6IEpzb25GaWxlUHJvZmlsZU1hcHBlclByb3BzKSB7XG4gICAgdGhpcy5fd29ya2luZ0RpcmVjdG9yeSA9IHByb3BzLndvcmtpbmdEaXJlY3Rvcnk7XG4gICAgdGhpcy5fZmlsZW5hbWUgPSBwcm9wcy5maWxlbmFtZTtcbiAgfVxuXG4gIHJlc29sdmUoKTogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSB7XG4gICAgY29uc3QgZmlsZW5hbWUgPSBwYXRoLmpvaW4odGhpcy5fd29ya2luZ0RpcmVjdG9yeSwgdGhpcy5fZmlsZW5hbWUpO1xuICAgIGlmICghZnMuZXhpc3RzU3luYyhmaWxlbmFtZSkpIHtcbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHBrZyA9IEpTT04ucGFyc2UoXG4gICAgICAgIGZzLnJlYWRGaWxlU3luYyhmaWxlbmFtZSwge1xuICAgICAgICAgIGVuY29kaW5nOiAndXRmOCcsXG4gICAgICAgICAgZmxhZzogJ3InLFxuICAgICAgICB9KSxcbiAgICAgICk7XG4gICAgICBjb25zdCB7IGF3c1Byb2ZpbGVzIH0gPSBwa2c7XG4gICAgICByZXR1cm4gYXdzUHJvZmlsZXM7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc29sZS5sb2coXG4gICAgICAgIGBGYWlsZWQgdG8gcGFyc2UgZmlsZSAke3RoaXMuX2ZpbGVuYW1lfTogYCxcbiAgICAgICAgKGUgYXMgRXJyb3IpLm1lc3NhZ2UsXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4ge307XG4gIH1cbn1cblxuLy8gV2lsbCB1c2UgbG9jYWwgcGFja2FnZS5qc29uIGZvciBtYXBwaW5nIGFuIGFjY291bnRudW1iZXIgdG8gYSBsb2NhbCBwcm9maWxlXG5leHBvcnQgY2xhc3MgUGFja2FnZUpzb25Qcm9maWxlTWFwcGVyIGltcGxlbWVudHMgUHJvZmlsZU1hcHBlciB7XG4gIHJlc29sdmUoKTogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSB7XG4gICAgcmV0dXJuIG5ldyBKc29uRmlsZVByb2ZpbGVNYXBwZXIoe1xuICAgICAgd29ya2luZ0RpcmVjdG9yeTogcHJvY2Vzcy5jd2QoKSxcbiAgICAgIGZpbGVuYW1lOiAncGFja2FnZS5qc29uJyxcbiAgICB9KS5yZXNvbHZlKCk7XG4gIH1cbn1cblxuLy8gV2lsbCBkZWZhdWx0IHRvIH4vLmNka211bHRpcHJvZmlsZXBsdW5nLmpzb24gYW5kIGNhbiBiZSBvdmVycmlkZW4gYnkgZW52aXJvbm1lbnQgdmFyaWFibGVcbi8vIENES19NVUxUSV9QUk9GSUxFX1BMVUdJTl9DT05GSUc9L3BhdGgvdG8vZmlsZS5qc29uXG5leHBvcnQgY2xhc3MgRW52aXJvbm1lbnRBd2FyZUdsb2JhbFByb2ZpbGVNYXBwZXIgaW1wbGVtZW50cyBQcm9maWxlTWFwcGVyIHtcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBlbnZpcm9ubWVudFZhcmlhYmxlTmFtZSA9XG4gICAgJ0NES19NVUxUSV9QUk9GSUxFX1BMVUdJTl9DT05GSUcnO1xuICBwcml2YXRlIHJlYWRvbmx5IF9kZWZhdWx0R2xvYmFsQ29uZmlndXJhdGlvbkZpbGUgPVxuICAgICcuY2RrbXVsdGlwcm9maWxlcGx1Z2luLmpzb24nO1xuICBwcml2YXRlIHJlYWRvbmx5IF93b3JraW5nRGlyZWN0b3J5OiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2ZpbGVuYW1lOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5fd29ya2luZ0RpcmVjdG9yeSA9IG9zLmhvbWVkaXIoKTtcbiAgICB0aGlzLl9maWxlbmFtZSA9IHRoaXMuX2RlZmF1bHRHbG9iYWxDb25maWd1cmF0aW9uRmlsZTtcbiAgICBjb25zdCBjb25maWdGaWxlTG9jYXRpb25PdmVycmlkZSA9XG4gICAgICBwcm9jZXNzLmVudltFbnZpcm9ubWVudEF3YXJlR2xvYmFsUHJvZmlsZU1hcHBlci5lbnZpcm9ubWVudFZhcmlhYmxlTmFtZV07XG4gICAgaWYgKGNvbmZpZ0ZpbGVMb2NhdGlvbk92ZXJyaWRlKSB7XG4gICAgICBjb25zdCBjb25maWdGaWxlID0gcGF0aC5wYXJzZShjb25maWdGaWxlTG9jYXRpb25PdmVycmlkZSk7XG4gICAgICB0aGlzLl93b3JraW5nRGlyZWN0b3J5ID0gY29uZmlnRmlsZS5kaXI7XG4gICAgICB0aGlzLl9maWxlbmFtZSA9IGNvbmZpZ0ZpbGUuYmFzZTtcbiAgICB9XG4gIH1cblxuICByZXNvbHZlKCk6IHsgW3A6IHN0cmluZ106IHN0cmluZyB9IHtcbiAgICByZXR1cm4gbmV3IEpzb25GaWxlUHJvZmlsZU1hcHBlcih7XG4gICAgICB3b3JraW5nRGlyZWN0b3J5OiB0aGlzLl93b3JraW5nRGlyZWN0b3J5LFxuICAgICAgZmlsZW5hbWU6IHRoaXMuX2ZpbGVuYW1lLFxuICAgIH0pLnJlc29sdmUoKTtcbiAgfVxufVxuXG4vLyBDYW4gYmUgdXNlZCBpbiBsb2NhbCBwcm9qZWN0IGRpcmVjdG9yeS4gQ2FuIGJlIGFkZGVkIG9yIGlnbm9yZWQgYnkgeW91ciBWQ1NcbmV4cG9ydCBjbGFzcyBMb2NhbFByb2plY3REaXJNYXBwZXIgaW1wbGVtZW50cyBQcm9maWxlTWFwcGVyIHtcbiAgcmVzb2x2ZSgpOiB7IFtwOiBzdHJpbmddOiBzdHJpbmcgfSB7XG4gICAgcmV0dXJuIG5ldyBKc29uRmlsZVByb2ZpbGVNYXBwZXIoe1xuICAgICAgd29ya2luZ0RpcmVjdG9yeTogcHJvY2Vzcy5jd2QoKSxcbiAgICAgIGZpbGVuYW1lOiAnY2RrbXVsdGlwcm9maWxlcGx1Z2luLmpzb24nLFxuICAgIH0pLnJlc29sdmUoKTtcbiAgfVxufVxuXG4vLyBVc2VzIGFsbCBtYXBwZXJzIGFuZCBhcHBsaWVzIHByZWNlZGVuY2VcbmV4cG9ydCBjbGFzcyBQcmVjZWRlbmNlUHJvZmlsZU1hcHBlciBpbXBsZW1lbnRzIFByb2ZpbGVNYXBwZXIge1xuICByZXNvbHZlKCk6IHsgW3A6IHN0cmluZ106IHN0cmluZyB9IHtcbiAgICAvLyBUZW1wb3JhcnkgaW4gb3JkZXIgdG8gZ2V0IGl0IHdvcmtpbmcgYWdhaW5cbiAgICBjb25zdCBwYWNrYWdlSnNvbk1hcHBpbmdzID0gbmV3IFBhY2thZ2VKc29uUHJvZmlsZU1hcHBlcigpLnJlc29sdmUoKTtcbiAgICBjb25zdCBwcm9qZWN0TG9jYWxNYXBwaW5ncyA9IG5ldyBMb2NhbFByb2plY3REaXJNYXBwZXIoKS5yZXNvbHZlKCk7XG4gICAgY29uc3QgZ2xvYmFsTWFwcGluZ3MgPSBuZXcgRW52aXJvbm1lbnRBd2FyZUdsb2JhbFByb2ZpbGVNYXBwZXIoKS5yZXNvbHZlKCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnBhY2thZ2VKc29uTWFwcGluZ3MsXG4gICAgICAuLi5wcm9qZWN0TG9jYWxNYXBwaW5ncyxcbiAgICAgIC4uLmdsb2JhbE1hcHBpbmdzLFxuICAgIH07XG4gIH1cbn1cbiJdfQ==