cdk-multi-profile-plugin
Version:
Adds multi profile/account, mfa and aws sso support to cdk apps
125 lines • 12.9 kB
JavaScript
;
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==