Socket
Socket
Sign inDemoInstall

@henrist/cdk-cloudfront-auth

Package Overview
Dependencies
51
Maintainers
1
Versions
159
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

Comparing version 1.0.2 to 1.1.0

23

lib/cloudfront-auth.d.ts
import * as cloudfront from "@aws-cdk/aws-cloudfront";
import { AddBehaviorOptions, BehaviorOptions, IOrigin } from "@aws-cdk/aws-cloudfront";
import * as cognito from "@aws-cdk/aws-cognito";

@@ -87,10 +88,32 @@ import * as cdk from "@aws-cdk/core";

* - sign out page
*
* This is to be used with CloudFrontWebDistribution. See
* createAuthPagesBehaviors if using Distribution.
*/
get authPages(): cloudfront.Behavior[];
/**
* Create behaviors for authentication pages.
*
* - callback page
* - refresh page
* - sign out page
*
* This is to be used with Distribution.
*/
createAuthPagesBehaviors(origin: IOrigin, options?: AddBehaviorOptions): Record<string, BehaviorOptions>;
/**
* Create lambda function association for viewer request to check
* authentication and original response to add headers.
*
* This is to be used with CloudFrontWebDistribution. See
* createProtectedBehavior if using Distribution.
*/
get authFilters(): cloudfront.LambdaFunctionAssociation[];
/**
* Create behavior that includes authorization check.
*
* This is to be used with Distribution.
*/
createProtectedBehavior(origin: IOrigin, options?: AddBehaviorOptions): BehaviorOptions;
/**
* Update Cognito client to use the proper URLs and OAuth scopes.

@@ -97,0 +120,0 @@ *

69

lib/cloudfront-auth.js

@@ -24,2 +24,3 @@ "use strict";

const cloudfront = __importStar(require("@aws-cdk/aws-cloudfront"));
const aws_cloudfront_1 = require("@aws-cdk/aws-cloudfront");
const cdk = __importStar(require("@aws-cdk/core"));

@@ -150,2 +151,5 @@ const cdk_lambda_config_1 = require("@henrist/cdk-lambda-config");

* - sign out page
*
* This is to be used with CloudFrontWebDistribution. See
* createAuthPagesBehaviors if using Distribution.
*/

@@ -160,4 +164,40 @@ get authPages() {

/**
* Create behaviors for authentication pages.
*
* - callback page
* - refresh page
* - sign out page
*
* This is to be used with Distribution.
*/
createAuthPagesBehaviors(origin, options) {
function path(path, fn) {
return {
[path]: {
origin,
forwardQueryString: true,
compress: true,
viewerProtocolPolicy: aws_cloudfront_1.ViewerProtocolPolicy.REDIRECT_TO_HTTPS,
edgeLambdas: [
{
eventType: cloudfront.LambdaEdgeEventType.VIEWER_REQUEST,
functionVersion: fn,
},
],
...options,
},
};
}
return {
...path(this.callbackPath, this.parseAuthFn),
...path(this.refreshAuthPath, this.refreshAuthFn),
...path(this.signOutPath, this.signOutFn),
};
}
/**
* Create lambda function association for viewer request to check
* authentication and original response to add headers.
*
* This is to be used with CloudFrontWebDistribution. See
* createProtectedBehavior if using Distribution.
*/

@@ -177,2 +217,29 @@ get authFilters() {

/**
* Create behavior that includes authorization check.
*
* This is to be used with Distribution.
*/
createProtectedBehavior(origin, options) {
if ((options === null || options === void 0 ? void 0 : options.edgeLambdas) != null) {
throw Error("User-defined edgeLambdas is currently not supported");
}
return {
origin,
forwardQueryString: true,
compress: true,
viewerProtocolPolicy: aws_cloudfront_1.ViewerProtocolPolicy.REDIRECT_TO_HTTPS,
edgeLambdas: [
{
eventType: cloudfront.LambdaEdgeEventType.VIEWER_REQUEST,
functionVersion: this.checkAuthFn,
},
{
eventType: cloudfront.LambdaEdgeEventType.ORIGIN_RESPONSE,
functionVersion: this.httpHeadersFn,
},
],
...options,
};
}
/**
* Update Cognito client to use the proper URLs and OAuth scopes.

@@ -201,2 +268,2 @@ *

exports.CloudFrontAuth = CloudFrontAuth;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xvdWRmcm9udC1hdXRoLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2Nsb3VkZnJvbnQtYXV0aC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsb0VBQXFEO0FBR3JELG1EQUFvQztBQUNwQyxrRUFBeUQ7QUFDekQsbURBQXNEO0FBQ3RELG1EQUE4QztBQUM5Qyx1REFBa0Q7QUE2RGxEOzs7R0FHRztBQUNILE1BQWEsY0FBZSxTQUFRLEdBQUcsQ0FBQyxTQUFTO0lBa0IvQyxZQUFZLEtBQW9CLEVBQUUsRUFBVSxFQUFFLEtBQTBCOztRQUN0RSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFBO1FBRWhCLElBQUksQ0FBQyxZQUFZLFNBQUcsS0FBSyxDQUFDLFlBQVksbUNBQUksZ0JBQWdCLENBQUE7UUFDMUQsSUFBSSxDQUFDLGlCQUFpQixTQUFHLEtBQUssQ0FBQyxpQkFBaUIsbUNBQUksR0FBRyxDQUFBO1FBQ3ZELElBQUksQ0FBQyxXQUFXLFNBQUcsS0FBSyxDQUFDLFdBQVcsbUNBQUksZ0JBQWdCLENBQUE7UUFDeEQsSUFBSSxDQUFDLGVBQWUsU0FBRyxLQUFLLENBQUMsZUFBZSxtQ0FBSSxlQUFlLENBQUE7UUFFL0QsSUFBSSxDQUFDLFdBQVcsR0FBRztZQUNqQixPQUFPO1lBQ1AsT0FBTztZQUNQLFNBQVM7WUFDVCxRQUFRO1lBQ1IsK0JBQStCO1NBQ2hDLENBQUE7UUFFRCxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUE7UUFFOUIsSUFBSSxDQUFDLGFBQWEsR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUE7UUFDbEMsSUFBSSxDQUFDLE1BQU0sU0FDVCxLQUFLLENBQUMsTUFBTSxtQ0FDWixLQUFLLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsRUFBRTtZQUN6Qyx3REFBd0Q7WUFDeEQsa0NBQWtDO1lBQ2xDLFNBQVMsRUFB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RUFBRSxVQUFVLENBQUMsbUJBQW1CLENBQUMsZUFBZTtnQkFDekQsY0FBYyxFQUFFLElBQUksQ0FBQyxhQUFhO2FBQ25DO1NBQ0YsQ0FBQTtJQUNILENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0ksWUFBWSxDQUFDLEVBQVUsRUFBRSxLQUF3QjtRQUN0RCxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRTtZQUN2QixNQUFNLElBQUksS0FBSyxDQUNiLGtFQUFrRTtnQkFDaEUsb0RBQW9ELENBQ3ZELENBQUE7U0FDRjtRQUVELE9BQU8sSUFBSSw0QkFBWSxDQUFDLElBQUksRUFBRSxFQUFFLEVBQUU7WUFDaEMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNO1lBQ25CLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTtZQUN2QixVQUFVLEVBQUUsS0FBSyxDQUFDLFVBQVU7WUFDNUIsV0FBVyxFQUFFLEtBQUssQ0FBQyxXQUFXO1lBQzlCLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVztZQUM3QixpQkFBaUIsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQU0sQ0FDbkMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsQ0FDN0Q7U0FDRixDQUFDLENBQUE7SUFDSixDQUFDO0NBQ0Y7QUF4TkQsd0NBd05DIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgY2xvdWRmcm9udCBmcm9tIFwiQGF3cy1jZGsvYXdzLWNsb3VkZnJvbnRcIlxuaW1wb3J0ICogYXMgY29nbml0byBmcm9tIFwiQGF3cy1jZGsvYXdzLWNvZ25pdG9cIlxuaW1wb3J0ICogYXMgbGFtYmRhIGZyb20gXCJAYXdzLWNkay9hd3MtbGFtYmRhXCJcbmltcG9ydCAqIGFzIGNkayBmcm9tIFwiQGF3cy1jZGsvY29yZVwiXG5pbXBvcnQgeyBMYW1iZGFDb25maWcgfSBmcm9tIFwiQGhlbnJpc3QvY2RrLWxhbWJkYS1jb25maWdcIlxuaW1wb3J0IHsgUmV0cmlldmVDbGllbnRTZWNyZXQgfSBmcm9tIFwiLi9jbGllbnQtc2VjcmV0XCJcbmltcG9ydCB7IENsaWVudFVwZGF0ZSB9IGZyb20gXCIuL2NsaWVudC11cGRhdGVcIlxuaW1wb3J0IHsgR2VuZXJhdGVTZWNyZXQgfSBmcm9tIFwiLi9nZW5lcmF0ZS1zZWNyZXRcIlxuaW1wb3J0IHsgU3RvcmVkQ29uZmlnIH0gZnJvbSBcIi4vaGFuZGxlcnMvdXRpbC9jb25maWdcIlxuaW1wb3J0IHsgQXV0aExhbWJkYXMgfSBmcm9tIFwiLi9sYW1iZGFzXCJcblxuZXhwb3J0IGludGVyZmFjZSBDbG91ZEZyb250QXV0aFByb3BzIHtcbiAgLyoqXG4gICAqIENvZ25pdG8gQ2xpZW50IHRoYXQgd2lsbCBiZSB1c2VkIHRvIGF1dGhlbnRpY2F0ZSB0aGUgdXNlci5cbiAgICpcbiAgICogSWYgYSBjdXN0b20gY2xpZW50IGlzIHByb3ZpZGVkLCB0aGUgdXBkYXRlQ2xpZW50IG1ldGhvZCBjYW5ub3RcbiAgICogYmUgdXNlZCBzaW5jZSB3ZSBjYW5ub3Qga25vdyB3aGljaCBwYXJhbWV0ZXJzIHdhcyBzZXQuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gYSBuZXcgY2xpZW50IHdpbGwgYmUgZ2VuZXJhdGVkXG4gICAqL1xuICBjbGllbnQ/OiBjb2duaXRvLlVzZXJQb29sQ2xpZW50XG4gIHVzZXJQb29sOiBjb2duaXRvLklVc2VyUG9vbFxuICAvKipcbiAgICogVGhlIGRvbWFpbiB0aGF0IGlzIHVzZWQgZm9yIENvZ25pdG8gQXV0aC5cbiAgICpcbiAgICogSWYgbm90IHVzaW5nIGN1c3RvbSBkb21haW5zIHRoaXMgd2lsbCBiZSBhIG5hbWUgdW5kZXIgYW1hem9uY29nbml0by5jb20uXG4gICAqXG4gICAqIEBleGFtcGxlIGAke2RvbWFpbi5kb21haW5OYW1lfS5hdXRoLiR7cmVnaW9ufS5hbWF6b25jb2duaXRvLmNvbWBcbiAgICovXG4gIGNvZ25pdG9BdXRoRG9tYWluOiBzdHJpbmdcbiAgYXV0aExhbWJkYXM6IEF1dGhMYW1iZGFzXG4gIC8qKlxuICAgKiBAZGVmYXVsdCAvYXV0aC9jYWxsYmFja1xuICAgKi9cbiAgY2FsbGJhY2tQYXRoPzogc3RyaW5nXG4gIC8qKlxuICAgKiBAZGVmYXVsdCAvXG4gICAqL1xuICBzaWduT3V0UmVkaXJlY3RUbz86IHN0cmluZ1xuICAvKipcbiAgICogQGRlZmF1bHQgL2F1dGgvc2lnbi1vdXRcbiAgICovXG4gIHNpZ25PdXRQYXRoPzogc3RyaW5nXG4gIC8qKlxuICAgKiBAZGVmYXVsdCAvYXV0aC9yZWZyZXNoXG4gICAqL1xuICByZWZyZXNoQXV0aFBhdGg/OiBzdHJpbmdcbiAgLyoqXG4gICAqIExvZyBsZXZlbC5cbiAgICpcbiAgICogQSBsb2cgbGV2ZWwgb2YgZGVidWcgd2lsbCBsb2cgc2VjcmV0cyBhbmQgc2hvdWxkIG9ubHkgYmUgdXNlZCBpblxuICAgKiBhIGRldmVsb3BtZW50IGVudmlyb25tZW50LlxuICAgKlxuICAgKiBAZGVmYXVsdCB3YXJuXG4gICAqL1xuICBsb2dMZXZlbD86IFwibm9uZVwiIHwgXCJlcnJvclwiIHwgXCJ3YXJuXCIgfCBcImluZm9cIiB8IFwiZGVidWdcIlxuICAvKipcbiAgICogUmVxdWlyZSB0aGUgdXNlciB0byBiZSBwYXJ0IG9mIGEgc3BlY2lmaWMgQ29nbml0byBncm91cCB0b1xuICAgKiBhY2Nlc3MgYW55IHJlc291cmNlLlxuICAgKi9cbiAgcmVxdWlyZUdyb3VwQW55T2Y/OiBzdHJpbmdbXVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFVwZGF0ZUNsaWVudFByb3BzIHtcbiAgc2lnbk91dFVybDogc3RyaW5nXG4gIGNhbGxiYWNrVXJsOiBzdHJpbmdcbn1cblxuLyoqXG4gKiBDb25maWd1cmUgcHJldmlvdXNseSBkZXBsb3llZCBsYW1iZGEgZnVuY3Rpb25zLCBDb2duaXRvIGNsaWVudFxuICogYW5kIENsb3VkRnJvbnQgZGlzdHJpYnV0aW9uLlxuICovXG5leHBvcnQgY2xhc3MgQ2xvdWRGcm9udEF1dGggZXh0ZW5kcyBjZGsuQ29uc3RydWN0IHtcbiAgcHVibGljIHJlYWRvbmx5IGNhbGxiYWNrUGF0aDogc3RyaW5nXG4gIHB1YmxpYyByZWFkb25seSBzaWduT3V0UmVkaXJlY3RUbzogc3RyaW5nXG4gIHB1YmxpYyByZWFkb25seSBzaWduT3V0UGF0aDogc3RyaW5nXG4gIHB1YmxpYyByZWFkb25seSByZWZyZXNoQXV0aFBhdGg6IHN0cmluZ1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgdXNlclBvb2w6IGNvZ25pdG8uSVVzZXJQb29sXG4gIHByaXZhdGUgcmVhZG9ubHkgY2xpZW50Q3JlYXRlZDogYm9vbGVhblxuICBwdWJsaWMgcmVhZG9ubHkgY2xpZW50OiBjb2duaXRvLlVzZXJQb29sQ2xpZW50XG5cbiAgcHJpdmF0ZSByZWFkb25seSBjaGVja0F1dGhGbjogbGFtYmRhLklWZXJzaW9uXG4gIHByaXZhdGUgcmVhZG9ubHkgaHR0cEhlYWRlcnNGbjogbGFtYmRhLklWZXJzaW9uXG4gIHByaXZhdGUgcmVhZG9ubHkgcGFyc2VBdXRoRm46IGxhbWJkYS5JVmVyc2lvblxuICBwcml2YXRlIHJlYWRvbmx5IHJlZnJlc2hBdXRoRm46IGxhbWJkYS5JVmVyc2lvblxuICBwcml2YXRlIHJlYWRvbmx5IHNpZ25PdXRGbjogbGFtYmRhLklWZXJzaW9uXG5cbiAgcHJpdmF0ZSByZWFkb25seSBvYXV0aFNjb3Blczogc3RyaW5nW11cblxuICBjb25zdHJ1Y3RvcihzY29wZTogY2RrLkNvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IENsb3VkRnJvbnRBdXRoUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpXG5cbiAgICB0aGlzLmNhbGxiYWNrUGF0aCA9IHByb3BzLmNhbGxiYWNrUGF0aCA/PyBcIi9hdXRoL2NhbGxiYWNrXCJcbiAgICB0aGlzLnNpZ25PdXRSZWRpcmVjdFRvID0gcHJvcHMuc2lnbk91dFJlZGlyZWN0VG8gPz8gXCIvXCJcbiAgICB0aGlzLnNpZ25PdXRQYXRoID0gcHJvcHMuc2lnbk91dFBhdGggPz8gXCIvYXV0aC9zaWduLW91dFwiXG4gICAgdGhpcy5yZWZyZXNoQXV0aFBhdGggPSBwcm9wcy5yZWZyZXNoQXV0aFBhdGggPz8gXCIvYXV0aC9yZWZyZXNoXCJcblxuICAgIHRoaXMub2F1dGhTY29wZXMgPSBbXG4gICAgICBcInBob25lXCIsXG4gICAgICBcImVtYWlsXCIsXG4gICAgICBcInByb2ZpbGVcIixcbiAgICAgIFwib3BlbmlkXCIsXG4gICAgICBcImF3cy5jb2duaXRvLnNpZ25pbi51c2VyLmFkbWluXCIsXG4gICAgXVxuXG4gICAgdGhpcy51c2VyUG9vbCA9IHByb3BzLnVzZXJQb29sXG5cbiAgICB0aGlzLmNsaWVudENyZWF0ZWQgPSAhcHJvcHMuY2xpZW50XG4gICAgdGhpcy5jbGllbnQgPVxuICAgICAgcHJvcHMuY2xpZW50ID8/XG4gICAgICBwcm9wcy51c2VyUG9vbC5hZGRDbGllbnQoXCJVc2VyUG9vbENsaWVudFwiLCB7XG4gICAgICAgIC8vIE5vdGU6IFRoZSBmb2xsb3dpbmcgbXVzdCBiZSBrZXB0IGluIHN5bmMgd2l0aCB0aGUgQVBJXG4gICAgICAgIC8vIGNhbGwgcGVyZm9ybWVkIGluIENsaWVudFVwZGF0ZS5cbiAgICAgICAgYXV0aEZsb3dzOiB7XG4gICAgICAgICAgdXNlclBhc3N3b3JkOiB0cnVlLFxuICAgICAgICAgIHJlZnJlc2hUb2tlbjogdHJ1ZSxcbiAgICAgICAgICB1c2VyU3JwOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICBvQXV0aDoge1xuICAgICAgICAgIGZsb3dzOiB7XG4gICAgICAgICAgICBhdXRob3JpemF0aW9uQ29kZUdyYW50OiB0cnVlLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHByZXZlbnRVc2VyRXhpc3RlbmNlRXJyb3JzOiB0cnVlLFxuICAgICAgICBnZW5lcmF0ZVNlY3JldDogdHJ1ZSxcbiAgICAgIH0pXG5cbiAgICBjb25zdCBub25jZVNpZ25pbmdTZWNyZXQgPSBuZXcgR2VuZXJhdGVTZWNyZXQodGhpcywgXCJOb25jZVNpZ25pbmdTZWNyZXRcIilcbiAgICAgIC52YWx1ZVxuXG4gICAgY29uc3QgeyBjbGllbnRTZWNyZXRWYWx1ZSB9ID0gbmV3IFJldHJpZXZlQ2xpZW50U2VjcmV0KFxuICAgICAgdGhpcyxcbiAgICAgIFwiQ2xpZW50U2VjcmV0XCIsXG4gICAgICB7XG4gICAgICAgIGNsaWVudDogdGhpcy5jbGllbnQsXG4gICAgICAgIHVzZXJQb29sOiB0aGlzLnVzZXJQb29sLFxuICAgICAgfSxcbiAgICApXG5cbiAgICBjb25zdCBjb25maWc6IFN0b3JlZENvbmZpZyA9IHtcbiAgICAgIGh0dHBIZWFkZXJzOiB7XG4gICAgICAgIFwiQ29udGVudC1TZWN1cml0eS1Qb2xpY3lcIjpcbiAgICAgICAgICBcImRlZmF1bHQtc3JjICdub25lJzsgaW1nLXNyYyAnc2VsZic7IHNjcmlwdC1zcmMgJ3NlbGYnOyBzdHlsZS1zcmMgJ3NlbGYnICd1bnNhZmUtaW5saW5lJzsgb2JqZWN0LXNyYyAnbm9uZSc7IGNvbm5lY3Qtc3JjICdzZWxmJ1wiLFxuICAgICAgICBcIlN0cmljdC1UcmFuc3BvcnQtU2VjdXJpdHlcIjpcbiAgICAgICAgICBcIm1heC1hZ2U9MzE1MzYwMDA7IGluY2x1ZGVTdWJkb21haW5zOyBwcmVsb2FkXCIsXG4gICAgICAgIFwiUmVmZXJyZXItUG9saWN5XCI6IFwic2FtZS1vcmlnaW5cIixcbiAgICAgICAgXCJYLVhTUy1Qcm90ZWN0aW9uXCI6IFwiMTsgbW9kZT1ibG9ja1wiLFxuICAgICAgICBcIlgtRnJhbWUtT3B0aW9uc1wiOiBcIkRFTllcIixcbiAgICAgICAgXCJYLUNvbnRlbnQtVHlwZS1PcHRpb25zXCI6IFwibm9zbmlmZlwiLFxuICAgICAgICBcIkNhY2hlLUNvbnRyb2xcIjogXCJuby1jYWNoZVwiLFxuICAgICAgfSxcbiAgICAgIGxvZ0xldmVsOiBwcm9wcy5sb2dMZXZlbCA/PyBcIndhcm5cIixcbiAgICAgIHVzZXJQb29sSWQ6IHRoaXMudXNlclBvb2wudXNlclBvb2xJZCxcbiAgICAgIGNsaWVudElkOiB0aGlzLmNsaWVudC51c2VyUG9vbENsaWVudElkLFxuICAgICAgY2xpZW50U2VjcmV0OiBjbGllbnRTZWNyZXRWYWx1ZSxcbiAgICAgIG9hdXRoU2NvcGVzOiB0aGlzLm9hdXRoU2NvcGVzLFxuICAgICAgY29nbml0b0F1dGhEb21haW46IHByb3BzLmNvZ25pdG9BdXRoRG9tYWluLFxuICAgICAgY2FsbGJhY2tQYXRoOiB0aGlzLmNhbGxiYWNrUGF0aCxcbiAgICAgIHNpZ25PdXRSZWRpcmVjdFRvOiB0aGlzLnNpZ25PdXRSZWRpcmVjdFRvLFxuICAgICAgc2lnbk91dFBhdGg6IHRoaXMuc2lnbk91dFBhdGgsXG4gICAgICByZWZyZXNoQXV0aFBhdGg6IHRoaXMucmVmcmVzaEF1dGhQYXRoLFxuICAgICAgcmVxdWlyZUdyb3VwQW55T2Y6IHByb3BzLnJlcXVpcmVHcm91cEFueU9mID8/IG51bGwsXG4gICAgICBjb29raWVTZXR0aW5nczoge1xuICAgICAgICAvKlxuICAgICAgICBzcGFNb2RlIC0gY29uc2lkZXIgaWYgdGhpcyBzaG91bGQgYmUgc3VwcG9ydGVkXG4gICAgICAgIGlkVG9rZW46IFwiUGF0aD0vOyBTZWN1cmU7IFNhbWVTaXRlPUxheFwiLFxuICAgICAgICBhY2Nlc3NUb2tlbjogXCJQYXRoPS87IFNlY3VyZTsgU2FtZVNpdGU9TGF4XCIsXG4gICAgICAgIHJlZnJlc2hUb2tlbjogXCJQYXRoPS87IFNlY3VyZTsgU2FtZVNpdGU9TGF4XCIsXG4gICAgICAgIG5vbmNlOiBcIlBhdGg9LzsgU2VjdXJlOyBIdHRwT25seTsgU2FtZVNpdGU9TGF4XCIsXG4gICAgICAgICovXG4gICAgICAgIGlkVG9rZW46IFwiUGF0aD0vOyBTZWN1cmU7IEh0dHBPbmx5OyBTYW1lU2l0ZT1MYXhcIixcbiAgICAgICAgYWNjZXNzVG9rZW46IFwiUGF0aD0vOyBTZWN1cmU7IEh0dHBPbmx5OyBTYW1lU2l0ZT1MYXhcIixcbiAgICAgICAgcmVmcmVzaFRva2VuOiBcIlBhdGg9LzsgU2VjdXJlOyBIdHRwT25seTsgU2FtZVNpdGU9TGF4XCIsXG4gICAgICAgIG5vbmNlOiBcIlBhdGg9LzsgU2VjdXJlOyBIdHRwT25seTsgU2FtZVNpdGU9TGF4XCIsXG4gICAgICB9LFxuICAgICAgbm9uY2VTaWduaW5nU2VjcmV0LFxuICAgIH1cblxuICAgIHRoaXMuY2hlY2tBdXRoRm4gPSBuZXcgTGFtYmRhQ29uZmlnKHRoaXMsIFwiQ2hlY2tBdXRoRm5cIiwge1xuICAgICAgZnVuY3Rpb246IHByb3BzLmF1dGhMYW1iZGFzLmNoZWNrQXV0aEZuLmdldCh0aGlzLCBcIkNoZWNrQXV0aEZuSW1wb3J0XCIpLFxuICAgICAgY29uZmlnLFxuICAgIH0pLnZlcnNpb25cblxuICAgIHRoaXMuaHR0cEhlYWRlcnNGbiA9IG5ldyBMYW1iZGFDb25maWcodGhpcywgXCJIdHRwSGVhZGVyc0ZuXCIsIHtcbiAgICAgIGZ1bmN0aW9uOiBwcm9wcy5hdXRoTGFtYmRhcy5odHRwSGVhZGVyc0ZuLmdldChcbiAgICAgICAgdGhpcyxcbiAgICAgICAgXCJIdHRwSGVhZGVyc0ZuSW1wb3J0XCIsXG4gICAgICApLFxuICAgICAgY29uZmlnLFxuICAgIH0pLnZlcnNpb25cblxuICAgIHRoaXMucGFyc2VBdXRoRm4gPSBuZXcgTGFtYmRhQ29uZmlnKHRoaXMsIFwiUGFyc2VBdXRoRm5cIiwge1xuICAgICAgZnVuY3Rpb246IHByb3BzLmF1dGhMYW1iZGFzLnBhcnNlQXV0aEZuLmdldCh0aGlzLCBcIlBhcnNlQXV0aEZuSW1wb3J0XCIpLFxuICAgICAgY29uZmlnLFxuICAgIH0pLnZlcnNpb25cblxuICAgIHRoaXMucmVmcmVzaEF1dGhGbiA9IG5ldyBMYW1iZGFDb25maWcodGhpcywgXCJSZWZyZXNoQXV0aEZuXCIsIHtcbiAgICAgIGZ1bmN0aW9uOiBwcm9wcy5hdXRoTGFtYmRhcy5yZWZyZXNoQXV0aEZuLmdldChcbiAgICAgICAgdGhpcyxcbiAgICAgICAgXCJSZWZyZXNoQXV0aEZuSW1wb3J0XCIsXG4gICAgICApLFxuICAgICAgY29uZmlnLFxuICAgIH0pLnZlcnNpb25cblxuICAgIHRoaXMuc2lnbk91dEZuID0gbmV3IExhbWJkYUNvbmZpZyh0aGlzLCBcIlNpZ25PdXRGblwiLCB7XG4gICAgICBmdW5jdGlvbjogcHJvcHMuYXV0aExhbWJkYXMuc2lnbk91dEZuLmdldCh0aGlzLCBcIlNpZ25PdXRGbkltcG9ydFwiKSxcbiAgICAgIGNvbmZpZyxcbiAgICB9KS52ZXJzaW9uXG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZVBhdGhMYW1iZGEoXG4gICAgcGF0aDogc3RyaW5nLFxuICAgIGZuOiBsYW1iZGEuSVZlcnNpb24sXG4gICk6IGNsb3VkZnJvbnQuQmVoYXZpb3Ige1xuICAgIHJldHVybiB7XG4gICAgICBwYXRoUGF0dGVybjogcGF0aCxcbiAgICAgIGZvcndhcmRlZFZhbHVlczoge1xuICAgICAgICBxdWVyeVN0cmluZzogdHJ1ZSxcbiAgICAgIH0sXG4gICAgICBsYW1iZGFGdW5jdGlvbkFzc29jaWF0aW9uczogW1xuICAgICAgICB7XG4gICAgICAgICAgZXZlbnRUeXBlOiBjbG91ZGZyb250LkxhbWJkYUVkZ2VFdmVudFR5cGUuVklFV0VSX1JFUVVFU1QsXG4gICAgICAgICAgbGFtYmRhRnVuY3Rpb246IGZuLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGJlaGF2aW9ycyBmb3IgYXV0aGVudGljYXRpb24gcGFnZXM6XG4gICAqXG4gICAqIC0gY2FsbGJhY2sgcGFnZVxuICAgKiAtIHJlZnJlc2ggcGFnZVxuICAgKiAtIHNpZ24gb3V0IHBhZ2VcbiAgICovXG4gIHB1YmxpYyBnZXQgYXV0aFBhZ2VzKCk6IGNsb3VkZnJvbnQuQmVoYXZpb3JbXSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIHRoaXMuY3JlYXRlUGF0aExhbWJkYSh0aGlzLmNhbGxiYWNrUGF0aCwgdGhpcy5wYXJzZUF1dGhGbiksXG4gICAgICB0aGlzLmNyZWF0ZVBhdGhMYW1iZGEodGhpcy5yZWZyZXNoQXV0aFBhdGgsIHRoaXMucmVmcmVzaEF1dGhGbiksXG4gICAgICB0aGlzLmNyZWF0ZVBhdGhMYW1iZGEodGhpcy5zaWduT3V0UGF0aCwgdGhpcy5zaWduT3V0Rm4pLFxuICAgIF1cbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgbGFtYmRhIGZ1bmN0aW9uIGFzc29jaWF0aW9uIGZvciB2aWV3ZXIgcmVxdWVzdCB0byBjaGVja1xuICAgKiBhdXRoZW50aWNhdGlvbiBhbmQgb3JpZ2luYWwgcmVzcG9uc2UgdG8gYWRkIGhlYWRlcnMuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGF1dGhGaWx0ZXJzKCk6IGNsb3VkZnJvbnQuTGFtYmRhRnVuY3Rpb25Bc3NvY2lhdGlvbltdIHtcbiAgICByZXR1cm4gW1xuICAgICAge1xuICAgICAgICBldmVudFR5cGU6IGNsb3VkZnJvbnQuTGFtYmRhRWRnZUV2ZW50VHlwZS5WSUVXRVJfUkVRVUVTVCxcbiAgICAgICAgbGFtYmRhRnVuY3Rpb246IHRoaXMuY2hlY2tBdXRoRm4sXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBldmVudFR5cGU6IGNsb3VkZnJvbnQuTGFtYmRhRWRnZUV2ZW50VHlwZS5PUklHSU5fUkVTUE9OU0UsXG4gICAgICAgIGxhbWJkYUZ1bmN0aW9uOiB0aGlzLmh0dHBIZWFkZXJzRm4sXG4gICAgICB9LFxuICAgIF1cbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgQ29nbml0byBjbGllbnQgdG8gdXNlIHRoZSBwcm9wZXIgVVJMcyBhbmQgT0F1dGggc2NvcGVzLlxuICAgKlxuICAgKiBUT0RPOiBJbiBjYXNlIHRoZSBjbGllbnQgY29uZmlndXJhdGlvbiBjaGFuZ2VzIGFuZCBpcyB1cGRhdGVkXG4gICAqICBieSBDbG91ZEZvcm1hdGlvbiwgdGhpcyB3aWxsIG5vdCBiZSByZWFwcGxpZWQgY2F1c2luZyB0aGUgY2xpZW50XG4gICAqICB0byBub3QgYmUgY29ycmVjdGx5IGNvbmZpZ3VyZWQuXG4gICAqICBIb3cgY2FuIHdlIGF2b2lkIHRoaXMgc2NlbmFyaW8/XG4gICAqL1xuICBwdWJsaWMgdXBkYXRlQ2xpZW50KGlkOiBzdHJpbmcsIHByb3BzOiBVcGRhdGVDbGllbnRQcm9wcyk6IENsaWVudFVwZGF0ZSB7XG4gICAgaWYgKCF0aGlzLmNsaWVudENyZWF0ZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJZb3UgY2Fubm90IHVzZSB1cGRhdGVDbGllbnQgd2l0aCBhIHVzZXItcHJvdmlkZWQgQ29nbml0byBDbGllbnQgXCIgK1xuICAgICAgICAgIFwic2luY2UgaXQgd291bGQgb3ZlcnJpZGUgdGhlIHVzZXItcHJvdmlkZWQgc2V0dGluZ3NcIixcbiAgICAgIClcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IENsaWVudFVwZGF0ZSh0aGlzLCBpZCwge1xuICAgICAgY2xpZW50OiB0aGlzLmNsaWVudCxcbiAgICAgIHVzZXJQb29sOiB0aGlzLnVzZXJQb29sLFxuICAgICAgc2lnbk91dFVybDogcHJvcHMuc2lnbk91dFVybCxcbiAgICAgIGNhbGxiYWNrVXJsOiBwcm9wcy5jYWxsYmFja1VybCxcbiAgICAgIG9hdXRoU2NvcGVzOiB0aGlzLm9hdXRoU2NvcGVzLFxuICAgICAgaWRlbnRpdHlQcm92aWRlcnM6IFtcIkNPR05JVE9cIl0uY29uY2F0KFxuICAgICAgICB0aGlzLnVzZXJQb29sLmlkZW50aXR5UHJvdmlkZXJzLm1hcCgoaXQpID0+IGl0LnByb3ZpZGVyTmFtZSksXG4gICAgICApLFxuICAgIH0pXG4gIH1cbn1cbiJdfQ==
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xvdWRmcm9udC1hdXRoLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2Nsb3VkZnJvbnQtYXV0aC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsb0VBQXFEO0FBQ3JELDREQUtnQztBQUloQyxtREFBb0M7QUFDcEMsa0VBQXlEO0FBQ3pELG1EQUFzRDtBQUN0RCxtREFBOEM7QUFDOUMsdURBQWtEO0FBNkRsRDs7O0dBR0c7QUFDSCxNQUFhLGNBQWUsU0FBUSxHQUFHLENBQUMsU0FBUztJQWtCL0MsWUFBWSxLQUFvQixFQUFFLEVBQVUsRUFBRSxLQUEwQjs7UUFDdEUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQTtRQUVoQixJQUFJLENBQUMsWUFBWSxTQUFHLEtBQUssQ0FBQyxZQUFZLG1DQUFJLGdCQUFnQixDQUFBO1FBQzFELElBQUksQ0FBQyxpQkFBaUIsU0FBRyxLQUFLLENBQUMsaUJBQWlCLG1DQUFJLEdBQUcsQ0FBQTtRQUN2RCxJQUFJLENBQUMsV0FBVyxTQUFHLEtBQUssQ0FBQyxXQUFXLG1DQUFJLGdCQUFnQixDQUFBO1FBQ3hELElBQUksQ0FBQyxlQUFlLFNBQUcsS0FBSyxDQUFDLGVBQWUsbUNBQUksZUFBZSxDQUFBO1FBRS9ELElBQUksQ0FBQyxXQUFXLEdBQUc7WUFDakIsT0FBTztZQUNQLE9BQU87WUFDUCxTQUFTO1lBQ1QsUUFBUTtZQUNSLCtCQUErQjtTQUNoQyxDQUFBO1FBRUQsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFBO1FBRTlCLElBQUksQ0FBQyxhQUFhLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFBO1FBQ2xDLElBQUksQ0FBQyxNQUFNLFNBQ1QsS0FBSyxDQUFDLE1BQU0sbUNBQ1osS0FBSyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLEVBQUU7WUFDekMsd0RBQXdEO1lBQ3hELGtDQUFrQztZ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QUk7WUFDZCxvQkFBb0IsRUFBRSxxQ0FBb0IsQ0FBQyxpQkFBaUI7WUFDNUQsV0FBVyxFQUFFO2dCQUNYO29CQUNFLFNBQVMsRUFBRSxVQUFVLENBQUMsbUJBQW1CLENBQUMsY0FBYztvQkFDeEQsZUFBZSxFQUFFLElBQUksQ0FBQyxXQUFXO2lCQUNsQztnQkFDRDtvQkFDRSxTQUFTLEVBQUUsVUFBVSxDQUFDLG1CQUFtQixDQUFDLGVBQWU7b0JBQ3pELGVBQWUsRUFBRSxJQUFJLENBQUMsYUFBYTtpQkFDcEM7YUFDRjtZQUNELEdBQUcsT0FBTztTQUNYLENBQUE7SUFDSCxDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNJLFlBQVksQ0FBQyxFQUFVLEVBQUUsS0FBd0I7UUFDdEQsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUU7WUFDdkIsTUFBTSxJQUFJLEtBQUssQ0FDYixrRUFBa0U7Z0JBQ2hFLG9EQUFvRCxDQUN2RCxDQUFBO1NBQ0Y7UUFFRCxPQUFPLElBQUksNEJBQVksQ0FBQyxJQUFJLEVBQUUsRUFBRSxFQUFFO1lBQ2hDLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTTtZQUNuQixRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7WUFDdkIsVUFBVSxFQUFFLEtBQUssQ0FBQyxVQUFVO1lBQzVCLFdBQVcsRUFBRSxLQUFLLENBQUMsV0FBVztZQUM5QixXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVc7WUFDN0IsaUJBQWlCLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFNLENBQ25DLElBQUksQ0FBQyxRQUFRLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLENBQzdEO1NBQ0YsQ0FBQyxDQUFBO0lBQ0osQ0FBQztDQUNGO0FBcFNELHdDQW9TQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGNsb3VkZnJvbnQgZnJvbSBcIkBhd3MtY2RrL2F3cy1jbG91ZGZyb250XCJcbmltcG9ydCB7XG4gIEFkZEJlaGF2aW9yT3B0aW9ucyxcbiAgQmVoYXZpb3JPcHRpb25zLFxuICBJT3JpZ2luLFxuICBWaWV3ZXJQcm90b2NvbFBvbGljeSxcbn0gZnJvbSBcIkBhd3MtY2RrL2F3cy1jbG91ZGZyb250XCJcbmltcG9ydCAqIGFzIGNvZ25pdG8gZnJvbSBcIkBhd3MtY2RrL2F3cy1jb2duaXRvXCJcbmltcG9ydCAqIGFzIGxhbWJkYSBmcm9tIFwiQGF3cy1jZGsvYXdzLWxhbWJkYVwiXG5pbXBvcnQgeyBJVmVyc2lvbiB9IGZyb20gXCJAYXdzLWNkay9hd3MtbGFtYmRhXCJcbmltcG9ydCAqIGFzIGNkayBmcm9tIFwiQGF3cy1jZGsvY29yZVwiXG5pbXBvcnQgeyBMYW1iZGFDb25maWcgfSBmcm9tIFwiQGhlbnJpc3QvY2RrLWxhbWJkYS1jb25maWdcIlxuaW1wb3J0IHsgUmV0cmlldmVDbGllbnRTZWNyZXQgfSBmcm9tIFwiLi9jbGllbnQtc2VjcmV0XCJcbmltcG9ydCB7IENsaWVudFVwZGF0ZSB9IGZyb20gXCIuL2NsaWVudC11cGRhdGVcIlxuaW1wb3J0IHsgR2VuZXJhdGVTZWNyZXQgfSBmcm9tIFwiLi9nZW5lcmF0ZS1zZWNyZXRcIlxuaW1wb3J0IHsgU3RvcmVkQ29uZmlnIH0gZnJvbSBcIi4vaGFuZGxlcnMvdXRpbC9jb25maWdcIlxuaW1wb3J0IHsgQXV0aExhbWJkYXMgfSBmcm9tIFwiLi9sYW1iZGFzXCJcblxuZXhwb3J0IGludGVyZmFjZSBDbG91ZEZyb250QXV0aFByb3BzIHtcbiAgLyoqXG4gICAqIENvZ25pdG8gQ2xpZW50IHRoYXQgd2lsbCBiZSB1c2VkIHRvIGF1dGhlbnRpY2F0ZSB0aGUgdXNlci5cbiAgICpcbiAgICogSWYgYSBjdXN0b20gY2xpZW50IGlzIHByb3ZpZGVkLCB0aGUgdXBkYXRlQ2xpZW50IG1ldGhvZCBjYW5ub3RcbiAgICogYmUgdXNlZCBzaW5jZSB3ZSBjYW5ub3Qga25vdyB3aGljaCBwYXJhbWV0ZXJzIHdhcyBzZXQuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gYSBuZXcgY2xpZW50IHdpbGwgYmUgZ2VuZXJhdGVkXG4gICAqL1xuICBjbGllbnQ/OiBjb2duaXRvLlVzZXJQb29sQ2xpZW50XG4gIHVzZXJQb29sOiBjb2duaXRvLklVc2VyUG9vbFxuICAvKipcbiAgICogVGhlIGRvbWFpbiB0aGF0IGlzIHVzZWQgZm9yIENvZ25pdG8gQXV0aC5cbiAgICpcbiAgICogSWYgbm90IHVzaW5nIGN1c3RvbSBkb21haW5zIHRoaXMgd2lsbCBiZSBhIG5hbWUgdW5kZXIgYW1hem9uY29nbml0by5jb20uXG4gICAqXG4gICAqIEBleGFtcGxlIGAke2RvbWFpbi5kb21haW5OYW1lfS5hdXRoLiR7cmVnaW9ufS5hbWF6b25jb2duaXRvLmNvbWBcbiAgICovXG4gIGNvZ25pdG9BdXRoRG9tYWluOiBzdHJpbmdcbiAgYXV0aExhbWJkYXM6IEF1dGhMYW1iZGFzXG4gIC8qKlxuICAgKiBAZGVmYXVsdCAvYXV0aC9jYWxsYmFja1xuICAgKi9cbiAgY2FsbGJhY2tQYXRoPzogc3RyaW5nXG4gIC8qKlxuICAgKiBAZGVmYXVsdCAvXG4gICAqL1xuICBzaWduT3V0UmVkaXJlY3RUbz86IHN0cmluZ1xuICAvKipcbiAgICogQGRlZmF1bHQgL2F1dGgvc2lnbi1vdXRcbiAgICovXG4gIHNpZ25PdXRQYXRoPzogc3RyaW5nXG4gIC8qKlxuICAgKiBAZGVmYXVsdCAvYXV0aC9yZWZyZXNoXG4gICAqL1xuICByZWZyZXNoQXV0aFBhdGg/OiBzdHJpbmdcbiAgLyoqXG4gICAqIExvZyBsZXZlbC5cbiAgICpcbiAgICogQSBsb2cgbGV2ZWwgb2YgZGVidWcgd2lsbCBsb2cgc2VjcmV0cyBhbmQgc2hvdWxkIG9ubHkgYmUgdXNlZCBpblxuICAgKiBhIGRldmVsb3BtZW50IGVudmlyb25tZW50LlxuICAgKlxuICAgKiBAZGVmYXVsdCB3YXJuXG4gICAqL1xuICBsb2dMZXZlbD86IFwibm9uZVwiIHwgXCJlcnJvclwiIHwgXCJ3YXJuXCIgfCBcImluZm9cIiB8IFwiZGVidWdcIlxuICAvKipcbiAgICogUmVxdWlyZSB0aGUgdXNlciB0byBiZSBwYXJ0IG9mIGEgc3BlY2lmaWMgQ29nbml0byBncm91cCB0b1xuICAgKiBhY2Nlc3MgYW55IHJlc291cmNlLlxuICAgKi9cbiAgcmVxdWlyZUdyb3VwQW55T2Y/OiBzdHJpbmdbXVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFVwZGF0ZUNsaWVudFByb3BzIHtcbiAgc2lnbk91dFVybDogc3RyaW5nXG4gIGNhbGxiYWNrVXJsOiBzdHJpbmdcbn1cblxuLyoqXG4gKiBDb25maWd1cmUgcHJldmlvdXNseSBkZXBsb3llZCBsYW1iZGEgZnVuY3Rpb25zLCBDb2duaXRvIGNsaWVudFxuICogYW5kIENsb3VkRnJvbnQgZGlzdHJpYnV0aW9uLlxuICovXG5leHBvcnQgY2xhc3MgQ2xvdWRGcm9udEF1dGggZXh0ZW5kcyBjZGsuQ29uc3RydWN0IHtcbiAgcHVibGljIHJlYWRvbmx5IGNhbGxiYWNrUGF0aDogc3RyaW5nXG4gIHB1YmxpYyByZWFkb25seSBzaWduT3V0UmVkaXJlY3RUbzogc3RyaW5nXG4gIHB1YmxpYyByZWFkb25seSBzaWduT3V0UGF0aDogc3RyaW5nXG4gIHB1YmxpYyByZWFkb25seSByZWZyZXNoQXV0aFBhdGg6IHN0cmluZ1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgdXNlclBvb2w6IGNvZ25pdG8uSVVzZXJQb29sXG4gIHByaXZhdGUgcmVhZG9ubHkgY2xpZW50Q3JlYXRlZDogYm9vbGVhblxuICBwdWJsaWMgcmVhZG9ubHkgY2xpZW50OiBjb2duaXRvLlVzZXJQb29sQ2xpZW50XG5cbiAgcHJpdmF0ZSByZWFkb25seSBjaGVja0F1dGhGbjogbGFtYmRhLklWZXJzaW9uXG4gIHByaXZhdGUgcmVhZG9ubHkgaHR0cEhlYWRlcnNGbjogbGFtYmRhLklWZXJzaW9uXG4gIHByaXZhdGUgcmVhZG9ubHkgcGFyc2VBdXRoRm46IGxhbWJkYS5JVmVyc2lvblxuICBwcml2YXRlIHJlYWRvbmx5IHJlZnJlc2hBdXRoRm46IGxhbWJkYS5JVmVyc2lvblxuICBwcml2YXRlIHJlYWRvbmx5IHNpZ25PdXRGbjogbGFtYmRhLklWZXJzaW9uXG5cbiAgcHJpdmF0ZSByZWFkb25seSBvYXV0aFNjb3Blczogc3RyaW5nW11cblxuICBjb25zdHJ1Y3RvcihzY29wZTogY2RrLkNvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IENsb3VkRnJvbnRBdXRoUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpXG5cbiAgICB0aGlzLmNhbGxiYWNrUGF0aCA9IHByb3BzLmNhbGxiYWNrUGF0aCA/PyBcIi9hdXRoL2NhbGxiYWNrXCJcbiAgICB0aGlzLnNpZ25PdXRSZWRpcmVjdFRvID0gcHJvcHMuc2lnbk91dFJlZGlyZWN0VG8gPz8gXCIvXCJcbiAgICB0aGlzLnNpZ25PdXRQYXRoID0gcHJvcHMuc2lnbk91dFBhdGggPz8gXCIvYXV0aC9zaWduLW91dFwiXG4gICAgdGhpcy5yZWZyZXNoQXV0aFBhdGggPSBwcm9wcy5yZWZyZXNoQXV0aFBhdGggPz8gXCIvYXV0aC9yZWZyZXNoXCJcblxuICAgIHRoaXMub2F1dGhTY29wZXMgPSBbXG4gICAgICBcInBob25lXCIsXG4gICAgICBcImVtYWlsXCIsXG4gICAgICBcInByb2ZpbGVcIixcbiAgICAgIFwib3BlbmlkXCIsXG4gICAgICBcImF3cy5jb2duaXRvLnNpZ25pbi51c2VyLmFkbWluXCIsXG4gICAgXVxuXG4gICAgdGhpcy51c2VyUG9vbCA9IHByb3BzLnVzZXJQb29sXG5cbiAgICB0aGlzLmNsaWVudENyZWF0ZWQgPSAhcHJvcHMuY2xpZW50XG4gICAgdGhpcy5jbGllbnQgPVxuICAgICAgcHJvcHMuY2xpZW50ID8/XG4gICAgICBwcm9wcy51c2VyUG9vbC5hZGRDbGllbnQoXCJVc2VyUG9vbENsaWVudFwiLCB7XG4gICAgICAgIC8vIE5vdGU6IFRoZSBmb2xsb3dpbmcgbXVzdCBiZSBrZXB0IGluIHN5bmMgd2l0aCB0aGUgQVBJXG4gICAgICAgIC8vIGNhbGwgcGVyZm9ybWVkIGluIENsaWVudFVwZGF0ZS5cbiAgICAgICAgYXV0aEZsb3dzOiB7XG4gICAgICAgICAgdXNlclBhc3N3b3JkOiB0cnVlLFxuICAgICAgICAgIHJlZnJlc2hUb2tlbjogdHJ1ZSxcbiAgICAgICAgICB1c2VyU3JwOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICBvQXV0aDoge1xuICAgICAgICAgIGZsb3dzOiB7XG4gICAgICAgICAgICBhdXRob3JpemF0aW9uQ29kZUdyYW50OiB0cnVlLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHByZXZlbnRVc2VyRXhpc3RlbmNlRXJyb3JzOiB0cnVlLFxuICAgICAgICBnZW5lcmF0ZVNlY3JldDogdHJ1ZSxcbiAgICAgIH0pXG5cbiAgICBjb25zdCBub25jZVNpZ25pbmdTZWNyZXQgPSBuZXcgR2VuZXJhdGVTZWNyZXQodGhpcywgXCJOb25jZVNpZ25pbmdTZWNyZXRcIilcbiAgICAgIC52YWx1ZVxuXG4gICAgY29uc3QgeyBjbGllbnRTZWNyZXRWYWx1ZSB9ID0gbmV3IFJldHJpZXZlQ2xpZW50U2VjcmV0KFxuICAgICAgdGhpcyxcbiAgICAgIFwiQ2xpZW50U2VjcmV0XCIsXG4gICAgICB7XG4gICAgICAgIGNsaWVudDogdGhpcy5jbGllbnQsXG4gICAgICAgIHVzZXJQb29sOiB0aGlzLnVzZXJQb29sLFxuICAgICAgfSxcbiAgICApXG5cbiAgICBjb25zdCBjb25maWc6IFN0b3JlZENvbmZpZyA9IHtcbiAgICAgIGh0dHBIZWFkZXJzOiB7XG4gICAgICAgIFwiQ29udGVudC1TZWN1cml0eS1Qb2xpY3lcIjpcbiAgICAgICAgICBcImRlZmF1bHQtc3JjICdub25lJzsgaW1nLXNyYyAnc2VsZic7IHNjcmlwdC1zcmMgJ3NlbGYnOyBzdHlsZS1zcmMgJ3NlbGYnICd1bnNhZmUtaW5saW5lJzsgb2JqZWN0LXNyYyAnbm9uZSc7IGNvbm5lY3Qtc3JjICdzZWxmJ1wiLFxuICAgICAgICBcIlN0cmljdC1UcmFuc3BvcnQtU2VjdXJpdHlcIjpcbiAgICAgICAgICBcIm1heC1hZ2U9MzE1MzYwMDA7IGluY2x1ZGVTdWJkb21haW5zOyBwcmVsb2FkXCIsXG4gICAgICAgIFwiUmVmZXJyZXItUG9saWN5XCI6IFwic2FtZS1vcmlnaW5cIixcbiAgICAgICAgXCJYLVhTUy1Qcm90ZWN0aW9uXCI6IFwiMTsgbW9kZT1ibG9ja1wiLFxuICAgICAgICBcIlgtRnJhbWUtT3B0aW9uc1wiOiBcIkRFTllcIixcbiAgICAgICAgXCJYLUNvbnRlbnQtVHlwZS1PcHRpb25zXCI6IFwibm9zbmlmZlwiLFxuICAgICAgICBcIkNhY2hlLUNvbnRyb2xcIjogXCJuby1jYWNoZVwiLFxuICAgICAgfSxcbiAgICAgIGxvZ0xldmVsOiBwcm9wcy5sb2dMZXZlbCA/PyBcIndhcm5cIixcbiAgICAgIHVzZXJQb29sSWQ6IHRoaXMudXNlclBvb2wudXNlclBvb2xJZCxcbiAgICAgIGNsaWVudElkOiB0aGlzLmNsaWVudC51c2VyUG9vbENsaWVudElkLFxuICAgICAgY2xpZW50U2VjcmV0OiBjbGllbnRTZWNyZXRWYWx1ZSxcbiAgICAgIG9hdXRoU2NvcGVzOiB0aGlzLm9hdXRoU2NvcGVzLFxuICAgICAgY29nbml0b0F1dGhEb21haW46IHByb3BzLmNvZ25pdG9BdXRoRG9tYWluLFxuICAgICAgY2FsbGJhY2tQYXRoOiB0aGlzLmNhbGxiYWNrUGF0aCxcbiAgICAgIHNpZ25PdXRSZWRpcmVjdFRvOiB0aGlzLnNpZ25PdXRSZWRpcmVjdFRvLFxuICAgICAgc2lnbk91dFBhdGg6IHRoaXMuc2lnbk91dFBhdGgsXG4gICAgICByZWZyZXNoQXV0aFBhdGg6IHRoaXMucmVmcmVzaEF1dGhQYXRoLFxuICAgICAgcmVxdWlyZUdyb3VwQW55T2Y6IHByb3BzLnJlcXVpcmVHcm91cEFueU9mID8/IG51bGwsXG4gICAgICBjb29raWVTZXR0aW5nczoge1xuICAgICAgICAvKlxuICAgICAgICBzcGFNb2RlIC0gY29uc2lkZXIgaWYgdGhpcyBzaG91bGQgYmUgc3VwcG9ydGVkXG4gICAgICAgIGlkVG9rZW46IFwiUGF0aD0vOyBTZWN1cmU7IFNhbWVTaXRlPUxheFwiLFxuICAgICAgICBhY2Nlc3NUb2tlbjogXCJQYXRoPS87IFNlY3VyZTsgU2FtZVNpdGU9TGF4XCIsXG4gICAgICAgIHJlZnJlc2hUb2tlbjogXCJQYXRoPS87IFNlY3VyZTsgU2FtZVNpdGU9TGF4XCIsXG4gICAgICAgIG5vbmNlOiBcIlBhdGg9LzsgU2VjdXJlOyBIdHRwT25seTsgU2FtZVNpdGU9TGF4XCIsXG4gICAgICAgICovXG4gICAgICAgIGlkVG9rZW46IFwiUGF0aD0vOyBTZWN1cmU7IEh0dHBPbmx5OyBTYW1lU2l0ZT1MYXhcIixcbiAgICAgICAgYWNjZXNzVG9rZW46IFwiUGF0aD0vOyBTZWN1cmU7IEh0dHBPbmx5OyBTYW1lU2l0ZT1MYXhcIixcbiAgICAgICAgcmVmcmVzaFRva2VuOiBcIlBhdGg9LzsgU2VjdXJlOyBIdHRwT25seTsgU2FtZVNpdGU9TGF4XCIsXG4gICAgICAgIG5vbmNlOiBcIlBhdGg9LzsgU2VjdXJlOyBIdHRwT25seTsgU2FtZVNpdGU9TGF4XCIsXG4gICAgICB9LFxuICAgICAgbm9uY2VTaWduaW5nU2VjcmV0LFxuICAgIH1cblxuICAgIHRoaXMuY2hlY2tBdXRoRm4gPSBuZXcgTGFtYmRhQ29uZmlnKHRoaXMsIFwiQ2hlY2tBdXRoRm5cIiwge1xuICAgICAgZnVuY3Rpb246IHByb3BzLmF1dGhMYW1iZGFzLmNoZWNrQXV0aEZuLmdldCh0aGlzLCBcIkNoZWNrQXV0aEZuSW1wb3J0XCIpLFxuICAgICAgY29uZmlnLFxuICAgIH0pLnZlcnNpb25cblxuICAgIHRoaXMuaHR0cEhlYWRlcnNGbiA9IG5ldyBMYW1iZGFDb25maWcodGhpcywgXCJIdHRwSGVhZGVyc0ZuXCIsIHtcbiAgICAgIGZ1bmN0aW9uOiBwcm9wcy5hdXRoTGFtYmRhcy5odHRwSGVhZGVyc0ZuLmdldChcbiAgICAgICAgdGhpcyxcbiAgICAgICAgXCJIdHRwSGVhZGVyc0ZuSW1wb3J0XCIsXG4gICAgICApLFxuICAgICAgY29uZmlnLFxuICAgIH0pLnZlcnNpb25cblxuICAgIHRoaXMucGFyc2VBdXRoRm4gPSBuZXcgTGFtYmRhQ29uZmlnKHRoaXMsIFwiUGFyc2VBdXRoRm5cIiwge1xuICAgICAgZnVuY3Rpb246IHByb3BzLmF1dGhMYW1iZGFzLnBhcnNlQXV0aEZuLmdldCh0aGlzLCBcIlBhcnNlQXV0aEZuSW1wb3J0XCIpLFxuICAgICAgY29uZmlnLFxuICAgIH0pLnZlcnNpb25cblxuICAgIHRoaXMucmVmcmVzaEF1dGhGbiA9IG5ldyBMYW1iZGFDb25maWcodGhpcywgXCJSZWZyZXNoQXV0aEZuXCIsIHtcbiAgICAgIGZ1bmN0aW9uOiBwcm9wcy5hdXRoTGFtYmRhcy5yZWZyZXNoQXV0aEZuLmdldChcbiAgICAgICAgdGhpcyxcbiAgICAgICAgXCJSZWZyZXNoQXV0aEZuSW1wb3J0XCIsXG4gICAgICApLFxuICAgICAgY29uZmlnLFxuICAgIH0pLnZlcnNpb25cblxuICAgIHRoaXMuc2lnbk91dEZuID0gbmV3IExhbWJkYUNvbmZpZyh0aGlzLCBcIlNpZ25PdXRGblwiLCB7XG4gICAgICBmdW5jdGlvbjogcHJvcHMuYXV0aExhbWJkYXMuc2lnbk91dEZuLmdldCh0aGlzLCBcIlNpZ25PdXRGbkltcG9ydFwiKSxcbiAgICAgIGNvbmZpZyxcbiAgICB9KS52ZXJzaW9uXG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZVBhdGhMYW1iZGEoXG4gICAgcGF0aDogc3RyaW5nLFxuICAgIGZuOiBsYW1iZGEuSVZlcnNpb24sXG4gICk6IGNsb3VkZnJvbnQuQmVoYXZpb3Ige1xuICAgIHJldHVybiB7XG4gICAgICBwYXRoUGF0dGVybjogcGF0aCxcbiAgICAgIGZvcndhcmRlZFZhbHVlczoge1xuICAgICAgICBxdWVyeVN0cmluZzogdHJ1ZSxcbiAgICAgIH0sXG4gICAgICBsYW1iZGFGdW5jdGlvbkFzc29jaWF0aW9uczogW1xuICAgICAgICB7XG4gICAgICAgICAgZXZlbnRUeXBlOiBjbG91ZGZyb250LkxhbWJkYUVkZ2VFdmVudFR5cGUuVklFV0VSX1JFUVVFU1QsXG4gICAgICAgICAgbGFtYmRhRnVuY3Rpb246IGZuLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGJlaGF2aW9ycyBmb3IgYXV0aGVudGljYXRpb24gcGFnZXM6XG4gICAqXG4gICAqIC0gY2FsbGJhY2sgcGFnZVxuICAgKiAtIHJlZnJlc2ggcGFnZVxuICAgKiAtIHNpZ24gb3V0IHBhZ2VcbiAgICpcbiAgICogVGhpcyBpcyB0byBiZSB1c2VkIHdpdGggQ2xvdWRGcm9udFdlYkRpc3RyaWJ1dGlvbi4gU2VlXG4gICAqIGNyZWF0ZUF1dGhQYWdlc0JlaGF2aW9ycyBpZiB1c2luZyBEaXN0cmlidXRpb24uXG4gICAqL1xuICBwdWJsaWMgZ2V0IGF1dGhQYWdlcygpOiBjbG91ZGZyb250LkJlaGF2aW9yW10ge1xuICAgIHJldHVybiBbXG4gICAgICB0aGlzLmNyZWF0ZVBhdGhMYW1iZGEodGhpcy5jYWxsYmFja1BhdGgsIHRoaXMucGFyc2VBdXRoRm4pLFxuICAgICAgdGhpcy5jcmVhdGVQYXRoTGFtYmRhKHRoaXMucmVmcmVzaEF1dGhQYXRoLCB0aGlzLnJlZnJlc2hBdXRoRm4pLFxuICAgICAgdGhpcy5jcmVhdGVQYXRoTGFtYmRhKHRoaXMuc2lnbk91dFBhdGgsIHRoaXMuc2lnbk91dEZuKSxcbiAgICBdXG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGJlaGF2aW9ycyBmb3IgYXV0aGVudGljYXRpb24gcGFnZXMuXG4gICAqXG4gICAqIC0gY2FsbGJhY2sgcGFnZVxuICAgKiAtIHJlZnJlc2ggcGFnZVxuICAgKiAtIHNpZ24gb3V0IHBhZ2VcbiAgICpcbiAgICogVGhpcyBpcyB0byBiZSB1c2VkIHdpdGggRGlzdHJpYnV0aW9uLlxuICAgKi9cbiAgcHVibGljIGNyZWF0ZUF1dGhQYWdlc0JlaGF2aW9ycyhcbiAgICBvcmlnaW46IElPcmlnaW4sXG4gICAgb3B0aW9ucz86IEFkZEJlaGF2aW9yT3B0aW9ucyxcbiAgKTogUmVjb3JkPHN0cmluZywgQmVoYXZpb3JPcHRpb25zPiB7XG4gICAgZnVuY3Rpb24gcGF0aChwYXRoOiBzdHJpbmcsIGZuOiBJVmVyc2lvbik6IFJlY29yZDxzdHJpbmcsIEJlaGF2aW9yT3B0aW9ucz4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgW3BhdGhdOiB7XG4gICAgICAgICAgb3JpZ2luLFxuICAgICAgICAgIGZvcndhcmRRdWVyeVN0cmluZzogdHJ1ZSxcbiAgICAgICAgICBjb21wcmVzczogdHJ1ZSxcbiAgICAgICAgICB2aWV3ZXJQcm90b2NvbFBvbGljeTogVmlld2VyUHJvdG9jb2xQb2xpY3kuUkVESVJFQ1RfVE9fSFRUUFMsXG4gICAgICAgICAgZWRnZUxhbWJkYXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgZXZlbnRUeXBlOiBjbG91ZGZyb250LkxhbWJkYUVkZ2VFdmVudFR5cGUuVklFV0VSX1JFUVVFU1QsXG4gICAgICAgICAgICAgIGZ1bmN0aW9uVmVyc2lvbjogZm4sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgfSxcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4ucGF0aCh0aGlzLmNhbGxiYWNrUGF0aCwgdGhpcy5wYXJzZUF1dGhGbiksXG4gICAgICAuLi5wYXRoKHRoaXMucmVmcmVzaEF1dGhQYXRoLCB0aGlzLnJlZnJlc2hBdXRoRm4pLFxuICAgICAgLi4ucGF0aCh0aGlzLnNpZ25PdXRQYXRoLCB0aGlzLnNpZ25PdXRGbiksXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBsYW1iZGEgZnVuY3Rpb24gYXNzb2NpYXRpb24gZm9yIHZpZXdlciByZXF1ZXN0IHRvIGNoZWNrXG4gICAqIGF1dGhlbnRpY2F0aW9uIGFuZCBvcmlnaW5hbCByZXNwb25zZSB0byBhZGQgaGVhZGVycy5cbiAgICpcbiAgICogVGhpcyBpcyB0byBiZSB1c2VkIHdpdGggQ2xvdWRGcm9udFdlYkRpc3RyaWJ1dGlvbi4gU2VlXG4gICAqIGNyZWF0ZVByb3RlY3RlZEJlaGF2aW9yIGlmIHVzaW5nIERpc3RyaWJ1dGlvbi5cbiAgICovXG4gIHB1YmxpYyBnZXQgYXV0aEZpbHRlcnMoKTogY2xvdWRmcm9udC5MYW1iZGFGdW5jdGlvbkFzc29jaWF0aW9uW10ge1xuICAgIHJldHVybiBbXG4gICAgICB7XG4gICAgICAgIGV2ZW50VHlwZTogY2xvdWRmcm9udC5MYW1iZGFFZGdlRXZlbnRUeXBlLlZJRVdFUl9SRVFVRVNULFxuICAgICAgICBsYW1iZGFGdW5jdGlvbjogdGhpcy5jaGVja0F1dGhGbixcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGV2ZW50VHlwZTogY2xvdWRmcm9udC5MYW1iZGFFZGdlRXZlbnRUeXBlLk9SSUdJTl9SRVNQT05TRSxcbiAgICAgICAgbGFtYmRhRnVuY3Rpb246IHRoaXMuaHR0cEhlYWRlcnNGbixcbiAgICAgIH0sXG4gICAgXVxuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBiZWhhdmlvciB0aGF0IGluY2x1ZGVzIGF1dGhvcml6YXRpb24gY2hlY2suXG4gICAqXG4gICAqIFRoaXMgaXMgdG8gYmUgdXNlZCB3aXRoIERpc3RyaWJ1dGlvbi5cbiAgICovXG4gIHB1YmxpYyBjcmVhdGVQcm90ZWN0ZWRCZWhhdmlvcihcbiAgICBvcmlnaW46IElPcmlnaW4sXG4gICAgb3B0aW9ucz86IEFkZEJlaGF2aW9yT3B0aW9ucyxcbiAgKTogQmVoYXZpb3JPcHRpb25zIHtcbiAgICBpZiAob3B0aW9ucz8uZWRnZUxhbWJkYXMgIT0gbnVsbCkge1xuICAgICAgdGhyb3cgRXJyb3IoXCJVc2VyLWRlZmluZWQgZWRnZUxhbWJkYXMgaXMgY3VycmVudGx5IG5vdCBzdXBwb3J0ZWRcIilcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgb3JpZ2luLFxuICAgICAgZm9yd2FyZFF1ZXJ5U3RyaW5nOiB0cnVlLFxuICAgICAgY29tcHJlc3M6IHRydWUsXG4gICAgICB2aWV3ZXJQcm90b2NvbFBvbGljeTogVmlld2VyUHJvdG9jb2xQb2xpY3kuUkVESVJFQ1RfVE9fSFRUUFMsXG4gICAgICBlZGdlTGFtYmRhczogW1xuICAgICAgICB7XG4gICAgICAgICAgZXZlbnRUeXBlOiBjbG91ZGZyb250LkxhbWJkYUVkZ2VFdmVudFR5cGUuVklFV0VSX1JFUVVFU1QsXG4gICAgICAgICAgZnVuY3Rpb25WZXJzaW9uOiB0aGlzLmNoZWNrQXV0aEZuLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgZXZlbnRUeXBlOiBjbG91ZGZyb250LkxhbWJkYUVkZ2VFdmVudFR5cGUuT1JJR0lOX1JFU1BPTlNFLFxuICAgICAgICAgIGZ1bmN0aW9uVmVyc2lvbjogdGhpcy5odHRwSGVhZGVyc0ZuLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSBDb2duaXRvIGNsaWVudCB0byB1c2UgdGhlIHByb3BlciBVUkxzIGFuZCBPQXV0aCBzY29wZXMuXG4gICAqXG4gICAqIFRPRE86IEluIGNhc2UgdGhlIGNsaWVudCBjb25maWd1cmF0aW9uIGNoYW5nZXMgYW5kIGlzIHVwZGF0ZWRcbiAgICogIGJ5IENsb3VkRm9ybWF0aW9uLCB0aGlzIHdpbGwgbm90IGJlIHJlYXBwbGllZCBjYXVzaW5nIHRoZSBjbGllbnRcbiAgICogIHRvIG5vdCBiZSBjb3JyZWN0bHkgY29uZmlndXJlZC5cbiAgICogIEhvdyBjYW4gd2UgYXZvaWQgdGhpcyBzY2VuYXJpbz9cbiAgICovXG4gIHB1YmxpYyB1cGRhdGVDbGllbnQoaWQ6IHN0cmluZywgcHJvcHM6IFVwZGF0ZUNsaWVudFByb3BzKTogQ2xpZW50VXBkYXRlIHtcbiAgICBpZiAoIXRoaXMuY2xpZW50Q3JlYXRlZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcIllvdSBjYW5ub3QgdXNlIHVwZGF0ZUNsaWVudCB3aXRoIGEgdXNlci1wcm92aWRlZCBDb2duaXRvIENsaWVudCBcIiArXG4gICAgICAgICAgXCJzaW5jZSBpdCB3b3VsZCBvdmVycmlkZSB0aGUgdXNlci1wcm92aWRlZCBzZXR0aW5nc1wiLFxuICAgICAgKVxuICAgIH1cblxuICAgIHJldHVybiBuZXcgQ2xpZW50VXBkYXRlKHRoaXMsIGlkLCB7XG4gICAgICBjbGllbnQ6IHRoaXMuY2xpZW50LFxuICAgICAgdXNlclBvb2w6IHRoaXMudXNlclBvb2wsXG4gICAgICBzaWduT3V0VXJsOiBwcm9wcy5zaWduT3V0VXJsLFxuICAgICAgY2FsbGJhY2tVcmw6IHByb3BzLmNhbGxiYWNrVXJsLFxuICAgICAgb2F1dGhTY29wZXM6IHRoaXMub2F1dGhTY29wZXMsXG4gICAgICBpZGVudGl0eVByb3ZpZGVyczogW1wiQ09HTklUT1wiXS5jb25jYXQoXG4gICAgICAgIHRoaXMudXNlclBvb2wuaWRlbnRpdHlQcm92aWRlcnMubWFwKChpdCkgPT4gaXQucHJvdmlkZXJOYW1lKSxcbiAgICAgICksXG4gICAgfSlcbiAgfVxufVxuIl19

16

package.json
{
"name": "@henrist/cdk-cloudfront-auth",
"version": "1.0.2",
"version": "1.1.0",
"description": "CDK Constructs for adding authentication for a CloudFront Distribution",

@@ -84,10 +84,10 @@ "repository": {

"peerDependencies": {
"@aws-cdk/aws-cloudfront": "^1.50.0",
"@aws-cdk/aws-cognito": "^1.50.0",
"@aws-cdk/aws-iam": "^1.50.0",
"@aws-cdk/aws-lambda": "^1.50.0",
"@aws-cdk/aws-ssm": "^1.50.0",
"@aws-cdk/core": "^1.50.0",
"@aws-cdk/custom-resources": "^1.50.0"
"@aws-cdk/aws-cloudfront": "^1.57.0",
"@aws-cdk/aws-cognito": "^1.57.0",
"@aws-cdk/aws-iam": "^1.57.0",
"@aws-cdk/aws-lambda": "^1.57.0",
"@aws-cdk/aws-ssm": "^1.57.0",
"@aws-cdk/core": "^1.57.0",
"@aws-cdk/custom-resources": "^1.57.0"
}
}

@@ -19,3 +19,3 @@ # CloudFront authorization with Cognito for CDK

const authLambdas = new AuthLambdas(this, "AuthLambdas", {
regions: ["eu-west-1"],
regions: ["eu-west-1"], // Regions to make Lambda version params available.
})

@@ -33,19 +33,6 @@ ```

})
const distribution = new cloudfront.CloudFrontWebDistribution(
this,
"CloudFrontDistribution",
{
originConfigs: [
{
behaviors: [
...auth.authPages,
{
isDefaultBehavior: true,
lambdaFunctionAssociations: auth.authFilters,
},
],
},
],
},
)
const distribution = new cloudfront.Distribution(this, "Distribution", {
defaultBehavior: auth.createProtectedBehavior(origin),
additionalBehaviors: auth.createAuthPagesBehaviors(origin),
})
auth.updateClient("ClientUpdate", {

@@ -56,1 +43,24 @@ signOutUrl: `https://${distribution.distributionDomainName}${auth.signOutRedirectTo}`,

```
If using `CloudFrontWebDistribution` instead of `Distribution`:
```ts
const distribution = new cloudfront.CloudFrontWebDistribution(this, "Distribution", {
originConfigs: [
{
behaviors: [
...auth.authPages,
{
isDefaultBehavior: true,
lambdaFunctionAssociations: auth.authFilters,
},
],
},
],
})
```
## Customizing authorization
The `CloudFrontAuth` construct accepts a `requireGroupAnyOf` property
that causes access to be restricted to only users in specific groups.
SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc