awscdk-resources-mongodbatlas
Version:
MongoDB Atlas CDK Construct Library for AWS CloudFormation Resources
98 lines • 14.1 kB
JavaScript
var _a, _b, _c;
Object.defineProperty(exports, "__esModule", { value: true });
exports.MongoSecretProfile = exports.MongoAtlasBootstrap = exports.MongoAtlasBootstrapProps = exports.AtlasBasicResources = void 0;
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
const aws_cdk_lib_1 = require("aws-cdk-lib");
const constructs_1 = require("constructs");
exports.AtlasBasicResources = [
"Cluster",
"Project",
"DatabaseUser",
"ProjectIpAccessList",
];
class MongoAtlasBootstrapProps {
}
exports.MongoAtlasBootstrapProps = MongoAtlasBootstrapProps;
_a = JSII_RTTI_SYMBOL_1;
MongoAtlasBootstrapProps[_a] = { fqn: "awscdk-resources-mongodbatlas.MongoAtlasBootstrapProps", version: "3.13.0" };
/**
* Generate the CFN extension execution role.
* @see https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/registry-public.html
*/
class MongoAtlasBootstrap extends constructs_1.Construct {
constructor(scope, id, props) {
super(scope, id);
this.role = new aws_cdk_lib_1.aws_iam.Role(this, "mongoDBAtlasCFNExecutionRole", {
maxSessionDuration: aws_cdk_lib_1.Duration.seconds(8400),
assumedBy: new aws_cdk_lib_1.aws_iam.CompositePrincipal(new aws_cdk_lib_1.aws_iam.ServicePrincipal("cloudformation.amazonaws.com"), new aws_cdk_lib_1.aws_iam.ServicePrincipal("resources.cloudformation.amazonaws.com"), new aws_cdk_lib_1.aws_iam.ServicePrincipal("lambda.amazonaws.com")),
path: "/",
roleName: props?.roleName,
});
const policyStatement = new aws_cdk_lib_1.aws_iam.PolicyStatement({
effect: aws_cdk_lib_1.aws_iam.Effect.ALLOW,
actions: [
"secretsmanager:DescribeSecret",
"secretsmanager:GetSecretValue",
"ec2:CreateVpcEndpoint",
"ec2:DeleteVpcEndpoints",
"cloudformation:CreateResource",
"cloudformation:DeleteResource",
"cloudformation:GetResource",
"cloudformation:GetResourceRequestStatus",
"cloudformation:ListResources",
"cloudformation:UpdateResource",
"iam:AttachRolePolicy",
"iam:CreateRole",
"iam:DeleteRole",
"iam:GetRole",
"iam:GetRolePolicy",
"iam:ListAttachedRolePolicies",
"iam:ListRolePolicies",
"iam:PutRolePolicy",
],
resources: ["*"],
});
const atlasCdkPolicy = new aws_cdk_lib_1.aws_iam.Policy(this, "AtlasCDKExecutionPolicy", {
policyName: "AtlasCDKExecution", // Custom Policy Name
statements: [policyStatement],
});
this.role.attachInlinePolicy(atlasCdkPolicy);
if (props?.secretProfile) {
new MongoSecretProfile(this, "MongoSecretProfile", props?.secretProfile);
}
if (props?.typesToActivate) {
for (let type of props?.typesToActivate) {
new aws_cdk_lib_1.aws_cloudformation.CfnTypeActivation(this, `${type}TypeActivation`, {
executionRoleArn: this.role.roleArn,
type: `RESOURCE`,
typeName: `MongoDB::Atlas::${type}`,
publisherId: "bb989456c78c398a858fef18f2ca1bfc1fbba082",
});
}
}
}
}
exports.MongoAtlasBootstrap = MongoAtlasBootstrap;
_b = JSII_RTTI_SYMBOL_1;
MongoAtlasBootstrap[_b] = { fqn: "awscdk-resources-mongodbatlas.MongoAtlasBootstrap", version: "3.13.0" };
class MongoSecretProfile extends constructs_1.Construct {
constructor(scope, id, profileName) {
super(scope, id);
// create a secret
const secret = new aws_cdk_lib_1.aws_secretsmanager.Secret(this, profileName, {
secretName: `cfn/atlas/profile/${profileName}`,
description: "Secret used for MongoDB Atlas Cloud Formation api keys",
secretStringValue: aws_cdk_lib_1.SecretValue.unsafePlainText('{"PublicKey":"yourAtlasPublicKey", "PrivateKey": "yourAtlasPrivateKey"}'),
});
new aws_cdk_lib_1.CfnOutput(this, "SecretName", { value: secret.secretName });
new aws_cdk_lib_1.CfnOutput(this, "UpdateSecretCommand", {
value: `aws secretsmanager update-secret --secret-id ${secret.secretName}` +
' --secret-string "{\\"PublicKey\\":\\"${MONGO_ATLAS_PUBLIC_KEY}\\",\\"PrivateKey\\":\\"${MONGO_ATLAS_PRIVATE_KEY}\\"}"',
});
}
}
exports.MongoSecretProfile = MongoSecretProfile;
_c = JSII_RTTI_SYMBOL_1;
MongoSecretProfile[_c] = { fqn: "awscdk-resources-mongodbatlas.MongoSecretProfile", version: "3.13.0" };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbDMtcmVzb3VyY2VzL2F0bGFzLWJvb3RzdHJhcC9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLDZDQU9xQjtBQUNyQiwyQ0FBdUM7QUFFMUIsUUFBQSxtQkFBbUIsR0FBYTtJQUMzQyxTQUFTO0lBQ1QsU0FBUztJQUNULGNBQWM7SUFDZCxxQkFBcUI7Q0FDdEIsQ0FBQztBQUVGLE1BQWEsd0JBQXdCOztBQUFyQyw0REFvQkM7OztBQUVEOzs7R0FHRztBQUNILE1BQWEsbUJBQW9CLFNBQVEsc0JBQVM7SUFFaEQsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUFnQztRQUN4RSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRWpCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxxQkFBRyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsOEJBQThCLEVBQUU7WUFDN0Qsa0JBQWtCLEVBQUUsc0JBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO1lBQzFDLFNBQVMsRUFBRSxJQUFJLHFCQUFHLENBQUMsa0JBQWtCLENBQ25DLElBQUkscUJBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyw4QkFBOEIsQ0FBQyxFQUN4RCxJQUFJLHFCQUFHLENBQUMsZ0JBQWdCLENBQUMsd0NBQXdDLENBQUMsRUFDbEUsSUFBSSxxQkFBRyxDQUFDLGdCQUFnQixDQUFDLHNCQUFzQixDQUFDLENBQ2pEO1lBQ0QsSUFBSSxFQUFFLEdBQUc7WUFDVCxRQUFRLEVBQUUsS0FBSyxFQUFFLFFBQVE7U0FDMUIsQ0FBQyxDQUFDO1FBRUgsTUFBTSxlQUFlLEdBQUcsSUFBSSxxQkFBRyxDQUFDLGVBQWUsQ0FBQztZQUM5QyxNQUFNLEVBQUUscUJBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSztZQUN4QixPQUFPLEVBQUU7Z0JBQ1AsK0JBQStCO2dCQUMvQiwrQkFBK0I7Z0JBQy9CLHVCQUF1QjtnQkFDdkIsd0JBQXdCO2dCQUN4QiwrQkFBK0I7Z0JBQy9CLCtCQUErQjtnQkFDL0IsNEJBQTRCO2dCQUM1Qix5Q0FBeUM7Z0JBQ3pDLDhCQUE4QjtnQkFDOUIsK0JBQStCO2dCQUMvQixzQkFBc0I7Z0JBQ3RCLGdCQUFnQjtnQkFDaEIsZ0JBQWdCO2dCQUNoQixhQUFhO2dCQUNiLG1CQUFtQjtnQkFDbkIsOEJBQThCO2dCQUM5QixzQkFBc0I7Z0JBQ3RCLG1CQUFtQjthQUNwQjtZQUNELFNBQVMsRUFBRSxDQUFDLEdBQUcsQ0FBQztTQUNqQixDQUFDLENBQUM7UUFFSCxNQUFNLGNBQWMsR0FBRyxJQUFJLHFCQUFHLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSx5QkFBeUIsRUFBRTtZQUNyRSxVQUFVLEVBQUUsbUJBQW1CLEVBQUUscUJBQXFCO1lBQ3RELFVBQVUsRUFBRSxDQUFDLGVBQWUsQ0FBQztTQUM5QixDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBRTdDLElBQUksS0FBSyxFQUFFLGFBQWEsRUFBRSxDQUFDO1lBQ3pCLElBQUksa0JBQWtCLENBQUMsSUFBSSxFQUFFLG9CQUFvQixFQUFFLEtBQUssRUFBRSxhQUFhLENBQUMsQ0FBQztRQUMzRSxDQUFDO1FBRUQsSUFBSSxLQUFLLEVBQUUsZUFBZSxFQUFFLENBQUM7WUFDM0IsS0FBSyxJQUFJLElBQUksSUFBSSxLQUFLLEVBQUUsZUFBZSxFQUFFLENBQUM7Z0JBQ3hDLElBQUksZ0NBQWMsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsR0FBRyxJQUFJLGdCQUFnQixFQUFFO29CQUNsRSxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU87b0JBQ25DLElBQUksRUFBRSxVQUFVO29CQUNoQixRQUFRLEVBQUUsbUJBQW1CLElBQUksRUFBRTtvQkFDbkMsV0FBVyxFQUFFLDBDQUEwQztpQkFDeEQsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDOztBQTlESCxrREErREM7OztBQUVELE1BQWEsa0JBQW1CLFNBQVEsc0JBQVM7SUFDL0MsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxXQUFtQjtRQUMzRCxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRWpCLGtCQUFrQjtRQUNsQixNQUFNLE1BQU0sR0FBRyxJQUFJLGdDQUFjLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxXQUFXLEVBQUU7WUFDMUQsVUFBVSxFQUFFLHFCQUFxQixXQUFXLEVBQUU7WUFDOUMsV0FBVyxFQUFFLHdEQUF3RDtZQUNyRSxpQkFBaUIsRUFBRSx5QkFBVyxDQUFDLGVBQWUsQ0FDNUMseUVBQXlFLENBQzFFO1NBQ0YsQ0FBQyxDQUFDO1FBRUgsSUFBSSx1QkFBUyxDQUFDLElBQUksRUFBRSxZQUFZLEVBQUUsRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUM7UUFDaEUsSUFBSSx1QkFBUyxDQUFDLElBQUksRUFBRSxxQkFBcUIsRUFBRTtZQUN6QyxLQUFLLEVBQ0gsZ0RBQWdELE1BQU0sQ0FBQyxVQUFVLEVBQUU7Z0JBQ25FLHdIQUF3SDtTQUMzSCxDQUFDLENBQUM7SUFDTCxDQUFDOztBQW5CSCxnREFvQkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDZm5PdXRwdXQsXG4gIGF3c19pYW0gYXMgaWFtLFxuICBhd3Nfc2VjcmV0c21hbmFnZXIgYXMgc2VjcmV0c21hbmFnZXIsXG4gIGF3c19jbG91ZGZvcm1hdGlvbiBhcyBjbG91ZGZvcm1hdGlvbixcbiAgU2VjcmV0VmFsdWUsXG4gIER1cmF0aW9uLFxufSBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5cbmV4cG9ydCBjb25zdCBBdGxhc0Jhc2ljUmVzb3VyY2VzOiBzdHJpbmdbXSA9IFtcbiAgXCJDbHVzdGVyXCIsXG4gIFwiUHJvamVjdFwiLFxuICBcIkRhdGFiYXNlVXNlclwiLFxuICBcIlByb2plY3RJcEFjY2Vzc0xpc3RcIixcbl07XG5cbmV4cG9ydCBjbGFzcyBNb25nb0F0bGFzQm9vdHN0cmFwUHJvcHMge1xuICAvKipcbiAgICogVGhlIElBTSByb2xlIG5hbWUgZm9yIENsb3VkRm9ybWF0aW9uIEV4dGVuc2lvbiBFeGVjdXRpb24uXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvcmVnaXN0cnktcHVibGljLmh0bWxcbiAgICogQGRlZmF1bHQgYXV0byBnZW5lcmF0IHRoZSBuYW1lLlxuICAgKi9cbiAgcmVhZG9ubHkgcm9sZU5hbWUhOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgc2VjcmV0IHByb2ZpbGUgbmFtZSBmb3IgTW9uZ29EQiBBdGxhcy5cbiAgICogQGRlZmF1bHQgZ2VuZXJhdGUgYSBkdW1teSBzZWNyZXQuXG4gICAqIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL21vbmdvZGIvbW9uZ29kYmF0bGFzLWNsb3VkZm9ybWF0aW9uLXJlc291cmNlcy90cmVlL21hc3RlciMyLWNvbmZpZ3VyZS15b3VyLXByb2ZpbGVcbiAgICovXG4gIHJlYWRvbmx5IHNlY3JldFByb2ZpbGUhOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBMaXN0IG9mIHN0cmluZ3MgcmVwcmVzZW50aW5nIG1vbmdvREIgYXRsYXMgdHlwZXMgdG8gYWN0aXZhdGUuXG4gICAqIHRoZSBleHBvcnRlZCBBdGxhc0Jhc2ljUmVzb3VyY2VzIGNhbiBiZSB1c2VkIGZvciBBdGxhc0Jhc2ljIHJlc291cmNlc1xuICAgKiBpZiBub3QgcHJvdmlkZWQgbm9uIHJlc291cmNlcyB3aWxsIGJlIGFjdGl2YXRlZFxuICAgKiBAZXhhbXBsZSB0eXBlc1RvQWN0aXZhdGU9W1wiQ2x1c3RlclwiLFwiUHJvamVjdFwiXSB0aGlzIHdpbGwgYWN0aWF0ZSBNb25nb0RCOjpBdGxhczo6UHJvamVjdCAmJiBNb25nb0RCOjpBdGxhczo6Q2x1c3RlclxuICAgKi9cbiAgcmVhZG9ubHkgdHlwZXNUb0FjdGl2YXRlPzogc3RyaW5nW107XG59XG5cbi8qKlxuICogR2VuZXJhdGUgdGhlIENGTiBleHRlbnNpb24gZXhlY3V0aW9uIHJvbGUuXG4gKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL3JlZ2lzdHJ5LXB1YmxpYy5odG1sXG4gKi9cbmV4cG9ydCBjbGFzcyBNb25nb0F0bGFzQm9vdHN0cmFwIGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgcmVhZG9ubHkgcm9sZTogaWFtLklSb2xlO1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wcz86IE1vbmdvQXRsYXNCb290c3RyYXBQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICB0aGlzLnJvbGUgPSBuZXcgaWFtLlJvbGUodGhpcywgXCJtb25nb0RCQXRsYXNDRk5FeGVjdXRpb25Sb2xlXCIsIHtcbiAgICAgIG1heFNlc3Npb25EdXJhdGlvbjogRHVyYXRpb24uc2Vjb25kcyg4NDAwKSxcbiAgICAgIGFzc3VtZWRCeTogbmV3IGlhbS5Db21wb3NpdGVQcmluY2lwYWwoXG4gICAgICAgIG5ldyBpYW0uU2VydmljZVByaW5jaXBhbChcImNsb3VkZm9ybWF0aW9uLmFtYXpvbmF3cy5jb21cIiksXG4gICAgICAgIG5ldyBpYW0uU2VydmljZVByaW5jaXBhbChcInJlc291cmNlcy5jbG91ZGZvcm1hdGlvbi5hbWF6b25hd3MuY29tXCIpLFxuICAgICAgICBuZXcgaWFtLlNlcnZpY2VQcmluY2lwYWwoXCJsYW1iZGEuYW1hem9uYXdzLmNvbVwiKVxuICAgICAgKSxcbiAgICAgIHBhdGg6IFwiL1wiLFxuICAgICAgcm9sZU5hbWU6IHByb3BzPy5yb2xlTmFtZSxcbiAgICB9KTtcblxuICAgIGNvbnN0IHBvbGljeVN0YXRlbWVudCA9IG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgIGVmZmVjdDogaWFtLkVmZmVjdC5BTExPVyxcbiAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAgXCJzZWNyZXRzbWFuYWdlcjpEZXNjcmliZVNlY3JldFwiLFxuICAgICAgICBcInNlY3JldHNtYW5hZ2VyOkdldFNlY3JldFZhbHVlXCIsXG4gICAgICAgIFwiZWMyOkNyZWF0ZVZwY0VuZHBvaW50XCIsXG4gICAgICAgIFwiZWMyOkRlbGV0ZVZwY0VuZHBvaW50c1wiLFxuICAgICAgICBcImNsb3VkZm9ybWF0aW9uOkNyZWF0ZVJlc291cmNlXCIsXG4gICAgICAgIFwiY2xvdWRmb3JtYXRpb246RGVsZXRlUmVzb3VyY2VcIixcbiAgICAgICAgXCJjbG91ZGZvcm1hdGlvbjpHZXRSZXNvdXJjZVwiLFxuICAgICAgICBcImNsb3VkZm9ybWF0aW9uOkdldFJlc291cmNlUmVxdWVzdFN0YXR1c1wiLFxuICAgICAgICBcImNsb3VkZm9ybWF0aW9uOkxpc3RSZXNvdXJjZXNcIixcbiAgICAgICAgXCJjbG91ZGZvcm1hdGlvbjpVcGRhdGVSZXNvdXJjZVwiLFxuICAgICAgICBcImlhbTpBdHRhY2hSb2xlUG9saWN5XCIsXG4gICAgICAgIFwiaWFtOkNyZWF0ZVJvbGVcIixcbiAgICAgICAgXCJpYW06RGVsZXRlUm9sZVwiLFxuICAgICAgICBcImlhbTpHZXRSb2xlXCIsXG4gICAgICAgIFwiaWFtOkdldFJvbGVQb2xpY3lcIixcbiAgICAgICAgXCJpYW06TGlzdEF0dGFjaGVkUm9sZVBvbGljaWVzXCIsXG4gICAgICAgIFwiaWFtOkxpc3RSb2xlUG9saWNpZXNcIixcbiAgICAgICAgXCJpYW06UHV0Um9sZVBvbGljeVwiLFxuICAgICAgXSxcbiAgICAgIHJlc291cmNlczogW1wiKlwiXSxcbiAgICB9KTtcblxuICAgIGNvbnN0IGF0bGFzQ2RrUG9saWN5ID0gbmV3IGlhbS5Qb2xpY3kodGhpcywgXCJBdGxhc0NES0V4ZWN1dGlvblBvbGljeVwiLCB7XG4gICAgICBwb2xpY3lOYW1lOiBcIkF0bGFzQ0RLRXhlY3V0aW9uXCIsIC8vIEN1c3RvbSBQb2xpY3kgTmFtZVxuICAgICAgc3RhdGVtZW50czogW3BvbGljeVN0YXRlbWVudF0sXG4gICAgfSk7XG5cbiAgICB0aGlzLnJvbGUuYXR0YWNoSW5saW5lUG9saWN5KGF0bGFzQ2RrUG9saWN5KTtcblxuICAgIGlmIChwcm9wcz8uc2VjcmV0UHJvZmlsZSkge1xuICAgICAgbmV3IE1vbmdvU2VjcmV0UHJvZmlsZSh0aGlzLCBcIk1vbmdvU2VjcmV0UHJvZmlsZVwiLCBwcm9wcz8uc2VjcmV0UHJvZmlsZSk7XG4gICAgfVxuXG4gICAgaWYgKHByb3BzPy50eXBlc1RvQWN0aXZhdGUpIHtcbiAgICAgIGZvciAobGV0IHR5cGUgb2YgcHJvcHM/LnR5cGVzVG9BY3RpdmF0ZSkge1xuICAgICAgICBuZXcgY2xvdWRmb3JtYXRpb24uQ2ZuVHlwZUFjdGl2YXRpb24odGhpcywgYCR7dHlwZX1UeXBlQWN0aXZhdGlvbmAsIHtcbiAgICAgICAgICBleGVjdXRpb25Sb2xlQXJuOiB0aGlzLnJvbGUucm9sZUFybixcbiAgICAgICAgICB0eXBlOiBgUkVTT1VSQ0VgLFxuICAgICAgICAgIHR5cGVOYW1lOiBgTW9uZ29EQjo6QXRsYXM6OiR7dHlwZX1gLFxuICAgICAgICAgIHB1Ymxpc2hlcklkOiBcImJiOTg5NDU2Yzc4YzM5OGE4NThmZWYxOGYyY2ExYmZjMWZiYmEwODJcIixcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBNb25nb1NlY3JldFByb2ZpbGUgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9maWxlTmFtZTogc3RyaW5nKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIC8vIGNyZWF0ZSBhIHNlY3JldFxuICAgIGNvbnN0IHNlY3JldCA9IG5ldyBzZWNyZXRzbWFuYWdlci5TZWNyZXQodGhpcywgcHJvZmlsZU5hbWUsIHtcbiAgICAgIHNlY3JldE5hbWU6IGBjZm4vYXRsYXMvcHJvZmlsZS8ke3Byb2ZpbGVOYW1lfWAsXG4gICAgICBkZXNjcmlwdGlvbjogXCJTZWNyZXQgdXNlZCBmb3IgTW9uZ29EQiBBdGxhcyBDbG91ZCBGb3JtYXRpb24gYXBpIGtleXNcIixcbiAgICAgIHNlY3JldFN0cmluZ1ZhbHVlOiBTZWNyZXRWYWx1ZS51bnNhZmVQbGFpblRleHQoXG4gICAgICAgICd7XCJQdWJsaWNLZXlcIjpcInlvdXJBdGxhc1B1YmxpY0tleVwiLCBcIlByaXZhdGVLZXlcIjogXCJ5b3VyQXRsYXNQcml2YXRlS2V5XCJ9J1xuICAgICAgKSxcbiAgICB9KTtcblxuICAgIG5ldyBDZm5PdXRwdXQodGhpcywgXCJTZWNyZXROYW1lXCIsIHsgdmFsdWU6IHNlY3JldC5zZWNyZXROYW1lIH0pO1xuICAgIG5ldyBDZm5PdXRwdXQodGhpcywgXCJVcGRhdGVTZWNyZXRDb21tYW5kXCIsIHtcbiAgICAgIHZhbHVlOlxuICAgICAgICBgYXdzIHNlY3JldHNtYW5hZ2VyIHVwZGF0ZS1zZWNyZXQgLS1zZWNyZXQtaWQgJHtzZWNyZXQuc2VjcmV0TmFtZX1gICtcbiAgICAgICAgJyAtLXNlY3JldC1zdHJpbmcgXCJ7XFxcXFwiUHVibGljS2V5XFxcXFwiOlxcXFxcIiR7TU9OR09fQVRMQVNfUFVCTElDX0tFWX1cXFxcXCIsXFxcXFwiUHJpdmF0ZUtleVxcXFxcIjpcXFxcXCIke01PTkdPX0FUTEFTX1BSSVZBVEVfS0VZfVxcXFxcIn1cIicsXG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
;