@liflig/cdk-cloudfront-auth 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +63 -0
- package/dist/check-auth/index.js +2 -0
- package/dist/check-auth/index.js.LICENSE.txt +17 -0
- package/dist/generate-secret/index.js +1 -0
- package/dist/http-headers/index.js +2 -0
- package/dist/http-headers/index.js.LICENSE.txt +6 -0
- package/dist/parse-auth/index.js +2 -0
- package/dist/parse-auth/index.js.LICENSE.txt +31 -0
- package/dist/refresh-auth/index.js +2 -0
- package/dist/refresh-auth/index.js.LICENSE.txt +31 -0
- package/dist/sign-out/index.js +2 -0
- package/dist/sign-out/index.js.LICENSE.txt +17 -0
- package/lib/client-secret.d.ts +10 -0
- package/lib/client-secret.js +54 -0
- package/lib/client-update.d.ts +14 -0
- package/lib/client-update.js +59 -0
- package/lib/cloudfront-auth.d.ts +132 -0
- package/lib/cloudfront-auth.js +267 -0
- package/lib/generate-secret.d.ts +15 -0
- package/lib/generate-secret.js +71 -0
- package/lib/handlers/check-auth.d.ts +7 -0
- package/lib/handlers/generate-secret.d.ts +9 -0
- package/lib/handlers/http-headers.d.ts +1 -0
- package/lib/handlers/parse-auth.d.ts +1 -0
- package/lib/handlers/refresh-auth.d.ts +1 -0
- package/lib/handlers/sign-out.d.ts +1 -0
- package/lib/handlers/util/axios.d.ts +4 -0
- package/lib/handlers/util/axios.js +42 -0
- package/lib/handlers/util/base64.d.ts +8 -0
- package/lib/handlers/util/base64.js +26 -0
- package/lib/handlers/util/cloudfront.d.ts +17 -0
- package/lib/handlers/util/cloudfront.js +102 -0
- package/lib/handlers/util/config.d.ts +26 -0
- package/lib/handlers/util/config.js +48 -0
- package/lib/handlers/util/cookies.d.ts +29 -0
- package/lib/handlers/util/cookies.js +115 -0
- package/lib/handlers/util/jwt.d.ts +17 -0
- package/lib/handlers/util/jwt.js +59 -0
- package/lib/handlers/util/logger.d.ts +16 -0
- package/lib/handlers/util/logger.js +55 -0
- package/lib/handlers/util/nonce.d.ts +9 -0
- package/lib/handlers/util/nonce.js +47 -0
- package/lib/index.d.ts +2 -0
- package/lib/index.js +19 -0
- package/lib/lambdas.d.ts +33 -0
- package/lib/lambdas.js +88 -0
- package/package.json +75 -0
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* cookie
|
|
3
|
+
* Copyright(c) 2012-2014 Roman Shtylman
|
|
4
|
+
* Copyright(c) 2015 Douglas Christopher Wilson
|
|
5
|
+
* MIT Licensed
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
/*! safe-buffer. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> */
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* @license
|
|
12
|
+
* Lodash <https://lodash.com/>
|
|
13
|
+
* Copyright OpenJS Foundation and other contributors <https://openjsf.org/>
|
|
14
|
+
* Released under MIT license <https://lodash.com/license>
|
|
15
|
+
* Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>
|
|
16
|
+
* Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
|
|
17
|
+
*/
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import * as cognito from "aws-cdk-lib/aws-cognito";
|
|
2
|
+
import { Construct } from "constructs";
|
|
3
|
+
export interface RetrieveClientSecretProps {
|
|
4
|
+
client: cognito.IUserPoolClient;
|
|
5
|
+
userPool: cognito.IUserPool;
|
|
6
|
+
}
|
|
7
|
+
export declare class RetrieveClientSecret extends Construct {
|
|
8
|
+
clientSecretValue: string;
|
|
9
|
+
constructor(scope: Construct, id: string, props: RetrieveClientSecretProps);
|
|
10
|
+
}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
+
exports.RetrieveClientSecret = void 0;
|
|
27
|
+
const iam = __importStar(require("aws-cdk-lib/aws-iam"));
|
|
28
|
+
const cr = __importStar(require("aws-cdk-lib/custom-resources"));
|
|
29
|
+
const constructs_1 = require("constructs");
|
|
30
|
+
class RetrieveClientSecret extends constructs_1.Construct {
|
|
31
|
+
constructor(scope, id, props) {
|
|
32
|
+
super(scope, id);
|
|
33
|
+
const clientSecret = new cr.AwsCustomResource(this, "Resource", {
|
|
34
|
+
onUpdate: {
|
|
35
|
+
service: "CognitoIdentityServiceProvider",
|
|
36
|
+
action: "describeUserPoolClient",
|
|
37
|
+
parameters: {
|
|
38
|
+
UserPoolId: props.userPool.userPoolId,
|
|
39
|
+
ClientId: props.client.userPoolClientId,
|
|
40
|
+
},
|
|
41
|
+
physicalResourceId: cr.PhysicalResourceId.of(`${props.userPool.userPoolId}-${props.client.userPoolClientId}`),
|
|
42
|
+
},
|
|
43
|
+
policy: cr.AwsCustomResourcePolicy.fromStatements([
|
|
44
|
+
new iam.PolicyStatement({
|
|
45
|
+
actions: ["cognito-idp:DescribeUserPoolClient"],
|
|
46
|
+
resources: [props.userPool.userPoolArn],
|
|
47
|
+
}),
|
|
48
|
+
]),
|
|
49
|
+
});
|
|
50
|
+
this.clientSecretValue = clientSecret.getResponseField("UserPoolClient.ClientSecret");
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
exports.RetrieveClientSecret = RetrieveClientSecret;
|
|
54
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpZW50LXNlY3JldC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9jbGllbnQtc2VjcmV0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQ0EseURBQTBDO0FBQzFDLGlFQUFrRDtBQUNsRCwyQ0FBc0M7QUFPdEMsTUFBYSxvQkFBcUIsU0FBUSxzQkFBUztJQUdqRCxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQWdDO1FBQ3hFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUE7UUFFaEIsTUFBTSxZQUFZLEdBQUcsSUFBSSxFQUFFLENBQUMsaUJBQWlCLENBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRTtZQUM5RCxRQUFRLEVBQUU7Z0JBQ1IsT0FBTyxFQUFFLGdDQUFnQztnQkFDekMsTUFBTSxFQUFFLHdCQUF3QjtnQkFDaEMsVUFBVSxFQUFFO29CQUNWLFVBQVUsRUFBRSxLQUFLLENBQUMsUUFBUSxDQUFDLFVBQVU7b0JBQ3JDLFFBQVEsRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLGdCQUFnQjtpQkFDeEM7Z0JBQ0Qsa0JBQWtCLEVBQUUsRUFBRSxDQUFDLGtCQUFrQixDQUFDLEVBQUUsQ0FDMUMsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDLFVBQVUsSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLGdCQUFnQixFQUFFLENBQ2hFO2FBQ0Y7WUFDRCxNQUFNLEVBQUUsRUFBRSxDQUFDLHVCQUF1QixDQUFDLGNBQWMsQ0FBQztnQkFDaEQsSUFBSSxHQUFHLENBQUMsZUFBZSxDQUFDO29CQUN0QixPQUFPLEVBQUUsQ0FBQyxvQ0FBb0MsQ0FBQztvQkFDL0MsU0FBUyxFQUFFLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUM7aUJBQ3hDLENBQUM7YUFDSCxDQUFDO1NBQ0gsQ0FBQyxDQUFBO1FBRUYsSUFBSSxDQUFDLGlCQUFpQixHQUFHLFlBQVksQ0FBQyxnQkFBZ0IsQ0FDcEQsNkJBQTZCLENBQzlCLENBQUE7SUFDSCxDQUFDO0NBQ0Y7QUE5QkQsb0RBOEJDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgY29nbml0byBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWNvZ25pdG9cIlxuaW1wb3J0ICogYXMgaWFtIGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtaWFtXCJcbmltcG9ydCAqIGFzIGNyIGZyb20gXCJhd3MtY2RrLWxpYi9jdXN0b20tcmVzb3VyY2VzXCJcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCJcblxuZXhwb3J0IGludGVyZmFjZSBSZXRyaWV2ZUNsaWVudFNlY3JldFByb3BzIHtcbiAgY2xpZW50OiBjb2duaXRvLklVc2VyUG9vbENsaWVudFxuICB1c2VyUG9vbDogY29nbml0by5JVXNlclBvb2xcbn1cblxuZXhwb3J0IGNsYXNzIFJldHJpZXZlQ2xpZW50U2VjcmV0IGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgcHVibGljIGNsaWVudFNlY3JldFZhbHVlOiBzdHJpbmdcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogUmV0cmlldmVDbGllbnRTZWNyZXRQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZClcblxuICAgIGNvbnN0IGNsaWVudFNlY3JldCA9IG5ldyBjci5Bd3NDdXN0b21SZXNvdXJjZSh0aGlzLCBcIlJlc291cmNlXCIsIHtcbiAgICAgIG9uVXBkYXRlOiB7XG4gICAgICAgIHNlcnZpY2U6IFwiQ29nbml0b0lkZW50aXR5U2VydmljZVByb3ZpZGVyXCIsXG4gICAgICAgIGFjdGlvbjogXCJkZXNjcmliZVVzZXJQb29sQ2xpZW50XCIsXG4gICAgICAgIHBhcmFtZXRlcnM6IHtcbiAgICAgICAgICBVc2VyUG9vbElkOiBwcm9wcy51c2VyUG9vbC51c2VyUG9vbElkLFxuICAgICAgICAgIENsaWVudElkOiBwcm9wcy5jbGllbnQudXNlclBvb2xDbGllbnRJZCxcbiAgICAgICAgfSxcbiAgICAgICAgcGh5c2ljYWxSZXNvdXJjZUlkOiBjci5QaHlzaWNhbFJlc291cmNlSWQub2YoXG4gICAgICAgICAgYCR7cHJvcHMudXNlclBvb2wudXNlclBvb2xJZH0tJHtwcm9wcy5jbGllbnQudXNlclBvb2xDbGllbnRJZH1gLFxuICAgICAgICApLFxuICAgICAgfSxcbiAgICAgIHBvbGljeTogY3IuQXdzQ3VzdG9tUmVzb3VyY2VQb2xpY3kuZnJvbVN0YXRlbWVudHMoW1xuICAgICAgICBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgICAgYWN0aW9uczogW1wiY29nbml0by1pZHA6RGVzY3JpYmVVc2VyUG9vbENsaWVudFwiXSxcbiAgICAgICAgICByZXNvdXJjZXM6IFtwcm9wcy51c2VyUG9vbC51c2VyUG9vbEFybl0sXG4gICAgICAgIH0pLFxuICAgICAgXSksXG4gICAgfSlcblxuICAgIHRoaXMuY2xpZW50U2VjcmV0VmFsdWUgPSBjbGllbnRTZWNyZXQuZ2V0UmVzcG9uc2VGaWVsZChcbiAgICAgIFwiVXNlclBvb2xDbGllbnQuQ2xpZW50U2VjcmV0XCIsXG4gICAgKVxuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import * as cognito from "aws-cdk-lib/aws-cognito";
|
|
2
|
+
import { Construct } from "constructs";
|
|
3
|
+
interface ClientUpdateProps {
|
|
4
|
+
oauthScopes: string[];
|
|
5
|
+
client: cognito.IUserPoolClient;
|
|
6
|
+
userPool: cognito.IUserPool;
|
|
7
|
+
callbackUrl: string;
|
|
8
|
+
signOutUrl: string;
|
|
9
|
+
identityProviders: string[];
|
|
10
|
+
}
|
|
11
|
+
export declare class ClientUpdate extends Construct {
|
|
12
|
+
constructor(scope: Construct, id: string, props: ClientUpdateProps);
|
|
13
|
+
}
|
|
14
|
+
export {};
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
+
exports.ClientUpdate = void 0;
|
|
27
|
+
const iam = __importStar(require("aws-cdk-lib/aws-iam"));
|
|
28
|
+
const cr = __importStar(require("aws-cdk-lib/custom-resources"));
|
|
29
|
+
const constructs_1 = require("constructs");
|
|
30
|
+
class ClientUpdate extends constructs_1.Construct {
|
|
31
|
+
constructor(scope, id, props) {
|
|
32
|
+
super(scope, id);
|
|
33
|
+
new cr.AwsCustomResource(this, "Resource", {
|
|
34
|
+
onUpdate: {
|
|
35
|
+
service: "CognitoIdentityServiceProvider",
|
|
36
|
+
action: "updateUserPoolClient",
|
|
37
|
+
parameters: {
|
|
38
|
+
AllowedOAuthFlows: ["code"],
|
|
39
|
+
AllowedOAuthFlowsUserPoolClient: true,
|
|
40
|
+
SupportedIdentityProviders: props.identityProviders,
|
|
41
|
+
AllowedOAuthScopes: props.oauthScopes,
|
|
42
|
+
ClientId: props.client.userPoolClientId,
|
|
43
|
+
CallbackURLs: [props.callbackUrl],
|
|
44
|
+
LogoutURLs: [props.signOutUrl],
|
|
45
|
+
UserPoolId: props.userPool.userPoolId,
|
|
46
|
+
},
|
|
47
|
+
physicalResourceId: cr.PhysicalResourceId.of(`${props.userPool.userPoolId}-${props.client.userPoolClientId}`),
|
|
48
|
+
},
|
|
49
|
+
policy: cr.AwsCustomResourcePolicy.fromStatements([
|
|
50
|
+
new iam.PolicyStatement({
|
|
51
|
+
actions: ["cognito-idp:UpdateUserPoolClient"],
|
|
52
|
+
resources: [props.userPool.userPoolArn],
|
|
53
|
+
}),
|
|
54
|
+
]),
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
exports.ClientUpdate = ClientUpdate;
|
|
59
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpZW50LXVwZGF0ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9jbGllbnQtdXBkYXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQ0EseURBQTBDO0FBQzFDLGlFQUFrRDtBQUNsRCwyQ0FBc0M7QUFXdEMsTUFBYSxZQUFhLFNBQVEsc0JBQVM7SUFDekMsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUF3QjtRQUNoRSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFBO1FBRWhCLElBQUksRUFBRSxDQUFDLGlCQUFpQixDQUFDLElBQUksRUFBRSxVQUFVLEVBQUU7WUFDekMsUUFBUSxFQUFFO2dCQUNSLE9BQU8sRUFBRSxnQ0FBZ0M7Z0JBQ3pDLE1BQU0sRUFBRSxzQkFBc0I7Z0JBQzlCLFVBQVUsRUFBRTtvQkFDVixpQkFBaUIsRUFBRSxDQUFDLE1BQU0sQ0FBQztvQkFDM0IsK0JBQStCLEVBQUUsSUFBSTtvQkFDckMsMEJBQTBCLEVBQUUsS0FBSyxDQUFDLGlCQUFpQjtvQkFDbkQsa0JBQWtCLEVBQUUsS0FBSyxDQUFDLFdBQVc7b0JBQ3JDLFFBQVEsRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLGdCQUFnQjtvQkFDdkMsWUFBWSxFQUFFLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQztvQkFDakMsVUFBVSxFQUFFLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQztvQkFDOUIsVUFBVSxFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUMsVUFBVTtpQkFDdEM7Z0JBQ0Qsa0JBQWtCLEVBQUUsRUFBRSxDQUFDLGtCQUFrQixDQUFDLEVBQUUsQ0FDMUMsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDLFVBQVUsSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLGdCQUFnQixFQUFFLENBQ2hFO2FBQ0Y7WUFDRCxNQUFNLEVBQUUsRUFBRSxDQUFDLHVCQUF1QixDQUFDLGNBQWMsQ0FBQztnQkFDaEQsSUFBSSxHQUFHLENBQUMsZUFBZSxDQUFDO29CQUN0QixPQUFPLEVBQUUsQ0FBQyxrQ0FBa0MsQ0FBQztvQkFDN0MsU0FBUyxFQUFFLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUM7aUJBQ3hDLENBQUM7YUFDSCxDQUFDO1NBQ0gsQ0FBQyxDQUFBO0lBQ0osQ0FBQztDQUNGO0FBOUJELG9DQThCQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGNvZ25pdG8gZnJvbSBcImF3cy1jZGstbGliL2F3cy1jb2duaXRvXCJcbmltcG9ydCAqIGFzIGlhbSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWlhbVwiXG5pbXBvcnQgKiBhcyBjciBmcm9tIFwiYXdzLWNkay1saWIvY3VzdG9tLXJlc291cmNlc1wiXG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiXG5cbmludGVyZmFjZSBDbGllbnRVcGRhdGVQcm9wcyB7XG4gIG9hdXRoU2NvcGVzOiBzdHJpbmdbXVxuICBjbGllbnQ6IGNvZ25pdG8uSVVzZXJQb29sQ2xpZW50XG4gIHVzZXJQb29sOiBjb2duaXRvLklVc2VyUG9vbFxuICBjYWxsYmFja1VybDogc3RyaW5nXG4gIHNpZ25PdXRVcmw6IHN0cmluZ1xuICBpZGVudGl0eVByb3ZpZGVyczogc3RyaW5nW11cbn1cblxuZXhwb3J0IGNsYXNzIENsaWVudFVwZGF0ZSBleHRlbmRzIENvbnN0cnVjdCB7XG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBDbGllbnRVcGRhdGVQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZClcblxuICAgIG5ldyBjci5Bd3NDdXN0b21SZXNvdXJjZSh0aGlzLCBcIlJlc291cmNlXCIsIHtcbiAgICAgIG9uVXBkYXRlOiB7XG4gICAgICAgIHNlcnZpY2U6IFwiQ29nbml0b0lkZW50aXR5U2VydmljZVByb3ZpZGVyXCIsXG4gICAgICAgIGFjdGlvbjogXCJ1cGRhdGVVc2VyUG9vbENsaWVudFwiLFxuICAgICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgQWxsb3dlZE9BdXRoRmxvd3M6IFtcImNvZGVcIl0sXG4gICAgICAgICAgQWxsb3dlZE9BdXRoRmxvd3NVc2VyUG9vbENsaWVudDogdHJ1ZSxcbiAgICAgICAgICBTdXBwb3J0ZWRJZGVudGl0eVByb3ZpZGVyczogcHJvcHMuaWRlbnRpdHlQcm92aWRlcnMsXG4gICAgICAgICAgQWxsb3dlZE9BdXRoU2NvcGVzOiBwcm9wcy5vYXV0aFNjb3BlcyxcbiAgICAgICAgICBDbGllbnRJZDogcHJvcHMuY2xpZW50LnVzZXJQb29sQ2xpZW50SWQsXG4gICAgICAgICAgQ2FsbGJhY2tVUkxzOiBbcHJvcHMuY2FsbGJhY2tVcmxdLFxuICAgICAgICAgIExvZ291dFVSTHM6IFtwcm9wcy5zaWduT3V0VXJsXSxcbiAgICAgICAgICBVc2VyUG9vbElkOiBwcm9wcy51c2VyUG9vbC51c2VyUG9vbElkLFxuICAgICAgICB9LFxuICAgICAgICBwaHlzaWNhbFJlc291cmNlSWQ6IGNyLlBoeXNpY2FsUmVzb3VyY2VJZC5vZihcbiAgICAgICAgICBgJHtwcm9wcy51c2VyUG9vbC51c2VyUG9vbElkfS0ke3Byb3BzLmNsaWVudC51c2VyUG9vbENsaWVudElkfWAsXG4gICAgICAgICksXG4gICAgICB9LFxuICAgICAgcG9saWN5OiBjci5Bd3NDdXN0b21SZXNvdXJjZVBvbGljeS5mcm9tU3RhdGVtZW50cyhbXG4gICAgICAgIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICBhY3Rpb25zOiBbXCJjb2duaXRvLWlkcDpVcGRhdGVVc2VyUG9vbENsaWVudFwiXSxcbiAgICAgICAgICByZXNvdXJjZXM6IFtwcm9wcy51c2VyUG9vbC51c2VyUG9vbEFybl0sXG4gICAgICAgIH0pLFxuICAgICAgXSksXG4gICAgfSlcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
import * as cloudfront from "aws-cdk-lib/aws-cloudfront";
|
|
2
|
+
import { AddBehaviorOptions, BehaviorOptions, IOrigin } from "aws-cdk-lib/aws-cloudfront";
|
|
3
|
+
import * as cognito from "aws-cdk-lib/aws-cognito";
|
|
4
|
+
import { ClientUpdate } from "./client-update";
|
|
5
|
+
import { AuthLambdas } from "./lambdas";
|
|
6
|
+
import { Construct } from "constructs";
|
|
7
|
+
export interface CloudFrontAuthProps {
|
|
8
|
+
/**
|
|
9
|
+
* Cognito Client that will be used to authenticate the user.
|
|
10
|
+
*
|
|
11
|
+
* If a custom client is provided, the updateClient method cannot
|
|
12
|
+
* be used since we cannot know which parameters was set.
|
|
13
|
+
*
|
|
14
|
+
* @default - a new client will be generated
|
|
15
|
+
*/
|
|
16
|
+
client?: cognito.UserPoolClient;
|
|
17
|
+
userPool: cognito.IUserPool;
|
|
18
|
+
/**
|
|
19
|
+
* The domain that is used for Cognito Auth.
|
|
20
|
+
*
|
|
21
|
+
* If not using custom domains this will be a name under amazoncognito.com.
|
|
22
|
+
*
|
|
23
|
+
* @example `${domain.domainName}.auth.${region}.amazoncognito.com`
|
|
24
|
+
*/
|
|
25
|
+
cognitoAuthDomain: string;
|
|
26
|
+
authLambdas: AuthLambdas;
|
|
27
|
+
/**
|
|
28
|
+
* @default /auth/callback
|
|
29
|
+
*/
|
|
30
|
+
callbackPath?: string;
|
|
31
|
+
/**
|
|
32
|
+
* @default /
|
|
33
|
+
*/
|
|
34
|
+
signOutRedirectTo?: string;
|
|
35
|
+
/**
|
|
36
|
+
* @default /auth/sign-out
|
|
37
|
+
*/
|
|
38
|
+
signOutPath?: string;
|
|
39
|
+
/**
|
|
40
|
+
* @default /auth/refresh
|
|
41
|
+
*/
|
|
42
|
+
refreshAuthPath?: string;
|
|
43
|
+
/**
|
|
44
|
+
* Log level.
|
|
45
|
+
*
|
|
46
|
+
* A log level of debug will log secrets and should only be used in
|
|
47
|
+
* a development environment.
|
|
48
|
+
*
|
|
49
|
+
* @default warn
|
|
50
|
+
*/
|
|
51
|
+
logLevel?: "none" | "error" | "warn" | "info" | "debug";
|
|
52
|
+
/**
|
|
53
|
+
* Require the user to be part of a specific Cognito group to
|
|
54
|
+
* access any resource.
|
|
55
|
+
*/
|
|
56
|
+
requireGroupAnyOf?: string[];
|
|
57
|
+
}
|
|
58
|
+
export interface UpdateClientProps {
|
|
59
|
+
signOutUrl: string;
|
|
60
|
+
callbackUrl: string;
|
|
61
|
+
/**
|
|
62
|
+
* List of identity providers used for the client.
|
|
63
|
+
*
|
|
64
|
+
* @default - COGNITO and identity providers registered in the UserPool construct
|
|
65
|
+
*/
|
|
66
|
+
identityProviders?: string[];
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Configure previously deployed lambda functions, Cognito client
|
|
70
|
+
* and CloudFront distribution.
|
|
71
|
+
*/
|
|
72
|
+
export declare class CloudFrontAuth extends Construct {
|
|
73
|
+
readonly callbackPath: string;
|
|
74
|
+
readonly signOutRedirectTo: string;
|
|
75
|
+
readonly signOutPath: string;
|
|
76
|
+
readonly refreshAuthPath: string;
|
|
77
|
+
private readonly userPool;
|
|
78
|
+
private readonly clientCreated;
|
|
79
|
+
readonly client: cognito.UserPoolClient;
|
|
80
|
+
private readonly checkAuthFn;
|
|
81
|
+
private readonly httpHeadersFn;
|
|
82
|
+
private readonly parseAuthFn;
|
|
83
|
+
private readonly refreshAuthFn;
|
|
84
|
+
private readonly signOutFn;
|
|
85
|
+
private readonly oauthScopes;
|
|
86
|
+
constructor(scope: Construct, id: string, props: CloudFrontAuthProps);
|
|
87
|
+
private createPathLambda;
|
|
88
|
+
/**
|
|
89
|
+
* Create behaviors for authentication pages:
|
|
90
|
+
*
|
|
91
|
+
* - callback page
|
|
92
|
+
* - refresh page
|
|
93
|
+
* - sign out page
|
|
94
|
+
*
|
|
95
|
+
* This is to be used with CloudFrontWebDistribution. See
|
|
96
|
+
* createAuthPagesBehaviors if using Distribution.
|
|
97
|
+
*/
|
|
98
|
+
get authPages(): cloudfront.Behavior[];
|
|
99
|
+
/**
|
|
100
|
+
* Create behaviors for authentication pages.
|
|
101
|
+
*
|
|
102
|
+
* - callback page
|
|
103
|
+
* - refresh page
|
|
104
|
+
* - sign out page
|
|
105
|
+
*
|
|
106
|
+
* This is to be used with Distribution.
|
|
107
|
+
*/
|
|
108
|
+
createAuthPagesBehaviors(origin: IOrigin, options?: AddBehaviorOptions): Record<string, BehaviorOptions>;
|
|
109
|
+
/**
|
|
110
|
+
* Create lambda function association for viewer request to check
|
|
111
|
+
* authentication and original response to add headers.
|
|
112
|
+
*
|
|
113
|
+
* This is to be used with CloudFrontWebDistribution. See
|
|
114
|
+
* createProtectedBehavior if using Distribution.
|
|
115
|
+
*/
|
|
116
|
+
get authFilters(): cloudfront.LambdaFunctionAssociation[];
|
|
117
|
+
/**
|
|
118
|
+
* Create behavior that includes authorization check.
|
|
119
|
+
*
|
|
120
|
+
* This is to be used with Distribution.
|
|
121
|
+
*/
|
|
122
|
+
createProtectedBehavior(origin: IOrigin, options?: AddBehaviorOptions): BehaviorOptions;
|
|
123
|
+
/**
|
|
124
|
+
* Update Cognito client to use the proper URLs and OAuth scopes.
|
|
125
|
+
*
|
|
126
|
+
* TODO: In case the client configuration changes and is updated
|
|
127
|
+
* by CloudFormation, this will not be reapplied causing the client
|
|
128
|
+
* to not be correctly configured.
|
|
129
|
+
* How can we avoid this scenario?
|
|
130
|
+
*/
|
|
131
|
+
updateClient(id: string, props: UpdateClientProps): ClientUpdate;
|
|
132
|
+
}
|
|
@@ -0,0 +1,267 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
+
exports.CloudFrontAuth = void 0;
|
|
27
|
+
const cloudfront = __importStar(require("aws-cdk-lib/aws-cloudfront"));
|
|
28
|
+
const aws_cloudfront_1 = require("aws-cdk-lib/aws-cloudfront");
|
|
29
|
+
const cdk_lambda_config_1 = require("@liflig/cdk-lambda-config");
|
|
30
|
+
const client_secret_1 = require("./client-secret");
|
|
31
|
+
const client_update_1 = require("./client-update");
|
|
32
|
+
const generate_secret_1 = require("./generate-secret");
|
|
33
|
+
const constructs_1 = require("constructs");
|
|
34
|
+
/**
|
|
35
|
+
* Configure previously deployed lambda functions, Cognito client
|
|
36
|
+
* and CloudFront distribution.
|
|
37
|
+
*/
|
|
38
|
+
class CloudFrontAuth extends constructs_1.Construct {
|
|
39
|
+
constructor(scope, id, props) {
|
|
40
|
+
var _a, _b, _c, _d, _e, _f;
|
|
41
|
+
super(scope, id);
|
|
42
|
+
this.callbackPath = (_a = props.callbackPath) !== null && _a !== void 0 ? _a : "/auth/callback";
|
|
43
|
+
this.signOutRedirectTo = (_b = props.signOutRedirectTo) !== null && _b !== void 0 ? _b : "/";
|
|
44
|
+
this.signOutPath = (_c = props.signOutPath) !== null && _c !== void 0 ? _c : "/auth/sign-out";
|
|
45
|
+
this.refreshAuthPath = (_d = props.refreshAuthPath) !== null && _d !== void 0 ? _d : "/auth/refresh";
|
|
46
|
+
this.oauthScopes = [
|
|
47
|
+
"phone",
|
|
48
|
+
"email",
|
|
49
|
+
"profile",
|
|
50
|
+
"openid",
|
|
51
|
+
"aws.cognito.signin.user.admin",
|
|
52
|
+
];
|
|
53
|
+
this.userPool = props.userPool;
|
|
54
|
+
this.clientCreated = !props.client;
|
|
55
|
+
this.client =
|
|
56
|
+
(_e = props.client) !== null && _e !== void 0 ? _e : props.userPool.addClient("UserPoolClient", {
|
|
57
|
+
// Note: The following must be kept in sync with the API
|
|
58
|
+
// call performed in ClientUpdate.
|
|
59
|
+
authFlows: {
|
|
60
|
+
userPassword: true,
|
|
61
|
+
userSrp: true,
|
|
62
|
+
},
|
|
63
|
+
oAuth: {
|
|
64
|
+
flows: {
|
|
65
|
+
authorizationCodeGrant: true,
|
|
66
|
+
},
|
|
67
|
+
},
|
|
68
|
+
preventUserExistenceErrors: true,
|
|
69
|
+
generateSecret: true,
|
|
70
|
+
});
|
|
71
|
+
const nonceSigningSecret = new generate_secret_1.GenerateSecret(this, "NonceSigningSecret")
|
|
72
|
+
.value;
|
|
73
|
+
const { clientSecretValue } = new client_secret_1.RetrieveClientSecret(this, "ClientSecret", {
|
|
74
|
+
client: this.client,
|
|
75
|
+
userPool: this.userPool,
|
|
76
|
+
});
|
|
77
|
+
const config = {
|
|
78
|
+
httpHeaders: {
|
|
79
|
+
"Content-Security-Policy": "default-src 'none'; img-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline'; object-src 'none'; connect-src 'self'",
|
|
80
|
+
"Strict-Transport-Security": "max-age=31536000; includeSubdomains; preload",
|
|
81
|
+
"Referrer-Policy": "same-origin",
|
|
82
|
+
"X-XSS-Protection": "1; mode=block",
|
|
83
|
+
"X-Frame-Options": "DENY",
|
|
84
|
+
"X-Content-Type-Options": "nosniff",
|
|
85
|
+
"Cache-Control": "no-cache",
|
|
86
|
+
},
|
|
87
|
+
logLevel: (_f = props.logLevel) !== null && _f !== void 0 ? _f : "warn",
|
|
88
|
+
userPoolId: this.userPool.userPoolId,
|
|
89
|
+
clientId: this.client.userPoolClientId,
|
|
90
|
+
clientSecret: clientSecretValue,
|
|
91
|
+
oauthScopes: this.oauthScopes,
|
|
92
|
+
cognitoAuthDomain: props.cognitoAuthDomain,
|
|
93
|
+
callbackPath: this.callbackPath,
|
|
94
|
+
signOutRedirectTo: this.signOutRedirectTo,
|
|
95
|
+
signOutPath: this.signOutPath,
|
|
96
|
+
refreshAuthPath: this.refreshAuthPath,
|
|
97
|
+
requireGroupAnyOf: props.requireGroupAnyOf,
|
|
98
|
+
cookieSettings: {
|
|
99
|
+
/*
|
|
100
|
+
spaMode - consider if this should be supported
|
|
101
|
+
idToken: "Path=/; Secure; SameSite=Lax",
|
|
102
|
+
accessToken: "Path=/; Secure; SameSite=Lax",
|
|
103
|
+
refreshToken: "Path=/; Secure; SameSite=Lax",
|
|
104
|
+
nonce: "Path=/; Secure; HttpOnly; SameSite=Lax",
|
|
105
|
+
*/
|
|
106
|
+
idToken: "Path=/; Secure; HttpOnly; SameSite=Lax",
|
|
107
|
+
accessToken: "Path=/; Secure; HttpOnly; SameSite=Lax",
|
|
108
|
+
refreshToken: "Path=/; Secure; HttpOnly; SameSite=Lax",
|
|
109
|
+
nonce: "Path=/; Secure; HttpOnly; SameSite=Lax",
|
|
110
|
+
},
|
|
111
|
+
nonceSigningSecret,
|
|
112
|
+
};
|
|
113
|
+
this.checkAuthFn = new cdk_lambda_config_1.LambdaConfig(this, "CheckAuthFn", {
|
|
114
|
+
function: props.authLambdas.checkAuthFn.get(this, "CheckAuthFnImport"),
|
|
115
|
+
config,
|
|
116
|
+
}).version;
|
|
117
|
+
this.httpHeadersFn = new cdk_lambda_config_1.LambdaConfig(this, "HttpHeadersFn", {
|
|
118
|
+
function: props.authLambdas.httpHeadersFn.get(this, "HttpHeadersFnImport"),
|
|
119
|
+
config,
|
|
120
|
+
}).version;
|
|
121
|
+
this.parseAuthFn = new cdk_lambda_config_1.LambdaConfig(this, "ParseAuthFn", {
|
|
122
|
+
function: props.authLambdas.parseAuthFn.get(this, "ParseAuthFnImport"),
|
|
123
|
+
config,
|
|
124
|
+
}).version;
|
|
125
|
+
this.refreshAuthFn = new cdk_lambda_config_1.LambdaConfig(this, "RefreshAuthFn", {
|
|
126
|
+
function: props.authLambdas.refreshAuthFn.get(this, "RefreshAuthFnImport"),
|
|
127
|
+
config,
|
|
128
|
+
}).version;
|
|
129
|
+
this.signOutFn = new cdk_lambda_config_1.LambdaConfig(this, "SignOutFn", {
|
|
130
|
+
function: props.authLambdas.signOutFn.get(this, "SignOutFnImport"),
|
|
131
|
+
config,
|
|
132
|
+
}).version;
|
|
133
|
+
}
|
|
134
|
+
createPathLambda(path, fn) {
|
|
135
|
+
return {
|
|
136
|
+
pathPattern: path,
|
|
137
|
+
forwardedValues: {
|
|
138
|
+
queryString: true,
|
|
139
|
+
},
|
|
140
|
+
lambdaFunctionAssociations: [
|
|
141
|
+
{
|
|
142
|
+
eventType: cloudfront.LambdaEdgeEventType.VIEWER_REQUEST,
|
|
143
|
+
lambdaFunction: fn,
|
|
144
|
+
},
|
|
145
|
+
],
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Create behaviors for authentication pages:
|
|
150
|
+
*
|
|
151
|
+
* - callback page
|
|
152
|
+
* - refresh page
|
|
153
|
+
* - sign out page
|
|
154
|
+
*
|
|
155
|
+
* This is to be used with CloudFrontWebDistribution. See
|
|
156
|
+
* createAuthPagesBehaviors if using Distribution.
|
|
157
|
+
*/
|
|
158
|
+
get authPages() {
|
|
159
|
+
return [
|
|
160
|
+
this.createPathLambda(this.callbackPath, this.parseAuthFn),
|
|
161
|
+
this.createPathLambda(this.refreshAuthPath, this.refreshAuthFn),
|
|
162
|
+
this.createPathLambda(this.signOutPath, this.signOutFn),
|
|
163
|
+
];
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Create behaviors for authentication pages.
|
|
167
|
+
*
|
|
168
|
+
* - callback page
|
|
169
|
+
* - refresh page
|
|
170
|
+
* - sign out page
|
|
171
|
+
*
|
|
172
|
+
* This is to be used with Distribution.
|
|
173
|
+
*/
|
|
174
|
+
createAuthPagesBehaviors(origin, options) {
|
|
175
|
+
function path(path, fn) {
|
|
176
|
+
return {
|
|
177
|
+
[path]: {
|
|
178
|
+
origin,
|
|
179
|
+
compress: true,
|
|
180
|
+
viewerProtocolPolicy: aws_cloudfront_1.ViewerProtocolPolicy.REDIRECT_TO_HTTPS,
|
|
181
|
+
edgeLambdas: [
|
|
182
|
+
{
|
|
183
|
+
eventType: cloudfront.LambdaEdgeEventType.VIEWER_REQUEST,
|
|
184
|
+
functionVersion: fn,
|
|
185
|
+
},
|
|
186
|
+
],
|
|
187
|
+
...options,
|
|
188
|
+
},
|
|
189
|
+
};
|
|
190
|
+
}
|
|
191
|
+
return {
|
|
192
|
+
...path(this.callbackPath, this.parseAuthFn),
|
|
193
|
+
...path(this.refreshAuthPath, this.refreshAuthFn),
|
|
194
|
+
...path(this.signOutPath, this.signOutFn),
|
|
195
|
+
};
|
|
196
|
+
}
|
|
197
|
+
/**
|
|
198
|
+
* Create lambda function association for viewer request to check
|
|
199
|
+
* authentication and original response to add headers.
|
|
200
|
+
*
|
|
201
|
+
* This is to be used with CloudFrontWebDistribution. See
|
|
202
|
+
* createProtectedBehavior if using Distribution.
|
|
203
|
+
*/
|
|
204
|
+
get authFilters() {
|
|
205
|
+
return [
|
|
206
|
+
{
|
|
207
|
+
eventType: cloudfront.LambdaEdgeEventType.VIEWER_REQUEST,
|
|
208
|
+
lambdaFunction: this.checkAuthFn,
|
|
209
|
+
},
|
|
210
|
+
{
|
|
211
|
+
eventType: cloudfront.LambdaEdgeEventType.ORIGIN_RESPONSE,
|
|
212
|
+
lambdaFunction: this.httpHeadersFn,
|
|
213
|
+
},
|
|
214
|
+
];
|
|
215
|
+
}
|
|
216
|
+
/**
|
|
217
|
+
* Create behavior that includes authorization check.
|
|
218
|
+
*
|
|
219
|
+
* This is to be used with Distribution.
|
|
220
|
+
*/
|
|
221
|
+
createProtectedBehavior(origin, options) {
|
|
222
|
+
if ((options === null || options === void 0 ? void 0 : options.edgeLambdas) != null) {
|
|
223
|
+
throw Error("User-defined edgeLambdas is currently not supported");
|
|
224
|
+
}
|
|
225
|
+
return {
|
|
226
|
+
origin,
|
|
227
|
+
compress: true,
|
|
228
|
+
viewerProtocolPolicy: aws_cloudfront_1.ViewerProtocolPolicy.REDIRECT_TO_HTTPS,
|
|
229
|
+
edgeLambdas: [
|
|
230
|
+
{
|
|
231
|
+
eventType: cloudfront.LambdaEdgeEventType.VIEWER_REQUEST,
|
|
232
|
+
functionVersion: this.checkAuthFn,
|
|
233
|
+
},
|
|
234
|
+
{
|
|
235
|
+
eventType: cloudfront.LambdaEdgeEventType.ORIGIN_RESPONSE,
|
|
236
|
+
functionVersion: this.httpHeadersFn,
|
|
237
|
+
},
|
|
238
|
+
],
|
|
239
|
+
...options,
|
|
240
|
+
};
|
|
241
|
+
}
|
|
242
|
+
/**
|
|
243
|
+
* Update Cognito client to use the proper URLs and OAuth scopes.
|
|
244
|
+
*
|
|
245
|
+
* TODO: In case the client configuration changes and is updated
|
|
246
|
+
* by CloudFormation, this will not be reapplied causing the client
|
|
247
|
+
* to not be correctly configured.
|
|
248
|
+
* How can we avoid this scenario?
|
|
249
|
+
*/
|
|
250
|
+
updateClient(id, props) {
|
|
251
|
+
var _a;
|
|
252
|
+
if (!this.clientCreated) {
|
|
253
|
+
throw new Error("You cannot use updateClient with a user-provided Cognito Client " +
|
|
254
|
+
"since it would override the user-provided settings");
|
|
255
|
+
}
|
|
256
|
+
return new client_update_1.ClientUpdate(this, id, {
|
|
257
|
+
client: this.client,
|
|
258
|
+
userPool: this.userPool,
|
|
259
|
+
signOutUrl: props.signOutUrl,
|
|
260
|
+
callbackUrl: props.callbackUrl,
|
|
261
|
+
oauthScopes: this.oauthScopes,
|
|
262
|
+
identityProviders: (_a = props.identityProviders) !== null && _a !== void 0 ? _a : ["COGNITO"].concat(this.userPool.identityProviders.map((it) => it.providerName)),
|
|
263
|
+
});
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
exports.CloudFrontAuth = CloudFrontAuth;
|
|
267
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xvdWRmcm9udC1hdXRoLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2Nsb3VkZnJvbnQtYXV0aC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLHVFQUF3RDtBQUN4RCwrREFLbUM7QUFJbkMsaUVBQXdEO0FBQ3hELG1EQUFzRDtBQUN0RCxtREFBOEM7QUFDOUMsdURBQWtEO0FBR2xELDJDQUFzQztBQWlFdEM7OztHQUdHO0FBQ0gsTUFBYSxjQUFlLFNBQVEsc0JBQVM7SUFrQjNDLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBMEI7O1FBQ2xFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUE7UUFFaEIsSUFBSSxDQUFDLFlBQVksR0FBRyxNQUFBLEtBQUssQ0FBQyxZQUFZLG1DQUFJLGdCQUFnQixDQUFBO1FBQzFELElBQUksQ0FBQyxpQkFBaUIsR0FBRyxNQUFBLEtBQUssQ0FBQyxpQkFBaUIsbUNBQUksR0FBRyxDQUFBO1FBQ3ZELElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBQSxLQUFLLENBQUMsV0FBVyxtQ0FBSSxnQkFBZ0IsQ0FBQTtRQUN4RCxJQUFJLENBQUMsZUFBZSxHQUFHLE1BQUEsS0FBSyxDQUFDLGVBQWUsbUNBQUksZUFBZSxDQUFBO1FBRS9ELElBQUksQ0FBQyxXQUFXLEdBQUc7WUFDakIsT0FBTztZQUNQLE9BQU87WUFDUCxTQUFTO1lBQ1QsUUFBUTtZQUNSLCtCQUErQjtTQUNoQyxDQUFBO1FBRUQsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFBO1FBRTlCLElBQUksQ0FBQyxhQUFhLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFBO1FBQ2xDLElBQUksQ0FBQyxNQUFNO1lBQ1QsTUFBQSxLQUFLLENBQUMsTUFBTSxtQ0FDWixLQUFLLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsRUFBRTtnQkFDekMs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QVcsRUFBRTtnQkFDWDtvQkFDRSxTQUFTLEVBQUUsVUFBVSxDQUFDLG1CQUFtQixDQUFDLGNBQWM7b0JBQ3hELGVBQWUsRUFBRSxJQUFJLENBQUMsV0FBVztpQkFDbEM7Z0JBQ0Q7b0JBQ0UsU0FBUyxFQUFFLFVBQVUsQ0FBQyxtQkFBbUIsQ0FBQyxlQUFlO29CQUN6RCxlQUFlLEVBQUUsSUFBSSxDQUFDLGFBQWE7aUJBQ3BDO2FBQ0Y7WUFDRCxHQUFHLE9BQU87U0FDWCxDQUFBO0lBQ0gsQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSSxZQUFZLENBQUMsRUFBVSxFQUFFLEtBQXdCOztRQUN0RCxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRTtZQUN2QixNQUFNLElBQUksS0FBSyxDQUNiLGtFQUFrRTtnQkFDaEUsb0RBQW9ELENBQ3ZELENBQUE7U0FDRjtRQUVELE9BQU8sSUFBSSw0QkFBWSxDQUFDLElBQUksRUFBRSxFQUFFLEVBQUU7WUFDaEMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNO1lBQ25CLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTtZQUN2QixVQUFVLEVBQUUsS0FBSyxDQUFDLFVBQVU7WUFDNUIsV0FBVyxFQUFFLEtBQUssQ0FBQyxXQUFXO1lBQzlCLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVztZQUM3QixpQkFBaUIsRUFDZixNQUFBLEtBQUssQ0FBQyxpQkFBaUIsbUNBQ3ZCLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxDQUNoQixJQUFJLENBQUMsUUFBUSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxDQUM3RDtTQUNKLENBQUMsQ0FBQTtJQUNKLENBQUM7Q0FDRjtBQW5TRCx3Q0FtU0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBjbG91ZGZyb250IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtY2xvdWRmcm9udFwiXG5pbXBvcnQge1xuICBBZGRCZWhhdmlvck9wdGlvbnMsXG4gIEJlaGF2aW9yT3B0aW9ucyxcbiAgSU9yaWdpbixcbiAgVmlld2VyUHJvdG9jb2xQb2xpY3ksXG59IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtY2xvdWRmcm9udFwiXG5pbXBvcnQgKiBhcyBjb2duaXRvIGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtY29nbml0b1wiXG5pbXBvcnQgKiBhcyBsYW1iZGEgZnJvbSBcImF3cy1jZGstbGliL2F3cy1sYW1iZGFcIlxuaW1wb3J0IHsgSVZlcnNpb24gfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWxhbWJkYVwiXG5pbXBvcnQgeyBMYW1iZGFDb25maWcgfSBmcm9tIFwiQGxpZmxpZy9jZGstbGFtYmRhLWNvbmZpZ1wiXG5pbXBvcnQgeyBSZXRyaWV2ZUNsaWVudFNlY3JldCB9IGZyb20gXCIuL2NsaWVudC1zZWNyZXRcIlxuaW1wb3J0IHsgQ2xpZW50VXBkYXRlIH0gZnJvbSBcIi4vY2xpZW50LXVwZGF0ZVwiXG5pbXBvcnQgeyBHZW5lcmF0ZVNlY3JldCB9IGZyb20gXCIuL2dlbmVyYXRlLXNlY3JldFwiXG5pbXBvcnQgeyBTdG9yZWRDb25maWcgfSBmcm9tIFwiLi9oYW5kbGVycy91dGlsL2NvbmZpZ1wiXG5pbXBvcnQgeyBBdXRoTGFtYmRhcyB9IGZyb20gXCIuL2xhbWJkYXNcIlxuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIlxuXG5leHBvcnQgaW50ZXJmYWNlIENsb3VkRnJvbnRBdXRoUHJvcHMge1xuICAvKipcbiAgICogQ29nbml0byBDbGllbnQgdGhhdCB3aWxsIGJlIHVzZWQgdG8gYXV0aGVudGljYXRlIHRoZSB1c2VyLlxuICAgKlxuICAgKiBJZiBhIGN1c3RvbSBjbGllbnQgaXMgcHJvdmlkZWQsIHRoZSB1cGRhdGVDbGllbnQgbWV0aG9kIGNhbm5vdFxuICAgKiBiZSB1c2VkIHNpbmNlIHdlIGNhbm5vdCBrbm93IHdoaWNoIHBhcmFtZXRlcnMgd2FzIHNldC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBhIG5ldyBjbGllbnQgd2lsbCBiZSBnZW5lcmF0ZWRcbiAgICovXG4gIGNsaWVudD86IGNvZ25pdG8uVXNlclBvb2xDbGllbnRcbiAgdXNlclBvb2w6IGNvZ25pdG8uSVVzZXJQb29sXG4gIC8qKlxuICAgKiBUaGUgZG9tYWluIHRoYXQgaXMgdXNlZCBmb3IgQ29nbml0byBBdXRoLlxuICAgKlxuICAgKiBJZiBub3QgdXNpbmcgY3VzdG9tIGRvbWFpbnMgdGhpcyB3aWxsIGJlIGEgbmFtZSB1bmRlciBhbWF6b25jb2duaXRvLmNvbS5cbiAgICpcbiAgICogQGV4YW1wbGUgYCR7ZG9tYWluLmRvbWFpbk5hbWV9LmF1dGguJHtyZWdpb259LmFtYXpvbmNvZ25pdG8uY29tYFxuICAgKi9cbiAgY29nbml0b0F1dGhEb21haW46IHN0cmluZ1xuICBhdXRoTGFtYmRhczogQXV0aExhbWJkYXNcbiAgLyoqXG4gICAqIEBkZWZhdWx0IC9hdXRoL2NhbGxiYWNrXG4gICAqL1xuICBjYWxsYmFja1BhdGg/OiBzdHJpbmdcbiAgLyoqXG4gICAqIEBkZWZhdWx0IC9cbiAgICovXG4gIHNpZ25PdXRSZWRpcmVjdFRvPzogc3RyaW5nXG4gIC8qKlxuICAgKiBAZGVmYXVsdCAvYXV0aC9zaWduLW91dFxuICAgKi9cbiAgc2lnbk91dFBhdGg/OiBzdHJpbmdcbiAgLyoqXG4gICAqIEBkZWZhdWx0IC9hdXRoL3JlZnJlc2hcbiAgICovXG4gIHJlZnJlc2hBdXRoUGF0aD86IHN0cmluZ1xuICAvKipcbiAgICogTG9nIGxldmVsLlxuICAgKlxuICAgKiBBIGxvZyBsZXZlbCBvZiBkZWJ1ZyB3aWxsIGxvZyBzZWNyZXRzIGFuZCBzaG91bGQgb25seSBiZSB1c2VkIGluXG4gICAqIGEgZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnQuXG4gICAqXG4gICAqIEBkZWZhdWx0IHdhcm5cbiAgICovXG4gIGxvZ0xldmVsPzogXCJub25lXCIgfCBcImVycm9yXCIgfCBcIndhcm5cIiB8IFwiaW5mb1wiIHwgXCJkZWJ1Z1wiXG4gIC8qKlxuICAgKiBSZXF1aXJlIHRoZSB1c2VyIHRvIGJlIHBhcnQgb2YgYSBzcGVjaWZpYyBDb2duaXRvIGdyb3VwIHRvXG4gICAqIGFjY2VzcyBhbnkgcmVzb3VyY2UuXG4gICAqL1xuICByZXF1aXJlR3JvdXBBbnlPZj86IHN0cmluZ1tdXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVXBkYXRlQ2xpZW50UHJvcHMge1xuICBzaWduT3V0VXJsOiBzdHJpbmdcbiAgY2FsbGJhY2tVcmw6IHN0cmluZ1xuICAvKipcbiAgICogTGlzdCBvZiBpZGVudGl0eSBwcm92aWRlcnMgdXNlZCBmb3IgdGhlIGNsaWVudC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBDT0dOSVRPIGFuZCBpZGVudGl0eSBwcm92aWRlcnMgcmVnaXN0ZXJlZCBpbiB0aGUgVXNlclBvb2wgY29uc3RydWN0XG4gICAqL1xuICBpZGVudGl0eVByb3ZpZGVycz86IHN0cmluZ1tdXG59XG5cbi8qKlxuICogQ29uZmlndXJlIHByZXZpb3VzbHkgZGVwbG95ZWQgbGFtYmRhIGZ1bmN0aW9ucywgQ29nbml0byBjbGllbnRcbiAqIGFuZCBDbG91ZEZyb250IGRpc3RyaWJ1dGlvbi5cbiAqL1xuZXhwb3J0IGNsYXNzIENsb3VkRnJvbnRBdXRoIGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgcHVibGljIHJlYWRvbmx5IGNhbGxiYWNrUGF0aDogc3RyaW5nXG4gIHB1YmxpYyByZWFkb25seSBzaWduT3V0UmVkaXJlY3RUbzogc3RyaW5nXG4gIHB1YmxpYyByZWFkb25seSBzaWduT3V0UGF0aDogc3RyaW5nXG4gIHB1YmxpYyByZWFkb25seSByZWZyZXNoQXV0aFBhdGg6IHN0cmluZ1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgdXNlclBvb2w6IGNvZ25pdG8uSVVzZXJQb29sXG4gIHByaXZhdGUgcmVhZG9ubHkgY2xpZW50Q3JlYXRlZDogYm9vbGVhblxuICBwdWJsaWMgcmVhZG9ubHkgY2xpZW50OiBjb2duaXRvLlVzZXJQb29sQ2xpZW50XG5cbiAgcHJpdmF0ZSByZWFkb25seSBjaGVja0F1dGhGbjogbGFtYmRhLklWZXJzaW9uXG4gIHByaXZhdGUgcmVhZG9ubHkgaHR0cEhlYWRlcnNGbjogbGFtYmRhLklWZXJzaW9uXG4gIHByaXZhdGUgcmVhZG9ubHkgcGFyc2VBdXRoRm46IGxhbWJkYS5JVmVyc2lvblxuICBwcml2YXRlIHJlYWRvbmx5IHJlZnJlc2hBdXRoRm46IGxhbWJkYS5JVmVyc2lvblxuICBwcml2YXRlIHJlYWRvbmx5IHNpZ25PdXRGbjogbGFtYmRhLklWZXJzaW9uXG5cbiAgcHJpdmF0ZSByZWFkb25seSBvYXV0aFNjb3Blczogc3RyaW5nW11cblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogQ2xvdWRGcm9udEF1dGhQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZClcblxuICAgIHRoaXMuY2FsbGJhY2tQYXRoID0gcHJvcHMuY2FsbGJhY2tQYXRoID8/IFwiL2F1dGgvY2FsbGJhY2tcIlxuICAgIHRoaXMuc2lnbk91dFJlZGlyZWN0VG8gPSBwcm9wcy5zaWduT3V0UmVkaXJlY3RUbyA/PyBcIi9cIlxuICAgIHRoaXMuc2lnbk91dFBhdGggPSBwcm9wcy5zaWduT3V0UGF0aCA/PyBcIi9hdXRoL3NpZ24tb3V0XCJcbiAgICB0aGlzLnJlZnJlc2hBdXRoUGF0aCA9IHByb3BzLnJlZnJlc2hBdXRoUGF0aCA/PyBcIi9hdXRoL3JlZnJlc2hcIlxuXG4gICAgdGhpcy5vYXV0aFNjb3BlcyA9IFtcbiAgICAgIFwicGhvbmVcIixcbiAgICAgIFwiZW1haWxcIixcbiAgICAgIFwicHJvZmlsZVwiLFxuICAgICAgXCJvcGVuaWRcIixcbiAgICAgIFwiYXdzLmNvZ25pdG8uc2lnbmluLnVzZXIuYWRtaW5cIixcbiAgICBdXG5cbiAgICB0aGlzLnVzZXJQb29sID0gcHJvcHMudXNlclBvb2xcblxuICAgIHRoaXMuY2xpZW50Q3JlYXRlZCA9ICFwcm9wcy5jbGllbnRcbiAgICB0aGlzLmNsaWVudCA9XG4gICAgICBwcm9wcy5jbGllbnQgPz9cbiAgICAgIHByb3BzLnVzZXJQb29sLmFkZENsaWVudChcIlVzZXJQb29sQ2xpZW50XCIsIHtcbiAgICAgICAgLy8gTm90ZTogVGhlIGZvbGxvd2luZyBtdXN0IGJlIGtlcHQgaW4gc3luYyB3aXRoIHRoZSBBUElcbiAgICAgICAgLy8gY2FsbCBwZXJmb3JtZWQgaW4gQ2xpZW50VXBkYXRlLlxuICAgICAgICBhdXRoRmxvd3M6IHtcbiAgICAgICAgICB1c2VyUGFzc3dvcmQ6IHRydWUsXG4gICAgICAgICAgdXNlclNycDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAgb0F1dGg6IHtcbiAgICAgICAgICBmbG93czoge1xuICAgICAgICAgICAgYXV0aG9yaXphdGlvbkNvZGVHcmFudDogdHJ1ZSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBwcmV2ZW50VXNlckV4aXN0ZW5jZUVycm9yczogdHJ1ZSxcbiAgICAgICAgZ2VuZXJhdGVTZWNyZXQ6IHRydWUsXG4gICAgICB9KVxuXG4gICAgY29uc3Qgbm9uY2VTaWduaW5nU2VjcmV0ID0gbmV3IEdlbmVyYXRlU2VjcmV0KHRoaXMsIFwiTm9uY2VTaWduaW5nU2VjcmV0XCIpXG4gICAgICAudmFsdWVcblxuICAgIGNvbnN0IHsgY2xpZW50U2VjcmV0VmFsdWUgfSA9IG5ldyBSZXRyaWV2ZUNsaWVudFNlY3JldChcbiAgICAgIHRoaXMsXG4gICAgICBcIkNsaWVudFNlY3JldFwiLFxuICAgICAge1xuICAgICAgICBjbGllbnQ6IHRoaXMuY2xpZW50LFxuICAgICAgICB1c2VyUG9vbDogdGhpcy51c2VyUG9vbCxcbiAgICAgIH0sXG4gICAgKVxuXG4gICAgY29uc3QgY29uZmlnOiBTdG9yZWRDb25maWcgPSB7XG4gICAgICBodHRwSGVhZGVyczoge1xuICAgICAgICBcIkNvbnRlbnQtU2VjdXJpdHktUG9saWN5XCI6XG4gICAgICAgICAgXCJkZWZhdWx0LXNyYyAnbm9uZSc7IGltZy1zcmMgJ3NlbGYnOyBzY3JpcHQtc3JjICdzZWxmJzsgc3R5bGUtc3JjICdzZWxmJyAndW5zYWZlLWlubGluZSc7IG9iamVjdC1zcmMgJ25vbmUnOyBjb25uZWN0LXNyYyAnc2VsZidcIixcbiAgICAgICAgXCJTdHJpY3QtVHJhbnNwb3J0LVNlY3VyaXR5XCI6XG4gICAgICAgICAgXCJtYXgtYWdlPTMxNTM2MDAwOyBpbmNsdWRlU3ViZG9tYWluczsgcHJlbG9hZFwiLFxuICAgICAgICBcIlJlZmVycmVyLVBvbGljeVwiOiBcInNhbWUtb3JpZ2luXCIsXG4gICAgICAgIFwiWC1YU1MtUHJvdGVjdGlvblwiOiBcIjE7IG1vZGU9YmxvY2tcIixcbiAgICAgICAgXCJYLUZyYW1lLU9wdGlvbnNcIjogXCJERU5ZXCIsXG4gICAgICAgIFwiWC1Db250ZW50LVR5cGUtT3B0aW9uc1wiOiBcIm5vc25pZmZcIixcbiAgICAgICAgXCJDYWNoZS1Db250cm9sXCI6IFwibm8tY2FjaGVcIixcbiAgICAgIH0sXG4gICAgICBsb2dMZXZlbDogcHJvcHMubG9nTGV2ZWwgPz8gXCJ3YXJuXCIsXG4gICAgICB1c2VyUG9vbElkOiB0aGlzLnVzZXJQb29sLnVzZXJQb29sSWQsXG4gICAgICBjbGllbnRJZDogdGhpcy5jbGllbnQudXNlclBvb2xDbGllbnRJZCxcbiAgICAgIGNsaWVudFNlY3JldDogY2xpZW50U2VjcmV0VmFsdWUsXG4gICAgICBvYXV0aFNjb3BlczogdGhpcy5vYXV0aFNjb3BlcyxcbiAgICAgIGNvZ25pdG9BdXRoRG9tYWluOiBwcm9wcy5jb2duaXRvQXV0aERvbWFpbixcbiAgICAgIGNhbGxiYWNrUGF0aDogdGhpcy5jYWxsYmFja1BhdGgsXG4gICAgICBzaWduT3V0UmVkaXJlY3RUbzogdGhpcy5zaWduT3V0UmVkaXJlY3RUbyxcbiAgICAgIHNpZ25PdXRQYXRoOiB0aGlzLnNpZ25PdXRQYXRoLFxuICAgICAgcmVmcmVzaEF1dGhQYXRoOiB0aGlzLnJlZnJlc2hBdXRoUGF0aCxcbiAgICAgIHJlcXVpcmVHcm91cEFueU9mOiBwcm9wcy5yZXF1aXJlR3JvdXBBbnlPZixcbiAgICAgIGNvb2tpZVNldHRpbmdzOiB7XG4gICAgICAgIC8qXG4gICAgICAgIHNwYU1vZGUgLSBjb25zaWRlciBpZiB0aGlzIHNob3VsZCBiZSBzdXBwb3J0ZWRcbiAgICAgICAgaWRUb2tlbjogXCJQYXRoPS87IFNlY3VyZTsgU2FtZVNpdGU9TGF4XCIsXG4gICAgICAgIGFjY2Vzc1Rva2VuOiBcIlBhdGg9LzsgU2VjdXJlOyBTYW1lU2l0ZT1MYXhcIixcbiAgICAgICAgcmVmcmVzaFRva2VuOiBcIlBhdGg9LzsgU2VjdXJlOyBTYW1lU2l0ZT1MYXhcIixcbiAgICAgICAgbm9uY2U6IFwiUGF0aD0vOyBTZWN1cmU7IEh0dHBPbmx5OyBTYW1lU2l0ZT1MYXhcIixcbiAgICAgICAgKi9cbiAgICAgICAgaWRUb2tlbjogXCJQYXRoPS87IFNlY3VyZTsgSHR0cE9ubHk7IFNhbWVTaXRlPUxheFwiLFxuICAgICAgICBhY2Nlc3NUb2tlbjogXCJQYXRoPS87IFNlY3VyZTsgSHR0cE9ubHk7IFNhbWVTaXRlPUxheFwiLFxuICAgICAgICByZWZyZXNoVG9rZW46IFwiUGF0aD0vOyBTZWN1cmU7IEh0dHBPbmx5OyBTYW1lU2l0ZT1MYXhcIixcbiAgICAgICAgbm9uY2U6IFwiUGF0aD0vOyBTZWN1cmU7IEh0dHBPbmx5OyBTYW1lU2l0ZT1MYXhcIixcbiAgICAgIH0sXG4gICAgICBub25jZVNpZ25pbmdTZWNyZXQsXG4gICAgfVxuXG4gICAgdGhpcy5jaGVja0F1dGhGbiA9IG5ldyBMYW1iZGFDb25maWcodGhpcywgXCJDaGVja0F1dGhGblwiLCB7XG4gICAgICBmdW5jdGlvbjogcHJvcHMuYXV0aExhbWJkYXMuY2hlY2tBdXRoRm4uZ2V0KHRoaXMsIFwiQ2hlY2tBdXRoRm5JbXBvcnRcIiksXG4gICAgICBjb25maWcsXG4gICAgfSkudmVyc2lvblxuXG4gICAgdGhpcy5odHRwSGVhZGVyc0ZuID0gbmV3IExhbWJkYUNvbmZpZyh0aGlzLCBcIkh0dHBIZWFkZXJzRm5cIiwge1xuICAgICAgZnVuY3Rpb246IHByb3BzLmF1dGhMYW1iZGFzLmh0dHBIZWFkZXJzRm4uZ2V0KFxuICAgICAgICB0aGlzLFxuICAgICAgICBcIkh0dHBIZWFkZXJzRm5JbXBvcnRcIixcbiAgICAgICksXG4gICAgICBjb25maWcsXG4gICAgfSkudmVyc2lvblxuXG4gICAgdGhpcy5wYXJzZUF1dGhGbiA9IG5ldyBMYW1iZGFDb25maWcodGhpcywgXCJQYXJzZUF1dGhGblwiLCB7XG4gICAgICBmdW5jdGlvbjogcHJvcHMuYXV0aExhbWJkYXMucGFyc2VBdXRoRm4uZ2V0KHRoaXMsIFwiUGFyc2VBdXRoRm5JbXBvcnRcIiksXG4gICAgICBjb25maWcsXG4gICAgfSkudmVyc2lvblxuXG4gICAgdGhpcy5yZWZyZXNoQXV0aEZuID0gbmV3IExhbWJkYUNvbmZpZyh0aGlzLCBcIlJlZnJlc2hBdXRoRm5cIiwge1xuICAgICAgZnVuY3Rpb246IHByb3BzLmF1dGhMYW1iZGFzLnJlZnJlc2hBdXRoRm4uZ2V0KFxuICAgICAgICB0aGlzLFxuICAgICAgICBcIlJlZnJlc2hBdXRoRm5JbXBvcnRcIixcbiAgICAgICksXG4gICAgICBjb25maWcsXG4gICAgfSkudmVyc2lvblxuXG4gICAgdGhpcy5zaWduT3V0Rm4gPSBuZXcgTGFtYmRhQ29uZmlnKHRoaXMsIFwiU2lnbk91dEZuXCIsIHtcbiAgICAgIGZ1bmN0aW9uOiBwcm9wcy5hdXRoTGFtYmRhcy5zaWduT3V0Rm4uZ2V0KHRoaXMsIFwiU2lnbk91dEZuSW1wb3J0XCIpLFxuICAgICAgY29uZmlnLFxuICAgIH0pLnZlcnNpb25cbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlUGF0aExhbWJkYShcbiAgICBwYXRoOiBzdHJpbmcsXG4gICAgZm46IGxhbWJkYS5JVmVyc2lvbixcbiAgKTogY2xvdWRmcm9udC5CZWhhdmlvciB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHBhdGhQYXR0ZXJuOiBwYXRoLFxuICAgICAgZm9yd2FyZGVkVmFsdWVzOiB7XG4gICAgICAgIHF1ZXJ5U3RyaW5nOiB0cnVlLFxuICAgICAgfSxcbiAgICAgIGxhbWJkYUZ1bmN0aW9uQXNzb2NpYXRpb25zOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBldmVudFR5cGU6IGNsb3VkZnJvbnQuTGFtYmRhRWRnZUV2ZW50VHlwZS5WSUVXRVJfUkVRVUVTVCxcbiAgICAgICAgICBsYW1iZGFGdW5jdGlvbjogZm4sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYmVoYXZpb3JzIGZvciBhdXRoZW50aWNhdGlvbiBwYWdlczpcbiAgICpcbiAgICogLSBjYWxsYmFjayBwYWdlXG4gICAqIC0gcmVmcmVzaCBwYWdlXG4gICAqIC0gc2lnbiBvdXQgcGFnZVxuICAgKlxuICAgKiBUaGlzIGlzIHRvIGJlIHVzZWQgd2l0aCBDbG91ZEZyb250V2ViRGlzdHJpYnV0aW9uLiBTZWVcbiAgICogY3JlYXRlQXV0aFBhZ2VzQmVoYXZpb3JzIGlmIHVzaW5nIERpc3RyaWJ1dGlvbi5cbiAgICovXG4gIHB1YmxpYyBnZXQgYXV0aFBhZ2VzKCk6IGNsb3VkZnJvbnQuQmVoYXZpb3JbXSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIHRoaXMuY3JlYXRlUGF0aExhbWJkYSh0aGlzLmNhbGxiYWNrUGF0aCwgdGhpcy5wYXJzZUF1dGhGbiksXG4gICAgICB0aGlzLmNyZWF0ZVBhdGhMYW1iZGEodGhpcy5yZWZyZXNoQXV0aFBhdGgsIHRoaXMucmVmcmVzaEF1dGhGbiksXG4gICAgICB0aGlzLmNyZWF0ZVBhdGhMYW1iZGEodGhpcy5zaWduT3V0UGF0aCwgdGhpcy5zaWduT3V0Rm4pLFxuICAgIF1cbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYmVoYXZpb3JzIGZvciBhdXRoZW50aWNhdGlvbiBwYWdlcy5cbiAgICpcbiAgICogLSBjYWxsYmFjayBwYWdlXG4gICAqIC0gcmVmcmVzaCBwYWdlXG4gICAqIC0gc2lnbiBvdXQgcGFnZVxuICAgKlxuICAgKiBUaGlzIGlzIHRvIGJlIHVzZWQgd2l0aCBEaXN0cmlidXRpb24uXG4gICAqL1xuICBwdWJsaWMgY3JlYXRlQXV0aFBhZ2VzQmVoYXZpb3JzKFxuICAgIG9yaWdpbjogSU9yaWdpbixcbiAgICBvcHRpb25zPzogQWRkQmVoYXZpb3JPcHRpb25zLFxuICApOiBSZWNvcmQ8c3RyaW5nLCBCZWhhdmlvck9wdGlvbnM+IHtcbiAgICBmdW5jdGlvbiBwYXRoKHBhdGg6IHN0cmluZywgZm46IElWZXJzaW9uKTogUmVjb3JkPHN0cmluZywgQmVoYXZpb3JPcHRpb25zPiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBbcGF0aF06IHtcbiAgICAgICAgICBvcmlnaW4sXG4gICAgICAgICAgY29tcHJlc3M6IHRydWUsXG4gICAgICAgICAgdmlld2VyUHJvdG9jb2xQb2xpY3k6IFZpZXdlclByb3RvY29sUG9saWN5LlJFRElSRUNUX1RPX0hUVFBTLFxuICAgICAgICAgIGVkZ2VMYW1iZGFzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGV2ZW50VHlwZTogY2xvdWRmcm9udC5MYW1iZGFFZGdlRXZlbnRUeXBlLlZJRVdFUl9SRVFVRVNULFxuICAgICAgICAgICAgICBmdW5jdGlvblZlcnNpb246IGZuLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgIH0sXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnBhdGgodGhpcy5jYWxsYmFja1BhdGgsIHRoaXMucGFyc2VBdXRoRm4pLFxuICAgICAgLi4ucGF0aCh0aGlzLnJlZnJlc2hBdXRoUGF0aCwgdGhpcy5yZWZyZXNoQXV0aEZuKSxcbiAgICAgIC4uLnBhdGgodGhpcy5zaWduT3V0UGF0aCwgdGhpcy5zaWduT3V0Rm4pLFxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgbGFtYmRhIGZ1bmN0aW9uIGFzc29jaWF0aW9uIGZvciB2aWV3ZXIgcmVxdWVzdCB0byBjaGVja1xuICAgKiBhdXRoZW50aWNhdGlvbiBhbmQgb3JpZ2luYWwgcmVzcG9uc2UgdG8gYWRkIGhlYWRlcnMuXG4gICAqXG4gICAqIFRoaXMgaXMgdG8gYmUgdXNlZCB3aXRoIENsb3VkRnJvbnRXZWJEaXN0cmlidXRpb24uIFNlZVxuICAgKiBjcmVhdGVQcm90ZWN0ZWRCZWhhdmlvciBpZiB1c2luZyBEaXN0cmlidXRpb24uXG4gICAqL1xuICBwdWJsaWMgZ2V0IGF1dGhGaWx0ZXJzKCk6IGNsb3VkZnJvbnQuTGFtYmRhRnVuY3Rpb25Bc3NvY2lhdGlvbltdIHtcbiAgICByZXR1cm4gW1xuICAgICAge1xuICAgICAgICBldmVudFR5cGU6IGNsb3VkZnJvbnQuTGFtYmRhRWRnZUV2ZW50VHlwZS5WSUVXRVJfUkVRVUVTVCxcbiAgICAgICAgbGFtYmRhRnVuY3Rpb246IHRoaXMuY2hlY2tBdXRoRm4sXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBldmVudFR5cGU6IGNsb3VkZnJvbnQuTGFtYmRhRWRnZUV2ZW50VHlwZS5PUklHSU5fUkVTUE9OU0UsXG4gICAgICAgIGxhbWJkYUZ1bmN0aW9uOiB0aGlzLmh0dHBIZWFkZXJzRm4sXG4gICAgICB9LFxuICAgIF1cbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYmVoYXZpb3IgdGhhdCBpbmNsdWRlcyBhdXRob3JpemF0aW9uIGNoZWNrLlxuICAgKlxuICAgKiBUaGlzIGlzIHRvIGJlIHVzZWQgd2l0aCBEaXN0cmlidXRpb24uXG4gICAqL1xuICBwdWJsaWMgY3JlYXRlUHJvdGVjdGVkQmVoYXZpb3IoXG4gICAgb3JpZ2luOiBJT3JpZ2luLFxuICAgIG9wdGlvbnM/OiBBZGRCZWhhdmlvck9wdGlvbnMsXG4gICk6IEJlaGF2aW9yT3B0aW9ucyB7XG4gICAgaWYgKG9wdGlvbnM/LmVkZ2VMYW1iZGFzICE9IG51bGwpIHtcbiAgICAgIHRocm93IEVycm9yKFwiVXNlci1kZWZpbmVkIGVkZ2VMYW1iZGFzIGlzIGN1cnJlbnRseSBub3Qgc3VwcG9ydGVkXCIpXG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIG9yaWdpbixcbiAgICAgIGNvbXByZXNzOiB0cnVlLFxuICAgICAgdmlld2VyUHJvdG9jb2xQb2xpY3k6IFZpZXdlclByb3RvY29sUG9saWN5LlJFRElSRUNUX1RPX0hUVFBTLFxuICAgICAgZWRnZUxhbWJkYXM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGV2ZW50VHlwZTogY2xvdWRmcm9udC5MYW1iZGFFZGdlRXZlbnRUeXBlLlZJRVdFUl9SRVFVRVNULFxuICAgICAgICAgIGZ1bmN0aW9uVmVyc2lvbjogdGhpcy5jaGVja0F1dGhGbixcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGV2ZW50VHlwZTogY2xvdWRmcm9udC5MYW1iZGFFZGdlRXZlbnRUeXBlLk9SSUdJTl9SRVNQT05TRSxcbiAgICAgICAgICBmdW5jdGlvblZlcnNpb246IHRoaXMuaHR0cEhlYWRlcnNGbixcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICAuLi5vcHRpb25zLFxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgQ29nbml0byBjbGllbnQgdG8gdXNlIHRoZSBwcm9wZXIgVVJMcyBhbmQgT0F1dGggc2NvcGVzLlxuICAgKlxuICAgKiBUT0RPOiBJbiBjYXNlIHRoZSBjbGllbnQgY29uZmlndXJhdGlvbiBjaGFuZ2VzIGFuZCBpcyB1cGRhdGVkXG4gICAqICBieSBDbG91ZEZvcm1hdGlvbiwgdGhpcyB3aWxsIG5vdCBiZSByZWFwcGxpZWQgY2F1c2luZyB0aGUgY2xpZW50XG4gICAqICB0byBub3QgYmUgY29ycmVjdGx5IGNvbmZpZ3VyZWQuXG4gICAqICBIb3cgY2FuIHdlIGF2b2lkIHRoaXMgc2NlbmFyaW8/XG4gICAqL1xuICBwdWJsaWMgdXBkYXRlQ2xpZW50KGlkOiBzdHJpbmcsIHByb3BzOiBVcGRhdGVDbGllbnRQcm9wcyk6IENsaWVudFVwZGF0ZSB7XG4gICAgaWYgKCF0aGlzLmNsaWVudENyZWF0ZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJZb3UgY2Fubm90IHVzZSB1cGRhdGVDbGllbnQgd2l0aCBhIHVzZXItcHJvdmlkZWQgQ29nbml0byBDbGllbnQgXCIgK1xuICAgICAgICAgIFwic2luY2UgaXQgd291bGQgb3ZlcnJpZGUgdGhlIHVzZXItcHJvdmlkZWQgc2V0dGluZ3NcIixcbiAgICAgIClcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IENsaWVudFVwZGF0ZSh0aGlzLCBpZCwge1xuICAgICAgY2xpZW50OiB0aGlzLmNsaWVudCxcbiAgICAgIHVzZXJQb29sOiB0aGlzLnVzZXJQb29sLFxuICAgICAgc2lnbk91dFVybDogcHJvcHMuc2lnbk91dFVybCxcbiAgICAgIGNhbGxiYWNrVXJsOiBwcm9wcy5jYWxsYmFja1VybCxcbiAgICAgIG9hdXRoU2NvcGVzOiB0aGlzLm9hdXRoU2NvcGVzLFxuICAgICAgaWRlbnRpdHlQcm92aWRlcnM6XG4gICAgICAgIHByb3BzLmlkZW50aXR5UHJvdmlkZXJzID8/XG4gICAgICAgIFtcIkNPR05JVE9cIl0uY29uY2F0KFxuICAgICAgICAgIHRoaXMudXNlclBvb2wuaWRlbnRpdHlQcm92aWRlcnMubWFwKChpdCkgPT4gaXQucHJvdmlkZXJOYW1lKSxcbiAgICAgICAgKSxcbiAgICB9KVxuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { Construct } from "constructs";
|
|
2
|
+
interface GenerateSecretProps {
|
|
3
|
+
/**
|
|
4
|
+
* Nonce to force secret update.
|
|
5
|
+
*/
|
|
6
|
+
nonce?: string;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Generate a secret to be used in other parts of the deployment.
|
|
10
|
+
*/
|
|
11
|
+
export declare class GenerateSecret extends Construct {
|
|
12
|
+
readonly value: string;
|
|
13
|
+
constructor(scope: Construct, id: string, props?: GenerateSecretProps);
|
|
14
|
+
}
|
|
15
|
+
export {};
|