advanced-cdk-constructs
Version:
[](https://codecov.io/gh/spensireli/advanced-cdk-constructs)
190 lines • 24.4 kB
JavaScript
"use strict";
var _a;
Object.defineProperty(exports, "__esModule", { value: true });
exports.DeclarativePolicy = exports.SnapshotBlockPublicAccessState = exports.InstanceMetadataTags = exports.HttpEndpoint = exports.HttpTokens = exports.ImageProvider = exports.AllowedImagesState = exports.VpcBlockPublicAccessMode = 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");
/**
* Modes for blocking public access to VPCs.
*/
var VpcBlockPublicAccessMode;
(function (VpcBlockPublicAccessMode) {
/** No blocking of public access. */
VpcBlockPublicAccessMode["OFF"] = "off";
/** Block only ingress (incoming) public access. */
VpcBlockPublicAccessMode["BLOCK_INGRESS"] = "block_ingress";
/** Block both ingress and egress (bidirectional) public access. */
VpcBlockPublicAccessMode["BLOCK_BIDIRECTIONAL"] = "block_bidirectional";
})(VpcBlockPublicAccessMode || (exports.VpcBlockPublicAccessMode = VpcBlockPublicAccessMode = {}));
/**
* State for allowed images policy.
*/
var AllowedImagesState;
(function (AllowedImagesState) {
/** Only allow images from specified providers. */
AllowedImagesState["ENABLED"] = "enabled";
/** Audit mode for allowed images. */
AllowedImagesState["AUDIT_MODE"] = "audit_mode";
})(AllowedImagesState || (exports.AllowedImagesState = AllowedImagesState = {}));
/**
* Predefined image providers for allowed images policy.
*/
var ImageProvider;
(function (ImageProvider) {
/** Amazon-provided images. */
ImageProvider["AMAZON"] = "amazon";
/** AWS Marketplace images. */
ImageProvider["AWS_MARKETPLACE"] = "aws_marketplace";
/** AWS Backup Vault images. */
ImageProvider["AWS_BACKUP_VAULT"] = "aws_backup_vault";
})(ImageProvider || (exports.ImageProvider = ImageProvider = {}));
/**
* Options for IMDSv2 HttpTokens requirement.
*/
var HttpTokens;
(function (HttpTokens) {
/** No preference for HttpTokens. */
HttpTokens["NO_PREFERENCE"] = "no_preference";
/** Require HttpTokens. */
HttpTokens["REQUIRED"] = "required";
/** HttpTokens are optional. */
HttpTokens["OPTIONAL"] = "optional";
})(HttpTokens || (exports.HttpTokens = HttpTokens = {}));
/**
* Options for IMDSv2 HttpEndpoint.
*/
var HttpEndpoint;
(function (HttpEndpoint) {
/** No preference for HttpEndpoint. */
HttpEndpoint["NO_PREFERENCE"] = "no_preference";
/** Enable HttpEndpoint. */
HttpEndpoint["ENABLED"] = "enabled";
/** Disable HttpEndpoint. */
HttpEndpoint["DISABLED"] = "disabled";
})(HttpEndpoint || (exports.HttpEndpoint = HttpEndpoint = {}));
/**
* Options for IMDSv2 Instance Metadata Tags.
*/
var InstanceMetadataTags;
(function (InstanceMetadataTags) {
/** No preference for instance metadata tags. */
InstanceMetadataTags["NO_PREFERENCE"] = "no_preference";
/** Enable instance metadata tags. */
InstanceMetadataTags["ENABLED"] = "enabled";
/** Disable instance metadata tags. */
InstanceMetadataTags["DISABLED"] = "disabled";
})(InstanceMetadataTags || (exports.InstanceMetadataTags = InstanceMetadataTags = {}));
/**
* State for blocking public access to EBS snapshots.
*/
var SnapshotBlockPublicAccessState;
(function (SnapshotBlockPublicAccessState) {
/** Block new sharing of snapshots. */
SnapshotBlockPublicAccessState["BLOCK_NEW_SHARING"] = "block_new_sharing";
/** Block all sharing of snapshots. */
SnapshotBlockPublicAccessState["BLOCK_ALL_SHARING"] = "block_all_sharing";
})(SnapshotBlockPublicAccessState || (exports.SnapshotBlockPublicAccessState = SnapshotBlockPublicAccessState = {}));
/**
* A CDK construct that creates an AWS Organizations EC2 Declarative Policy.
*
* This construct allows you to declaratively define and apply EC2-related policies
* such as blocking public access to VPCs, restricting AMI providers, enforcing
* instance metadata service settings, and more.
*
* Example:
* ```ts
* new DeclarativePolicy(this, 'MyPolicy', {
* targetIds: ['ou-xxxx-xxxxxxxx'],
* vpcBlockPublicAccess: true,
* vpcBlockPublicAccessMode: VpcBlockPublicAccessMode.BLOCK_BIDIRECTIONAL,
* });
* ```
*/
class DeclarativePolicy extends constructs_1.Construct {
/**
* Create a new DeclarativePolicy.
* @param scope The parent construct.
* @param id The construct ID.
* @param props The policy properties.
*/
constructor(scope, id, props) {
super(scope, id);
// Set defaults for boolean properties
const vpcBlockPublicAccess = props.vpcBlockPublicAccess ?? true;
const disableSerialConsoleAccess = props.disableSerialConsoleAccess ?? true;
const imageBlockPublicAccess = props.imageBlockPublicAccess ?? true;
const restrictImageProviders = props.restrictImageProviders ?? true;
const instanceMetadataDefaults = props.instanceMetadataDefaults ?? true;
const blockPublicSnapshots = props.blockPublicSnapshots ?? true;
const declarativePolicy = {
ec2_attributes: {
vpc_block_public_access: vpcBlockPublicAccess ? {
internet_gateway_block: {
mode: {
'@@assign': props.vpcBlockPublicAccessMode ?? VpcBlockPublicAccessMode.BLOCK_INGRESS,
},
exclusions_allowed: {
'@@assign': 'enabled',
},
},
} : undefined,
serial_console_access: disableSerialConsoleAccess ? {
status: {
'@@assign': 'disabled',
},
} : undefined,
image_block_public_access: imageBlockPublicAccess ? {
state: {
'@@assign': 'block_new_sharing',
},
} : undefined,
allowed_images_settings: restrictImageProviders ? {
state: {
'@@assign': props.allowedImagesState ?? AllowedImagesState.ENABLED,
},
...(props.allowedImageProviders && props.allowedImageProviders.length > 0 ? {
image_criteria: {
criteria_1: {
allowed_image_providers: {
'@@append': props.allowedImageProviders,
},
},
},
} : {}),
} : undefined,
instance_metadata_defaults: instanceMetadataDefaults ? {
http_tokens: {
'@@assign': props.httpTokens ?? HttpTokens.REQUIRED,
},
http_put_response_hop_limit: {
'@@assign': props.httpPutResponseHopLimit?.toString() ?? '4',
},
http_endpoint: {
'@@assign': props.httpEndpoint ?? HttpEndpoint.ENABLED,
},
instance_metadata_tags: {
'@@assign': props.instanceMetadataTags ?? InstanceMetadataTags.ENABLED,
},
} : undefined,
snapshot_block_public_access: blockPublicSnapshots ? {
state: {
'@@assign': props.snapshotBlockPublicAccessState ?? SnapshotBlockPublicAccessState.BLOCK_NEW_SHARING,
},
} : undefined,
},
};
const applyDeclarativePolicy = new aws_cdk_lib_1.aws_organizations.CfnPolicy(this, `DeclarativePolicy-${this.node.id}`, {
content: declarativePolicy,
name: props.name ?? `DeclarativePolicy-${this.node.id}`,
type: 'DECLARATIVE_POLICY_EC2',
description: props.description ?? 'Declarative Policy from Advanced CDK Constructs',
targetIds: props.targetIds,
});
this.declarativePolicyArn = applyDeclarativePolicy.attrArn;
}
}
exports.DeclarativePolicy = DeclarativePolicy;
_a = JSII_RTTI_SYMBOL_1;
DeclarativePolicy[_a] = { fqn: "advanced-cdk-constructs.DeclarativePolicy", version: "0.0.14" };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVjbGFyYXRpdmUtcG9saWNpZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZGVjbGFyYXRpdmUtcG9saWNpZXMvZGVjbGFyYXRpdmUtcG9saWNpZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSw2Q0FBaUU7QUFDakUsMkNBQXVDO0FBRXZDOztHQUVHO0FBQ0gsSUFBWSx3QkFPWDtBQVBELFdBQVksd0JBQXdCO0lBQ2xDLG9DQUFvQztJQUNwQyx1Q0FBVyxDQUFBO0lBQ1gsbURBQW1EO0lBQ25ELDJEQUErQixDQUFBO0lBQy9CLG1FQUFtRTtJQUNuRSx1RUFBMkMsQ0FBQTtBQUM3QyxDQUFDLEVBUFcsd0JBQXdCLHdDQUF4Qix3QkFBd0IsUUFPbkM7QUFFRDs7R0FFRztBQUNILElBQVksa0JBS1g7QUFMRCxXQUFZLGtCQUFrQjtJQUM1QixrREFBa0Q7SUFDbEQseUNBQW1CLENBQUE7SUFDbkIscUNBQXFDO0lBQ3JDLCtDQUF5QixDQUFBO0FBQzNCLENBQUMsRUFMVyxrQkFBa0Isa0NBQWxCLGtCQUFrQixRQUs3QjtBQUVEOztHQUVHO0FBQ0gsSUFBWSxhQU9YO0FBUEQsV0FBWSxhQUFhO0lBQ3ZCLDhCQUE4QjtJQUM5QixrQ0FBaUIsQ0FBQTtJQUNqQiw4QkFBOEI7SUFDOUIsb0RBQW1DLENBQUE7SUFDbkMsK0JBQStCO0lBQy9CLHNEQUFxQyxDQUFBO0FBQ3ZDLENBQUMsRUFQVyxhQUFhLDZCQUFiLGFBQWEsUUFPeEI7QUFFRDs7R0FFRztBQUNILElBQVksVUFPWDtBQVBELFdBQVksVUFBVTtJQUNwQixvQ0FBb0M7SUFDcEMsNkNBQStCLENBQUE7SUFDL0IsMEJBQTBCO0lBQzFCLG1DQUFxQixDQUFBO0lBQ3JCLCtCQUErQjtJQUMvQixtQ0FBcUIsQ0FBQTtBQUN2QixDQUFDLEVBUFcsVUFBVSwwQkFBVixVQUFVLFFBT3JCO0FBRUQ7O0dBRUc7QUFDSCxJQUFZLFlBT1g7QUFQRCxXQUFZLFlBQVk7SUFD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RCxDQUFDOztBQTFGSCw4Q0EyRkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBhd3Nfb3JnYW5pemF0aW9ucyBhcyBvcmdhbml6YXRpb25zIH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5cbi8qKlxuICogTW9kZXMgZm9yIGJsb2NraW5nIHB1YmxpYyBhY2Nlc3MgdG8gVlBDcy5cbiAqL1xuZXhwb3J0IGVudW0gVnBjQmxvY2tQdWJsaWNBY2Nlc3NNb2RlIHtcbiAgLyoqIE5vIGJsb2NraW5nIG9mIHB1YmxpYyBhY2Nlc3MuICovXG4gIE9GRiA9ICdvZmYnLFxuICAvKiogQmxvY2sgb25seSBpbmdyZXNzIChpbmNvbWluZykgcHVibGljIGFjY2Vzcy4gKi9cbiAgQkxPQ0tfSU5HUkVTUyA9ICdibG9ja19pbmdyZXNzJyxcbiAgLyoqIEJsb2NrIGJvdGggaW5ncmVzcyBhbmQgZWdyZXNzIChiaWRpcmVjdGlvbmFsKSBwdWJsaWMgYWNjZXNzLiAqL1xuICBCTE9DS19CSURJUkVDVElPTkFMID0gJ2Jsb2NrX2JpZGlyZWN0aW9uYWwnLFxufVxuXG4vKipcbiAqIFN0YXRlIGZvciBhbGxvd2VkIGltYWdlcyBwb2xpY3kuXG4gKi9cbmV4cG9ydCBlbnVtIEFsbG93ZWRJbWFnZXNTdGF0ZSB7XG4gIC8qKiBPbmx5IGFsbG93IGltYWdlcyBmcm9tIHNwZWNpZmllZCBwcm92aWRlcnMuICovXG4gIEVOQUJMRUQgPSAnZW5hYmxlZCcsXG4gIC8qKiBBdWRpdCBtb2RlIGZvciBhbGxvd2VkIGltYWdlcy4gKi9cbiAgQVVESVRfTU9ERSA9ICdhdWRpdF9tb2RlJyxcbn1cblxuLyoqXG4gKiBQcmVkZWZpbmVkIGltYWdlIHByb3ZpZGVycyBmb3IgYWxsb3dlZCBpbWFnZXMgcG9saWN5LlxuICovXG5leHBvcnQgZW51bSBJbWFnZVByb3ZpZGVyIHtcbiAgLyoqIEFtYXpvbi1wcm92aWRlZCBpbWFnZXMuICovXG4gIEFNQVpPTiA9ICdhbWF6b24nLFxuICAvKiogQVdTIE1hcmtldHBsYWNlIGltYWdlcy4gKi9cbiAgQVdTX01BUktFVFBMQUNFID0gJ2F3c19tYXJrZXRwbGFjZScsXG4gIC8qKiBBV1MgQmFja3VwIFZhdWx0IGltYWdlcy4gKi9cbiAgQVdTX0JBQ0tVUF9WQVVMVCA9ICdhd3NfYmFja3VwX3ZhdWx0Jyxcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciBJTURTdjIgSHR0cFRva2VucyByZXF1aXJlbWVudC5cbiAqL1xuZXhwb3J0IGVudW0gSHR0cFRva2VucyB7XG4gIC8qKiBObyBwcmVmZXJlbmNlIGZvciBIdHRwVG9rZW5zLiAqL1xuICBOT19QUkVGRVJFTkNFID0gJ25vX3ByZWZlcmVuY2UnLFxuICAvKiogUmVxdWlyZSBIdHRwVG9rZW5zLiAqL1xuICBSRVFVSVJFRCA9ICdyZXF1aXJlZCcsXG4gIC8qKiBIdHRwVG9rZW5zIGFyZSBvcHRpb25hbC4gKi9cbiAgT1BUSU9OQUwgPSAnb3B0aW9uYWwnLFxufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIElNRFN2MiBIdHRwRW5kcG9pbnQuXG4gKi9cbmV4cG9ydCBlbnVtIEh0dHBFbmRwb2ludCB7XG4gIC8qKiBObyBwcmVmZXJlbmNlIGZvciBIdHRwRW5kcG9pbnQuICovXG4gIE5PX1BSRUZFUkVOQ0UgPSAnbm9fcHJlZmVyZW5jZScsXG4gIC8qKiBFbmFibGUgSHR0cEVuZHBvaW50LiAqL1xuICBFTkFCTEVEID0gJ2VuYWJsZWQnLFxuICAvKiogRGlzYWJsZSBIdHRwRW5kcG9pbnQuICovXG4gIERJU0FCTEVEID0gJ2Rpc2FibGVkJyxcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciBJTURTdjIgSW5zdGFuY2UgTWV0YWRhdGEgVGFncy5cbiAqL1xuZXhwb3J0IGVudW0gSW5zdGFuY2VNZXRhZGF0YVRhZ3Mge1xuICAvKiogTm8gcHJlZmVyZW5jZSBmb3IgaW5zdGFuY2UgbWV0YWRhdGEgdGFncy4gKi9cbiAgTk9fUFJFRkVSRU5DRSA9ICdub19wcmVmZXJlbmNlJyxcbiAgLyoqIEVuYWJsZSBpbnN0YW5jZSBtZXRhZGF0YSB0YWdzLiAqL1xuICBFTkFCTEVEID0gJ2VuYWJsZWQnLFxuICAvKiogRGlzYWJsZSBpbnN0YW5jZSBtZXRhZGF0YSB0YWdzLiAqL1xuICBESVNBQkxFRCA9ICdkaXNhYmxlZCcsXG59XG5cbi8qKlxuICogU3RhdGUgZm9yIGJsb2NraW5nIHB1YmxpYyBhY2Nlc3MgdG8gRUJTIHNuYXBzaG90cy5cbiAqL1xuZXhwb3J0IGVudW0gU25hcHNob3RCbG9ja1B1YmxpY0FjY2Vzc1N0YXRlIHtcbiAgLyoqIEJsb2NrIG5ldyBzaGFyaW5nIG9mIHNuYXBzaG90cy4gKi9cbiAgQkxPQ0tfTkVXX1NIQVJJTkcgPSAnYmxvY2tfbmV3X3NoYXJpbmcnLFxuICAvKiogQmxvY2sgYWxsIHNoYXJpbmcgb2Ygc25hcHNob3RzLiAqL1xuICBCTE9DS19BTExfU0hBUklORyA9ICdibG9ja19hbGxfc2hhcmluZycsXG59XG5cbi8qKlxuICogQW4gaW1hZ2UgcHJvdmlkZXIgKHByZWRlZmluZWQgb3IgQVdTIGFjY291bnQgSUQpLlxuICovXG5leHBvcnQgdHlwZSBJbWFnZVByb3ZpZGVyT3JBY2NvdW50SWQgPSBJbWFnZVByb3ZpZGVyIHwgc3RyaW5nO1xuXG4vKipcbiAqIFByb3BlcnRpZXMgZm9yIGNvbmZpZ3VyaW5nIGEgRGVjbGFyYXRpdmVQb2xpY3kuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGVjbGFyYXRpdmVQb2xpY3lQcm9wcyB7XG4gIC8qKiBUaGUgdGFyZ2V0IEFXUyBhY2NvdW50IG9yIG9yZ2FuaXphdGlvbmFsIHVuaXQgSURzIHRvIHdoaWNoIHRoZSBwb2xpY3kgd2lsbCBiZSBhdHRhY2hlZC4gKi9cbiAgcmVhZG9ubHkgdGFyZ2V0SWRzOiBzdHJpbmdbXTtcbiAgLyoqIFRoZSBuYW1lIG9mIHRoZSBwb2xpY3kuICovXG4gIHJlYWRvbmx5IG5hbWU/OiBzdHJpbmc7XG4gIC8qKiBUaGUgZGVzY3JpcHRpb24gb2YgdGhlIHBvbGljeS4gKi9cbiAgcmVhZG9ubHkgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIC8qKiBXaGV0aGVyIHRvIGJsb2NrIHB1YmxpYyBhY2Nlc3MgdG8gVlBDcy4gRGVmYXVsdHMgdG8gdHJ1ZS4gKi9cbiAgcmVhZG9ubHkgdnBjQmxvY2tQdWJsaWNBY2Nlc3M/OiBib29sZWFuO1xuICAvKiogV2hldGhlciB0byBkaXNhYmxlIHNlcmlhbCBjb25zb2xlIGFjY2Vzcy4gRGVmYXVsdHMgdG8gdHJ1ZS4gKi9cbiAgcmVhZG9ubHkgZGlzYWJsZVNlcmlhbENvbnNvbGVBY2Nlc3M/OiBib29sZWFuO1xuICAvKiogV2hldGhlciB0byBibG9jayBwdWJsaWMgYWNjZXNzIHRvIEFNSXMuIERlZmF1bHRzIHRvIHRydWUuICovXG4gIHJlYWRvbmx5IGltYWdlQmxvY2tQdWJsaWNBY2Nlc3M/OiBib29sZWFuO1xuICAvKiogV2hldGhlciB0byByZXN0cmljdCBhbGxvd2VkIGltYWdlIHByb3ZpZGVycy4gRGVmYXVsdHMgdG8gdHJ1ZS4gKi9cbiAgcmVhZG9ubHkgcmVzdHJpY3RJbWFnZVByb3ZpZGVycz86IGJvb2xlYW47XG4gIC8qKiBXaGV0aGVyIHRvIGVuZm9yY2UgaW5zdGFuY2UgbWV0YWRhdGEgc2VydmljZSBkZWZhdWx0cy4gRGVmYXVsdHMgdG8gdHJ1ZS4gKi9cbiAgcmVhZG9ubHkgaW5zdGFuY2VNZXRhZGF0YURlZmF1bHRzPzogYm9vbGVhbjtcbiAgLyoqIFdoZXRoZXIgdG8gYmxvY2sgcHVibGljIHNoYXJpbmcgb2YgRUJTIHNuYXBzaG90cy4gRGVmYXVsdHMgdG8gdHJ1ZS4gKi9cbiAgcmVhZG9ubHkgYmxvY2tQdWJsaWNTbmFwc2hvdHM/OiBib29sZWFuO1xuICAvKiogVGhlIG1vZGUgZm9yIGJsb2NraW5nIHB1YmxpYyBhY2Nlc3MgdG8gVlBDcy4gKi9cbiAgcmVhZG9ubHkgdnBjQmxvY2tQdWJsaWNBY2Nlc3NNb2RlPzogVnBjQmxvY2tQdWJsaWNBY2Nlc3NNb2RlO1xuICAvKiogVGhlIHN0YXRlIGZvciBhbGxvd2VkIGltYWdlcyBwb2xpY3kuICovXG4gIHJlYWRvbmx5IGFsbG93ZWRJbWFnZXNTdGF0ZT86IEFsbG93ZWRJbWFnZXNTdGF0ZTtcbiAgLyoqIFRoZSBsaXN0IG9mIGFsbG93ZWQgaW1hZ2UgcHJvdmlkZXJzIG9yIEFXUyBhY2NvdW50IElEcy4gKi9cbiAgcmVhZG9ubHkgYWxsb3dlZEltYWdlUHJvdmlkZXJzPzogSW1hZ2VQcm92aWRlck9yQWNjb3VudElkW107XG4gIC8qKiBUaGUgSHR0cFRva2VucyBzZXR0aW5nIGZvciBpbnN0YW5jZSBtZXRhZGF0YSBzZXJ2aWNlLiAqL1xuICByZWFkb25seSBodHRwVG9rZW5zPzogSHR0cFRva2VucztcbiAgLyoqIFRoZSBob3AgbGltaXQgZm9yIEhUVFAgUFVUIHJlc3BvbnNlcyBmcm9tIHRoZSBpbnN0YW5jZSBtZXRhZGF0YSBzZXJ2aWNlLiAqL1xuICByZWFkb25seSBodHRwUHV0UmVzcG9uc2VIb3BMaW1pdD86IG51bWJlcjtcbiAgLyoqIFRoZSBIdHRwRW5kcG9pbnQgc2V0dGluZyBmb3IgaW5zdGFuY2UgbWV0YWRhdGEgc2VydmljZS4gKi9cbiAgcmVhZG9ubHkgaHR0cEVuZHBvaW50PzogSHR0cEVuZHBvaW50O1xuICAvKiogVGhlIGluc3RhbmNlIG1ldGFkYXRhIHRhZ3Mgc2V0dGluZy4gKi9cbiAgcmVhZG9ubHkgaW5zdGFuY2VNZXRhZGF0YVRhZ3M/OiBJbnN0YW5jZU1ldGFkYXRhVGFncztcbiAgLyoqIFRoZSBzdGF0ZSBmb3IgYmxvY2tpbmcgcHVibGljIGFjY2VzcyB0byBFQlMgc25hcHNob3RzLiAqL1xuICByZWFkb25seSBzbmFwc2hvdEJsb2NrUHVibGljQWNjZXNzU3RhdGU/OiBTbmFwc2hvdEJsb2NrUHVibGljQWNjZXNzU3RhdGU7XG59XG5cbi8qKlxuICogQSBDREsgY29uc3RydWN0IHRoYXQgY3JlYXRlcyBhbiBBV1MgT3JnYW5pemF0aW9ucyBFQzIgRGVjbGFyYXRpdmUgUG9saWN5LlxuICpcbiAqIFRoaXMgY29uc3RydWN0IGFsbG93cyB5b3UgdG8gZGVjbGFyYXRpdmVseSBkZWZpbmUgYW5kIGFwcGx5IEVDMi1yZWxhdGVkIHBvbGljaWVzXG4gKiBzdWNoIGFzIGJsb2NraW5nIHB1YmxpYyBhY2Nlc3MgdG8gVlBDcywgcmVzdHJpY3RpbmcgQU1JIHByb3ZpZGVycywgZW5mb3JjaW5nXG4gKiBpbnN0YW5jZSBtZXRhZGF0YSBzZXJ2aWNlIHNldHRpbmdzLCBhbmQgbW9yZS5cbiAqXG4gKiBFeGFtcGxlOlxuICogYGBgdHNcbiAqIG5ldyBEZWNsYXJhdGl2ZVBvbGljeSh0aGlzLCAnTXlQb2xpY3knLCB7XG4gKiAgIHRhcmdldElkczogWydvdS14eHh4LXh4eHh4eHh4J10sXG4gKiAgIHZwY0Jsb2NrUHVibGljQWNjZXNzOiB0cnVlLFxuICogICB2cGNCbG9ja1B1YmxpY0FjY2Vzc01vZGU6IFZwY0Jsb2NrUHVibGljQWNjZXNzTW9kZS5CTE9DS19CSURJUkVDVElPTkFMLFxuICogfSk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGNsYXNzIERlY2xhcmF0aXZlUG9saWN5IGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgLyoqXG4gICAqIFRoZSBBUk4gb2YgdGhlIGNyZWF0ZWQgZGVjbGFyYXRpdmUgcG9saWN5LlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGRlY2xhcmF0aXZlUG9saWN5QXJuITogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgRGVjbGFyYXRpdmVQb2xpY3kuXG4gICAqIEBwYXJhbSBzY29wZSBUaGUgcGFyZW50IGNvbnN0cnVjdC5cbiAgICogQHBhcmFtIGlkIFRoZSBjb25zdHJ1Y3QgSUQuXG4gICAqIEBwYXJhbSBwcm9wcyBUaGUgcG9saWN5IHByb3BlcnRpZXMuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogRGVjbGFyYXRpdmVQb2xpY3lQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICAvLyBTZXQgZGVmYXVsdHMgZm9yIGJvb2xlYW4gcHJvcGVydGllc1xuICAgIGNvbnN0IHZwY0Jsb2NrUHVibGljQWNjZXNzID0gcHJvcHMudnBjQmxvY2tQdWJsaWNBY2Nlc3MgPz8gdHJ1ZTtcbiAgICBjb25zdCBkaXNhYmxlU2VyaWFsQ29uc29sZUFjY2VzcyA9IHByb3BzLmRpc2FibGVTZXJpYWxDb25zb2xlQWNjZXNzID8/IHRydWU7XG4gICAgY29uc3QgaW1hZ2VCbG9ja1B1YmxpY0FjY2VzcyA9IHByb3BzLmltYWdlQmxvY2tQdWJsaWNBY2Nlc3MgPz8gdHJ1ZTtcbiAgICBjb25zdCByZXN0cmljdEltYWdlUHJvdmlkZXJzID0gcHJvcHMucmVzdHJpY3RJbWFnZVByb3ZpZGVycyA/PyB0cnVlO1xuICAgIGNvbnN0IGluc3RhbmNlTWV0YWRhdGFEZWZhdWx0cyA9IHByb3BzLmluc3RhbmNlTWV0YWRhdGFEZWZhdWx0cyA/PyB0cnVlO1xuICAgIGNvbnN0IGJsb2NrUHVibGljU25hcHNob3RzID0gcHJvcHMuYmxvY2tQdWJsaWNTbmFwc2hvdHMgPz8gdHJ1ZTtcblxuICAgIGNvbnN0IGRlY2xhcmF0aXZlUG9saWN5ID0ge1xuICAgICAgZWMyX2F0dHJpYnV0ZXM6IHtcbiAgICAgICAgdnBjX2Jsb2NrX3B1YmxpY19hY2Nlc3M6IHZwY0Jsb2NrUHVibGljQWNjZXNzID8ge1xuICAgICAgICAgIGludGVybmV0X2dhdGV3YXlfYmxvY2s6IHtcbiAgICAgICAgICAgIG1vZGU6IHtcbiAgICAgICAgICAgICAgJ0BAYXNzaWduJzogcHJvcHMudnBjQmxvY2tQdWJsaWNBY2Nlc3NNb2RlID8/IFZwY0Jsb2NrUHVibGljQWNjZXNzTW9kZS5CTE9DS19JTkdSRVNTLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGV4Y2x1c2lvbnNfYWxsb3dlZDoge1xuICAgICAgICAgICAgICAnQEBhc3NpZ24nOiAnZW5hYmxlZCcsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0gOiB1bmRlZmluZWQsXG4gICAgICAgIHNlcmlhbF9jb25zb2xlX2FjY2VzczogZGlzYWJsZVNlcmlhbENvbnNvbGVBY2Nlc3MgPyB7XG4gICAgICAgICAgc3RhdHVzOiB7XG4gICAgICAgICAgICAnQEBhc3NpZ24nOiAnZGlzYWJsZWQnLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0gOiB1bmRlZmluZWQsXG4gICAgICAgIGltYWdlX2Jsb2NrX3B1YmxpY19hY2Nlc3M6IGltYWdlQmxvY2tQdWJsaWNBY2Nlc3MgPyB7XG4gICAgICAgICAgc3RhdGU6IHtcbiAgICAgICAgICAgICdAQGFzc2lnbic6ICdibG9ja19uZXdfc2hhcmluZycsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSA6IHVuZGVmaW5lZCxcbiAgICAgICAgYWxsb3dlZF9pbWFnZXNfc2V0dGluZ3M6IHJlc3RyaWN0SW1hZ2VQcm92aWRlcnMgPyB7XG4gICAgICAgICAgc3RhdGU6IHtcbiAgICAgICAgICAgICdAQGFzc2lnbic6IHByb3BzLmFsbG93ZWRJbWFnZXNTdGF0ZSA/PyBBbGxvd2VkSW1hZ2VzU3RhdGUuRU5BQkxFRCxcbiAgICAgICAgICB9LFxuICAgICAgICAgIC4uLihwcm9wcy5hbGxvd2VkSW1hZ2VQcm92aWRlcnMgJiYgcHJvcHMuYWxsb3dlZEltYWdlUHJvdmlkZXJzLmxlbmd0aCA+IDAgPyB7XG4gICAgICAgICAgICBpbWFnZV9jcml0ZXJpYToge1xuICAgICAgICAgICAgICBjcml0ZXJpYV8xOiB7XG4gICAgICAgICAgICAgICAgYWxsb3dlZF9pbWFnZV9wcm92aWRlcnM6IHtcbiAgICAgICAgICAgICAgICAgICdAQGFwcGVuZCc6IHByb3BzLmFsbG93ZWRJbWFnZVByb3ZpZGVycyxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9IDoge30pLFxuICAgICAgICB9IDogdW5kZWZpbmVkLFxuICAgICAgICBpbnN0YW5jZV9tZXRhZGF0YV9kZWZhdWx0czogaW5zdGFuY2VNZXRhZGF0YURlZmF1bHRzID8ge1xuICAgICAgICAgIGh0dHBfdG9rZW5zOiB7XG4gICAgICAgICAgICAnQEBhc3NpZ24nOiBwcm9wcy5odHRwVG9rZW5zID8/IEh0dHBUb2tlbnMuUkVRVUlSRUQsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBodHRwX3B1dF9yZXNwb25zZV9ob3BfbGltaXQ6IHtcbiAgICAgICAgICAgICdAQGFzc2lnbic6IHByb3BzLmh0dHBQdXRSZXNwb25zZUhvcExpbWl0Py50b1N0cmluZygpID8/ICc0JyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGh0dHBfZW5kcG9pbnQ6IHtcbiAgICAgICAgICAgICdAQGFzc2lnbic6IHByb3BzLmh0dHBFbmRwb2ludCA/PyBIdHRwRW5kcG9pbnQuRU5BQkxFRCxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGluc3RhbmNlX21ldGFkYXRhX3RhZ3M6IHtcbiAgICAgICAgICAgICdAQGFzc2lnbic6IHByb3BzLmluc3RhbmNlTWV0YWRhdGFUYWdzID8/IEluc3RhbmNlTWV0YWRhdGFUYWdzLkVOQUJMRUQsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSA6IHVuZGVmaW5lZCxcbiAgICAgICAgc25hcHNob3RfYmxvY2tfcHVibGljX2FjY2VzczogYmxvY2tQdWJsaWNTbmFwc2hvdHMgPyB7XG4gICAgICAgICAgc3RhdGU6IHtcbiAgICAgICAgICAgICdAQGFzc2lnbic6IHByb3BzLnNuYXBzaG90QmxvY2tQdWJsaWNBY2Nlc3NTdGF0ZSA/PyBTbmFwc2hvdEJsb2NrUHVibGljQWNjZXNzU3RhdGUuQkxPQ0tfTkVXX1NIQVJJTkcsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSA6IHVuZGVmaW5lZCxcbiAgICAgIH0sXG4gICAgfTtcblxuICAgIGNvbnN0IGFwcGx5RGVjbGFyYXRpdmVQb2xpY3kgPSBuZXcgb3JnYW5pemF0aW9ucy5DZm5Qb2xpY3kodGhpcywgYERlY2xhcmF0aXZlUG9saWN5LSR7dGhpcy5ub2RlLmlkfWAsIHtcbiAgICAgIGNvbnRlbnQ6IGRlY2xhcmF0aXZlUG9saWN5LFxuICAgICAgbmFtZTogcHJvcHMubmFtZSA/PyBgRGVjbGFyYXRpdmVQb2xpY3ktJHt0aGlzLm5vZGUuaWR9YCxcbiAgICAgIHR5cGU6ICdERUNMQVJBVElWRV9QT0xJQ1lfRUMyJyxcbiAgICAgIGRlc2NyaXB0aW9uOiBwcm9wcy5kZXNjcmlwdGlvbiA/PyAnRGVjbGFyYXRpdmUgUG9saWN5IGZyb20gQWR2YW5jZWQgQ0RLIENvbnN0cnVjdHMnLFxuICAgICAgdGFyZ2V0SWRzOiBwcm9wcy50YXJnZXRJZHMsXG4gICAgfSk7XG4gICAgdGhpcy5kZWNsYXJhdGl2ZVBvbGljeUFybiA9IGFwcGx5RGVjbGFyYXRpdmVQb2xpY3kuYXR0ckFybjtcblxuICB9XG59Il19