raindancers-cloudfront 0.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 +202 -0
- package/README.md +176 -0
- package/lib/bicep/deploy/deploy.d.ts +46 -0
- package/lib/bicep/deploy/deploy.js +123 -0
- package/lib/bicep/deploy/index.d.ts +3 -0
- package/lib/bicep/deploy/index.js +20 -0
- package/lib/bicep/deploy/template.d.ts +75 -0
- package/lib/bicep/deploy/template.js +364 -0
- package/lib/bicep/deploy/templateBuilder.d.ts +16 -0
- package/lib/bicep/deploy/templateBuilder.js +35 -0
- package/lib/bicep/index.d.ts +3 -0
- package/lib/bicep/index.js +40 -0
- package/lib/bicep/patterns/azureAdApplicationFederated.d.ts +58 -0
- package/lib/bicep/patterns/azureAdApplicationFederated.js +317 -0
- package/lib/bicep/patterns/index.d.ts +1 -0
- package/lib/bicep/patterns/index.js +18 -0
- package/lib/bicep/resources/azure/appServicePlan.d.ts +11 -0
- package/lib/bicep/resources/azure/appServicePlan.js +24 -0
- package/lib/bicep/resources/azure/applicationInsights.d.ts +13 -0
- package/lib/bicep/resources/azure/applicationInsights.js +27 -0
- package/lib/bicep/resources/azure/deploymentScript.d.ts +16 -0
- package/lib/bicep/resources/azure/deploymentScript.js +43 -0
- package/lib/bicep/resources/azure/functionApp.d.ts +20 -0
- package/lib/bicep/resources/azure/functionApp.js +54 -0
- package/lib/bicep/resources/azure/index.d.ts +8 -0
- package/lib/bicep/resources/azure/index.js +25 -0
- package/lib/bicep/resources/azure/logAnalyticsWorkspace.d.ts +11 -0
- package/lib/bicep/resources/azure/logAnalyticsWorkspace.js +26 -0
- package/lib/bicep/resources/azure/managedIdentity.d.ts +13 -0
- package/lib/bicep/resources/azure/managedIdentity.js +24 -0
- package/lib/bicep/resources/azure/roleAssignment.d.ts +18 -0
- package/lib/bicep/resources/azure/roleAssignment.js +34 -0
- package/lib/bicep/resources/azure/storageAccount.d.ts +11 -0
- package/lib/bicep/resources/azure/storageAccount.js +28 -0
- package/lib/bicep/resources/graph/appRoleAssignment.d.ts +25 -0
- package/lib/bicep/resources/graph/appRoleAssignment.js +33 -0
- package/lib/bicep/resources/graph/application.d.ts +51 -0
- package/lib/bicep/resources/graph/application.js +88 -0
- package/lib/bicep/resources/graph/bicepConstruct.d.ts +14 -0
- package/lib/bicep/resources/graph/bicepConstruct.js +29 -0
- package/lib/bicep/resources/graph/existingServicePrincipal.d.ts +19 -0
- package/lib/bicep/resources/graph/existingServicePrincipal.js +26 -0
- package/lib/bicep/resources/graph/federatedIdentityCredential.d.ts +29 -0
- package/lib/bicep/resources/graph/federatedIdentityCredential.js +31 -0
- package/lib/bicep/resources/graph/group.d.ts +26 -0
- package/lib/bicep/resources/graph/group.js +31 -0
- package/lib/bicep/resources/graph/index.d.ts +8 -0
- package/lib/bicep/resources/graph/index.js +25 -0
- package/lib/bicep/resources/graph/servicePrincipal.d.ts +22 -0
- package/lib/bicep/resources/graph/servicePrincipal.js +27 -0
- package/lib/bicep/resources/graph/types/index.d.ts +1 -0
- package/lib/bicep/resources/graph/types/index.js +18 -0
- package/lib/bicep/resources/graph/types/permissions.d.ts +54 -0
- package/lib/bicep/resources/graph/types/permissions.js +73 -0
- package/lib/bicep/resources/index.d.ts +2 -0
- package/lib/bicep/resources/index.js +39 -0
- package/lib/cloudfront/auth/authLambdaFunctions.d.ts +20 -0
- package/lib/cloudfront/auth/authLambdaFunctions.js +159 -0
- package/lib/cloudfront/auth/authSecretManager.d.ts +19 -0
- package/lib/cloudfront/auth/authSecretManager.js +92 -0
- package/lib/cloudfront/auth/cognitoAuthSecretManager.d.ts +20 -0
- package/lib/cloudfront/auth/cognitoAuthSecretManager.js +93 -0
- package/lib/cloudfront/auth/index.d.ts +3 -0
- package/lib/cloudfront/auth/index.js +20 -0
- package/lib/cloudfront/authSecurityTable.d.ts +10 -0
- package/lib/cloudfront/authSecurityTable.js +78 -0
- package/lib/cloudfront/cloudfront-functions/function-composer.d.ts +21 -0
- package/lib/cloudfront/cloudfront-functions/function-composer.js +132 -0
- package/lib/cloudfront/cloudfrontCertificate.d.ts +40 -0
- package/lib/cloudfront/cloudfrontCertificate.js +116 -0
- package/lib/cloudfront/cloudfrontWebAcl.d.ts +72 -0
- package/lib/cloudfront/cloudfrontWebAcl.js +249 -0
- package/lib/cloudfront/countries.d.ts +260 -0
- package/lib/cloudfront/countries.js +263 -0
- package/lib/cloudfront/deployment/viteFrontendDeployment.d.ts +12 -0
- package/lib/cloudfront/deployment/viteFrontendDeployment.js +63 -0
- package/lib/cloudfront/index.d.ts +11 -0
- package/lib/cloudfront/index.js +28 -0
- package/lib/cloudfront/jwtDecoder.d.ts +5 -0
- package/lib/cloudfront/jwtDecoder.js +57 -0
- package/lib/cloudfront/logging/auditLogArchive.d.ts +18 -0
- package/lib/cloudfront/logging/auditLogArchive.js +205 -0
- package/lib/cloudfront/logging/index.d.ts +1 -0
- package/lib/cloudfront/logging/index.js +18 -0
- package/lib/cloudfront/oauthEdgeRole.d.ts +9 -0
- package/lib/cloudfront/oauthEdgeRole.js +56 -0
- package/lib/cloudfront/patterns/authInfrastructure.d.ts +34 -0
- package/lib/cloudfront/patterns/authInfrastructure.js +140 -0
- package/lib/cloudfront/patterns/cognito-secured-cloudfront.d.ts +36 -0
- package/lib/cloudfront/patterns/cognito-secured-cloudfront.js +285 -0
- package/lib/cloudfront/patterns/cognitoAuthInfrastructure.d.ts +28 -0
- package/lib/cloudfront/patterns/cognitoAuthInfrastructure.js +157 -0
- package/lib/cloudfront/patterns/index.d.ts +4 -0
- package/lib/cloudfront/patterns/index.js +21 -0
- package/lib/cloudfront/patterns/securedCloudFront.d.ts +73 -0
- package/lib/cloudfront/patterns/securedCloudFront.js +416 -0
- package/lib/cloudfront/ssmCrossRegionWriter.d.ts +9 -0
- package/lib/cloudfront/ssmCrossRegionWriter.js +65 -0
- package/lib/cloudfront/syncSecretToKvs.d.ts +9 -0
- package/lib/cloudfront/syncSecretToKvs.js +89 -0
- package/lib/index.d.ts +2 -0
- package/lib/index.js +19 -0
- package/package.json +105 -0
|
@@ -0,0 +1,317 @@
|
|
|
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 () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.AzureAdApplicationFederated = exports.OidcAudience = void 0;
|
|
37
|
+
const fs = __importStar(require("fs"));
|
|
38
|
+
const path = __importStar(require("path"));
|
|
39
|
+
const core = __importStar(require("aws-cdk-lib"));
|
|
40
|
+
const aws_cdk_lib_1 = require("aws-cdk-lib");
|
|
41
|
+
const constructs_1 = require("constructs");
|
|
42
|
+
const bicep = __importStar(require("../deploy"));
|
|
43
|
+
const azure = __importStar(require("../resources/azure"));
|
|
44
|
+
const graph = __importStar(require("../resources/graph"));
|
|
45
|
+
/**
|
|
46
|
+
* Well-known OIDC audience values for common providers
|
|
47
|
+
*/
|
|
48
|
+
var OidcAudience;
|
|
49
|
+
(function (OidcAudience) {
|
|
50
|
+
/** AWS Security Token Service */
|
|
51
|
+
OidcAudience["AWS_STS"] = "sts.amazonaws.com";
|
|
52
|
+
/** Azure AD Token Exchange for Workload Identity Federation */
|
|
53
|
+
OidcAudience["AZURE_AD_TOKEN_EXCHANGE"] = "api://AzureADTokenExchange";
|
|
54
|
+
/** Microsoft Graph API */
|
|
55
|
+
OidcAudience["MICROSOFT_GRAPH"] = "https://graph.microsoft.com";
|
|
56
|
+
/** Kubernetes default service account */
|
|
57
|
+
OidcAudience["KUBERNETES"] = "https://kubernetes.default.svc";
|
|
58
|
+
})(OidcAudience || (exports.OidcAudience = OidcAudience = {}));
|
|
59
|
+
class AzureAdApplicationFederated extends constructs_1.Construct {
|
|
60
|
+
constructor(scope, id, props) {
|
|
61
|
+
super(scope, id);
|
|
62
|
+
if (props.enableAwsSessionTagMapping && (!props.groups || props.groups.length === 0)) {
|
|
63
|
+
throw new Error('enableAwsSessionTagMapping requires groups to be defined. ' +
|
|
64
|
+
'Custom Claims Provider maps Azure AD groups/roles to AWS session tags.');
|
|
65
|
+
}
|
|
66
|
+
this.trustedTokenRequester = props.trustedTokenRequester;
|
|
67
|
+
const stack = core.Stack.of(this);
|
|
68
|
+
const cloudformationArn = `arn:aws:cloudformation:${stack.region}:${stack.account}:stack/${stack.stackName}`;
|
|
69
|
+
let claimsProviderResult;
|
|
70
|
+
const { template, outputKeys } = new bicep.BicepTemplateBuilder()
|
|
71
|
+
.withMetadata({
|
|
72
|
+
name: props.appName,
|
|
73
|
+
description: 'Azure AD Application with federated credentials for AWS integration',
|
|
74
|
+
cloudformation: {
|
|
75
|
+
stackArn: cloudformationArn,
|
|
76
|
+
},
|
|
77
|
+
})
|
|
78
|
+
.withExtensions(bicep.BicepExtension.MICROSOFT_GRAPH_STABLE)
|
|
79
|
+
.withResources(builder => {
|
|
80
|
+
claimsProviderResult = this.buildResources(builder, props);
|
|
81
|
+
})
|
|
82
|
+
.withOutputs({
|
|
83
|
+
appId: 'Application.appId',
|
|
84
|
+
tenantId: 'tenant().tenantId',
|
|
85
|
+
...(props.enableAwsSessionTagMapping ? {
|
|
86
|
+
functionAppName: 'Functionapp.name',
|
|
87
|
+
} : {}),
|
|
88
|
+
})
|
|
89
|
+
.build();
|
|
90
|
+
const deployment = new bicep.BicepDeployment(this, 'Deployment', {
|
|
91
|
+
template: template.synthesize(),
|
|
92
|
+
resourceGroupName: props.resourceGroupName,
|
|
93
|
+
azureFederatedCredentials: props.deploymentCredentials,
|
|
94
|
+
cloudformationStackArn: cloudformationArn,
|
|
95
|
+
parameters: {
|
|
96
|
+
deploymentSpObjectId: props.deploymentCredentials.spObjectId,
|
|
97
|
+
},
|
|
98
|
+
functionCode: claimsProviderResult ? {
|
|
99
|
+
s3BucketName: claimsProviderResult.functionCodeAsset.s3BucketName,
|
|
100
|
+
s3ObjectKey: claimsProviderResult.functionCodeAsset.s3ObjectKey,
|
|
101
|
+
} : undefined,
|
|
102
|
+
});
|
|
103
|
+
if (claimsProviderResult) {
|
|
104
|
+
claimsProviderResult.functionCodeAsset.grantRead(deployment.lambdaRole);
|
|
105
|
+
}
|
|
106
|
+
this.outputs = {};
|
|
107
|
+
outputKeys.forEach(key => {
|
|
108
|
+
this.outputs[key] = deployment.getOutput(key);
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
buildResources(template, props) {
|
|
112
|
+
const appRoles = props.groups?.map((groupName) => {
|
|
113
|
+
const roleId = `guid('${groupName}-role')`;
|
|
114
|
+
return {
|
|
115
|
+
id: roleId,
|
|
116
|
+
displayName: groupName,
|
|
117
|
+
description: `${groupName} role for ${props.appName}`,
|
|
118
|
+
value: groupName,
|
|
119
|
+
allowedMemberTypes: [graph.AllowedMemberType.USER],
|
|
120
|
+
isEnabled: true,
|
|
121
|
+
};
|
|
122
|
+
}) || [];
|
|
123
|
+
const application = new graph.Application(template, 'application', {
|
|
124
|
+
displayName: props.appName,
|
|
125
|
+
redirectUris: props.redirectUris,
|
|
126
|
+
signInAudience: props.signInAudience ?? graph.SignInAudience.AZURE_AD_MY_ORG,
|
|
127
|
+
appRoles: appRoles,
|
|
128
|
+
optionalClaims: appRoles.length > 0 ? {
|
|
129
|
+
idToken: [
|
|
130
|
+
{
|
|
131
|
+
name: 'roles',
|
|
132
|
+
essential: false,
|
|
133
|
+
},
|
|
134
|
+
...(props.enableAwsSessionTagMapping ? [{
|
|
135
|
+
name: 'https://aws.amazon.com/tags/principal_tags/Roles',
|
|
136
|
+
essential: false,
|
|
137
|
+
source: 'customClaimsProvider',
|
|
138
|
+
}] : []),
|
|
139
|
+
],
|
|
140
|
+
} : undefined,
|
|
141
|
+
});
|
|
142
|
+
const servicePrincipal = new graph.ServicePrincipal(template, 'servicePrincipal', {
|
|
143
|
+
application: application,
|
|
144
|
+
appRoleAssignmentRequired: false,
|
|
145
|
+
});
|
|
146
|
+
const federatedCredential = new graph.FederatedIdentityCredential(template, 'federatedCredential', {
|
|
147
|
+
application: application,
|
|
148
|
+
name: `${props.appName}-aws-credential`,
|
|
149
|
+
issuer: props.trustedTokenRequester.issuer,
|
|
150
|
+
subject: props.trustedTokenRequester.sub,
|
|
151
|
+
audiences: props.trustedTokenRequester.aud,
|
|
152
|
+
description: `Federated credential for ${props.appName} AWS integration`,
|
|
153
|
+
});
|
|
154
|
+
if (props.groups) {
|
|
155
|
+
props.groups.forEach((groupName) => {
|
|
156
|
+
const sanitizedName = this.sanitizeIdentifier(groupName);
|
|
157
|
+
const group = new graph.Group(template, `group${sanitizedName}`, {
|
|
158
|
+
displayName: groupName,
|
|
159
|
+
description: `${groupName} group for ${props.appName}`,
|
|
160
|
+
});
|
|
161
|
+
const appRoleId = `guid('${groupName}-role')`;
|
|
162
|
+
const assignment = new graph.AppRoleAssignment(template, `groupAssignment${sanitizedName}`, {
|
|
163
|
+
resourceServicePrincipal: servicePrincipal,
|
|
164
|
+
principal: group,
|
|
165
|
+
appRoleId: appRoleId,
|
|
166
|
+
});
|
|
167
|
+
group.synthesize();
|
|
168
|
+
assignment.synthesize();
|
|
169
|
+
});
|
|
170
|
+
}
|
|
171
|
+
application.synthesize();
|
|
172
|
+
servicePrincipal.synthesize();
|
|
173
|
+
federatedCredential.synthesize();
|
|
174
|
+
if (!props.enableAwsSessionTagMapping) {
|
|
175
|
+
return undefined;
|
|
176
|
+
}
|
|
177
|
+
return this.buildCustomClaimsProvider(template, props);
|
|
178
|
+
}
|
|
179
|
+
buildCustomClaimsProvider(template, props) {
|
|
180
|
+
template.addStringParameter('location', 'Azure region for resources', "'australiaeast'");
|
|
181
|
+
template.addStringParameter('deploymentSpObjectId', 'Object ID of the SP deploying this template (needs Storage Blob Data Contributor)', '');
|
|
182
|
+
const namePrefix = props.appName.toLowerCase();
|
|
183
|
+
const uniqueSuffix = 'substring(uniqueString(resourceGroup().id), 0, 8)';
|
|
184
|
+
const managedIdentity = new azure.ManagedIdentity(template, 'managedIdentity', {
|
|
185
|
+
name: `'${namePrefix}-claims-identity-\${${uniqueSuffix}}'`,
|
|
186
|
+
});
|
|
187
|
+
const storageAccount = new azure.StorageAccount(template, 'storageAccount', {
|
|
188
|
+
name: `'${namePrefix}claims\${${uniqueSuffix}}'`,
|
|
189
|
+
});
|
|
190
|
+
const appServicePlan = new azure.AppServicePlan(template, 'appServicePlan', {
|
|
191
|
+
name: `'${namePrefix}-claims-plan-\${${uniqueSuffix}}'`,
|
|
192
|
+
});
|
|
193
|
+
const logAnalyticsWorkspace = new azure.LogAnalyticsWorkspace(template, 'logAnalyticsWorkspace', {
|
|
194
|
+
name: `'${namePrefix}-claims-logs-\${${uniqueSuffix}}'`,
|
|
195
|
+
});
|
|
196
|
+
const applicationInsights = new azure.ApplicationInsights(template, 'applicationInsights', {
|
|
197
|
+
name: `'${namePrefix}-claims-insights-\${${uniqueSuffix}}'`,
|
|
198
|
+
logAnalyticsWorkspace: logAnalyticsWorkspace,
|
|
199
|
+
});
|
|
200
|
+
const functionApp = new azure.FunctionApp(template, 'functionApp', {
|
|
201
|
+
name: `'${namePrefix}-claims-func-\${${uniqueSuffix}}'`,
|
|
202
|
+
managedIdentity: managedIdentity,
|
|
203
|
+
appServicePlan: appServicePlan,
|
|
204
|
+
storageAccount: storageAccount,
|
|
205
|
+
applicationInsights: applicationInsights,
|
|
206
|
+
});
|
|
207
|
+
const roleAssignment = new azure.RoleAssignment(template, 'managedIdentityContributor', {
|
|
208
|
+
name: `guid('${props.appName}-mi-contributor')`,
|
|
209
|
+
roleDefinitionId: azure.AzureBuiltInRole.WEBSITE_CONTRIBUTOR,
|
|
210
|
+
principalId: managedIdentity,
|
|
211
|
+
});
|
|
212
|
+
const spBlobRoleAssignment = new azure.RoleAssignment(template, 'deploymentSpBlobContributor', {
|
|
213
|
+
name: `guid('${props.appName}-sp-blob-contributor')`,
|
|
214
|
+
roleDefinitionId: azure.AzureBuiltInRole.STORAGE_BLOB_DATA_CONTRIBUTOR,
|
|
215
|
+
principalId: 'deploymentSpObjectId',
|
|
216
|
+
});
|
|
217
|
+
spBlobRoleAssignment.addDependency(storageAccount);
|
|
218
|
+
const functionCodeAsset = new aws_cdk_lib_1.aws_s3_assets.Asset(this, 'FunctionCodeAsset', {
|
|
219
|
+
path: path.join(__dirname, '..', 'azure-functions', 'custom-claims-provider'),
|
|
220
|
+
bundling: {
|
|
221
|
+
image: core.DockerImage.fromRegistry('python:3.12-slim'),
|
|
222
|
+
command: [
|
|
223
|
+
'bash', '-c',
|
|
224
|
+
'pip install -r /asset-input/requirements.txt -t /asset-output/ && cp /asset-input/function_app.py /asset-input/host.json /asset-input/requirements.txt /asset-output/',
|
|
225
|
+
],
|
|
226
|
+
},
|
|
227
|
+
});
|
|
228
|
+
const functionAppRegistration = new graph.Application(template, 'functionAppRegistration', {
|
|
229
|
+
displayName: `${namePrefix}-claims-func-app`,
|
|
230
|
+
redirectUris: [],
|
|
231
|
+
requiredResourceAccess: [
|
|
232
|
+
{
|
|
233
|
+
resourceAppId: graph.ResourceAppId.MICROSOFT_GRAPH,
|
|
234
|
+
resourceAccess: [
|
|
235
|
+
{
|
|
236
|
+
id: graph.MicrosoftGraphPermission.CUSTOM_AUTH_EXT_RECEIVE_PAYLOAD,
|
|
237
|
+
type: graph.PermissionType.ROLE,
|
|
238
|
+
},
|
|
239
|
+
],
|
|
240
|
+
},
|
|
241
|
+
],
|
|
242
|
+
});
|
|
243
|
+
const graphServicePrincipal = new graph.ExistingServicePrincipal(template, 'graphServicePrincipal', {
|
|
244
|
+
appId: '00000003-0000-0000-c000-000000000000',
|
|
245
|
+
});
|
|
246
|
+
const miPolicyReadPermission = new graph.AppRoleAssignment(template, 'miPolicyReadPermission', {
|
|
247
|
+
resourceServicePrincipal: graphServicePrincipal,
|
|
248
|
+
principal: `${managedIdentity.principalId}`,
|
|
249
|
+
appRoleId: '\'246dd0d5-5bd0-4def-940b-0421030a5b68\'',
|
|
250
|
+
});
|
|
251
|
+
const miPolicyPermission = new graph.AppRoleAssignment(template, 'miPolicyPermission', {
|
|
252
|
+
resourceServicePrincipal: graphServicePrincipal,
|
|
253
|
+
principal: `${managedIdentity.principalId}`,
|
|
254
|
+
appRoleId: '\'be74164b-cff1-491c-8741-e671cb536e13\'',
|
|
255
|
+
});
|
|
256
|
+
const miCustomAuthExtPermission = new graph.AppRoleAssignment(template, 'miCustomAuthExtPermission', {
|
|
257
|
+
resourceServicePrincipal: graphServicePrincipal,
|
|
258
|
+
principal: `${managedIdentity.principalId}`,
|
|
259
|
+
appRoleId: '\'c2667967-7050-4e7e-b059-4cbbb3811d03\'',
|
|
260
|
+
});
|
|
261
|
+
const miEventListenerPermission = new graph.AppRoleAssignment(template, 'miEventListenerPermission', {
|
|
262
|
+
resourceServicePrincipal: graphServicePrincipal,
|
|
263
|
+
principal: `${managedIdentity.principalId}`,
|
|
264
|
+
appRoleId: '\'0edf5e9e-4ce8-468a-8432-d08631d18c43\'',
|
|
265
|
+
});
|
|
266
|
+
const miAppReadWritePermission = new graph.AppRoleAssignment(template, 'miAppReadWritePermission', {
|
|
267
|
+
resourceServicePrincipal: graphServicePrincipal,
|
|
268
|
+
principal: `${managedIdentity.principalId}`,
|
|
269
|
+
appRoleId: `'${graph.MicrosoftGraphPermission.APPLICATION_READ_WRITE_ALL}'`,
|
|
270
|
+
});
|
|
271
|
+
const wireCustomClaimsExtension = new azure.DeploymentScript(template, 'wireCustomClaimsExtension', {
|
|
272
|
+
name: "'wire-custom-claims-extension'",
|
|
273
|
+
managedIdentity: managedIdentity,
|
|
274
|
+
scriptContent: fs.readFileSync(path.join(__dirname, 'scripts', 'wire-custom-claims-extension.sh'), 'utf8'),
|
|
275
|
+
environmentVariables: {
|
|
276
|
+
FUNCTION_HOSTNAME: 'Functionapp.properties.defaultHostName',
|
|
277
|
+
FUNCTION_APP_ID: 'Functionappregistration.appId',
|
|
278
|
+
CLF_APP_ID: 'Application.appId',
|
|
279
|
+
EXT_DISPLAY_NAME: `'${namePrefix}-claims-provider'`,
|
|
280
|
+
},
|
|
281
|
+
});
|
|
282
|
+
wireCustomClaimsExtension.addDependency(miPolicyReadPermission);
|
|
283
|
+
wireCustomClaimsExtension.addDependency(miPolicyPermission);
|
|
284
|
+
wireCustomClaimsExtension.addDependency(miCustomAuthExtPermission);
|
|
285
|
+
wireCustomClaimsExtension.addDependency(miEventListenerPermission);
|
|
286
|
+
wireCustomClaimsExtension.addDependency(miAppReadWritePermission);
|
|
287
|
+
managedIdentity.synthesize();
|
|
288
|
+
storageAccount.synthesize();
|
|
289
|
+
appServicePlan.synthesize();
|
|
290
|
+
logAnalyticsWorkspace.synthesize();
|
|
291
|
+
applicationInsights.synthesize();
|
|
292
|
+
functionApp.synthesize();
|
|
293
|
+
roleAssignment.synthesize();
|
|
294
|
+
spBlobRoleAssignment.synthesize();
|
|
295
|
+
functionAppRegistration.synthesize();
|
|
296
|
+
graphServicePrincipal.synthesize();
|
|
297
|
+
miPolicyReadPermission.synthesize();
|
|
298
|
+
miPolicyPermission.synthesize();
|
|
299
|
+
miCustomAuthExtPermission.synthesize();
|
|
300
|
+
miEventListenerPermission.synthesize();
|
|
301
|
+
miAppReadWritePermission.synthesize();
|
|
302
|
+
wireCustomClaimsExtension.synthesize();
|
|
303
|
+
return {
|
|
304
|
+
functionCodeAsset: functionCodeAsset,
|
|
305
|
+
};
|
|
306
|
+
}
|
|
307
|
+
sanitizeIdentifier(name) {
|
|
308
|
+
return name
|
|
309
|
+
.split(/[-_\s]+/)
|
|
310
|
+
.map(word => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase())
|
|
311
|
+
.join('')
|
|
312
|
+
.replace(/[^a-zA-Z0-9]/g, '')
|
|
313
|
+
.replace(/^[0-9]/, '_$&');
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
exports.AzureAdApplicationFederated = AzureAdApplicationFederated;
|
|
317
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXp1cmVBZEFwcGxpY2F0aW9uRmVkZXJhdGVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2JpY2VwL3BhdHRlcm5zL2F6dXJlQWRBcHBsaWNhdGlvbkZlZGVyYXRlZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSx1Q0FBeUI7QUFDekIsMkNBQTZCO0FBQzdCLGtEQUFvQztBQUNwQyw2Q0FFcUI7QUFDckIsMkNBQXVDO0FBQ3ZDLGlEQUFtQztBQUNuQywwREFBNEM7QUFDNUMsMERBQTRDO0FBRTVDOztHQUVHO0FBQ0gsSUFBWSxZQVNYO0FBVEQsV0FBWSxZQUFZO0lBQ3RCLGlDQUFpQztJQUNqQyw2Q0FBNkIsQ0FBQTtJQUM3QiwrREFBK0Q7SUFDL0Qsc0VBQXNELENBQUE7SUFDdEQsMEJBQTBCO0lBQzFCLCtEQUErQyxDQUFBO0lBQy9DLHlDQUF5QztJQUN6Qyw2REFBNkMsQ0FBQTtBQUMvQyxDQUFDLEVBVFcsWUFBWSw0QkFBWixZQUFZLFFBU3ZCO0FBb0NELE1BQWEsMkJBQTRCLFNBQVEsc0JBQVM7SUFNeEQsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUF1QztRQUMvRSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRWpCLElBQUksS0FBSyxDQUFDLDBCQUEwQixJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDckYsTUFBTSxJQUFJLEtBQUssQ0FDYiw0REFBNEQ7Z0JBQzVELHdFQUF3RSxDQUN6RSxDQUFDO1FBQ0osQ0FBQztRQUVELElBQUksQ0FBQyxxQkFBcUIsR0FBRyxLQUFLLENBQUMscUJBQXFCLENBQUM7UUFFekQsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFB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YUFDaEIsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO2FBQ3ZFLElBQUksQ0FBQyxFQUFFLENBQUM7YUFDUixPQUFPLENBQUMsZUFBZSxFQUFFLEVBQUUsQ0FBQzthQUM1QixPQUFPLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQzlCLENBQUM7Q0FDRjtBQXZURCxrRUF1VEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBmcyBmcm9tICdmcyc7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0ICogYXMgY29yZSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQge1xuICBhd3NfczNfYXNzZXRzIGFzIHMzYXNzZXRzLFxufSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCAqIGFzIGJpY2VwIGZyb20gJy4uL2RlcGxveSc7XG5pbXBvcnQgKiBhcyBhenVyZSBmcm9tICcuLi9yZXNvdXJjZXMvYXp1cmUnO1xuaW1wb3J0ICogYXMgZ3JhcGggZnJvbSAnLi4vcmVzb3VyY2VzL2dyYXBoJztcblxuLyoqXG4gKiBXZWxsLWtub3duIE9JREMgYXVkaWVuY2UgdmFsdWVzIGZvciBjb21tb24gcHJvdmlkZXJzXG4gKi9cbmV4cG9ydCBlbnVtIE9pZGNBdWRpZW5jZSB7XG4gIC8qKiBBV1MgU2VjdXJpdHkgVG9rZW4gU2VydmljZSAqL1xuICBBV1NfU1RTID0gJ3N0cy5hbWF6b25hd3MuY29tJyxcbiAgLyoqIEF6dXJlIEFEIFRva2VuIEV4Y2hhbmdlIGZvciBXb3JrbG9hZCBJZGVudGl0eSBGZWRlcmF0aW9uICovXG4gIEFaVVJFX0FEX1RPS0VOX0VYQ0hBTkdFID0gJ2FwaTovL0F6dXJlQURUb2tlbkV4Y2hhbmdlJyxcbiAgLyoqIE1pY3Jvc29mdCBHcmFwaCBBUEkgKi9cbiAgTUlDUk9TT0ZUX0dSQVBIID0gJ2h0dHBzOi8vZ3JhcGgubWljcm9zb2Z0LmNvbScsXG4gIC8qKiBLdWJlcm5ldGVzIGRlZmF1bHQgc2VydmljZSBhY2NvdW50ICovXG4gIEtVQkVSTkVURVMgPSAnaHR0cHM6Ly9rdWJlcm5ldGVzLmRlZmF1bHQuc3ZjJyxcbn1cblxuLyoqXG4gKiBDb25maWd1cmF0aW9uIGZvciBleHRlcm5hbCBpZGVudGl0eSB0cnVzdGVkIHRvIHJlcXVlc3QgdG9rZW5zXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVHJ1c3RlZFRva2VuUmVxdWVzdGVyQ29uZmlnIHtcbiAgLyoqIE9JREMgaXNzdWVyIFVSTCB0aGF0IEF6dXJlIEFEIHRydXN0cyAqL1xuICByZWFkb25seSBpc3N1ZXI6IHN0cmluZztcbiAgLyoqIFN1YmplY3QgKHN1YikgY2xhaW0gaWRlbnRpZnlpbmcgdGhlIHRydXN0ZWQgd29ya2xvYWQgKi9cbiAgcmVhZG9ubHkgc3ViOiBzdHJpbmc7XG4gIC8qKiBBdWRpZW5jZSAoYXVkKSB2YWx1ZXMgZm9yIHRva2VuIHZhbGlkYXRpb24gLSB1c2UgT2lkY0F1ZGllbmNlIGVudW0gb3IgY3VzdG9tIHN0cmluZ3MgKi9cbiAgcmVhZG9ubHkgYXVkOiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBBenVyZSBBRCBhcHBsaWNhdGlvbiB3aXRoIGZlZGVyYXRlZCBjcmVkZW50aWFscy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBenVyZUFkQXBwbGljYXRpb25GZWRlcmF0ZWRQcm9wcyB7XG4gIC8qKiBOYW1lIG9mIHRoZSBBenVyZSBBRCBhcHBsaWNhdGlvbiAqL1xuICByZWFkb25seSBhcHBOYW1lOiBzdHJpbmc7XG4gIC8qKiBSZWRpcmVjdCBVUklzIGZvciBPQXV0aCBjYWxsYmFja3MgKi9cbiAgcmVhZG9ubHkgcmVkaXJlY3RVcmlzOiBzdHJpbmdbXTtcbiAgLyoqIFN1cHBvcnRlZCBhY2NvdW50IHR5cGVzIGZvciBzaWduLWluIChkZWZhdWx0cyB0byBzaW5nbGUgdGVuYW50KSAqL1xuICByZWFkb25seSBzaWduSW5BdWRpZW5jZT86IGdyYXBoLlNpZ25JbkF1ZGllbmNlO1xuICAvKiogQXp1cmUgcmVzb3VyY2UgZ3JvdXAgbmFtZSAqL1xuICByZWFkb25seSByZXNvdXJjZUdyb3VwTmFtZTogc3RyaW5nO1xuICAvKiogQXp1cmUgQUQgZ3JvdXBzIHRvIGNyZWF0ZSAqL1xuICByZWFkb25seSBncm91cHM/OiBzdHJpbmdbXTtcbiAgLyoqIEF6dXJlIGZlZGVyYXRlZCBjcmVkZW50aWFscyBmb3IgZGVwbG95bWVudCAqL1xuICByZWFkb25seSBkZXBsb3ltZW50Q3JlZGVudGlhbHM6IGJpY2VwLkF6dXJlRmVkZXJhdGVkQ3JlZGVudGlhbHM7XG4gIC8qKiBFeHRlcm5hbCBpZGVudGl0eSB0cnVzdGVkIHRvIHJlcXVlc3QgdG9rZW5zICovXG4gIHJlYWRvbmx5IHRydXN0ZWRUb2tlblJlcXVlc3RlcjogVHJ1c3RlZFRva2VuUmVxdWVzdGVyQ29uZmlnO1xuICAvKiogRW5hYmxlIEFXUyBzZXNzaW9uIHRhZyBtYXBwaW5nIHZpYSBDdXN0b20gQ2xhaW1zIFByb3ZpZGVyIChyZXF1aXJlcyBncm91cHMgdG8gYmUgZGVmaW5lZCkgKi9cbiAgcmVhZG9ubHkgZW5hYmxlQXdzU2Vzc2lvblRhZ01hcHBpbmc/OiBib29sZWFuO1xufVxuXG5leHBvcnQgY2xhc3MgQXp1cmVBZEFwcGxpY2F0aW9uRmVkZXJhdGVkIGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgLyoqIEFsbCBkZXBsb3ltZW50IG91dHB1dHMgKi9cbiAgcHVibGljIHJlYWRvbmx5IG91dHB1dHM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIC8qKiBUcnVzdGVkIHRva2VuIHJlcXVlc3RlciBjb25maWd1cmF0aW9uICovXG4gIHB1YmxpYyByZWFkb25seSB0cnVzdGVkVG9rZW5SZXF1ZXN0ZXI6IFRydXN0ZWRUb2tlblJlcXVlc3RlckNvbmZpZztcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogQXp1cmVBZEFwcGxpY2F0aW9uRmVkZXJhdGVkUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgaWYgKHByb3BzLmVuYWJsZUF3c1Nlc3Npb25UYWdNYXBwaW5nICYmICghcHJvcHMuZ3JvdXBzIHx8IHByb3BzLmdyb3Vwcy5sZW5ndGggPT09IDApKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdlbmFibGVBd3NTZXNzaW9uVGFnTWFwcGluZyByZXF1aXJlcyBncm91cHMgdG8gYmUgZGVmaW5lZC4gJyArXG4gICAgICAgICdDdXN0b20gQ2xhaW1zIFByb3ZpZGVyIG1hcHMgQXp1cmUgQUQgZ3JvdXBzL3JvbGVzIHRvIEFXUyBzZXNzaW9uIHRhZ3MuJyxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdGhpcy50cnVzdGVkVG9rZW5SZXF1ZXN0ZXIgPSBwcm9wcy50cnVzdGVkVG9rZW5SZXF1ZXN0ZXI7XG5cbiAgICBjb25zdCBzdGFjayA9IGNvcmUuU3RhY2sub2YodGhpcyk7XG4gICAgY29uc3QgY2xvdWRmb3JtYXRpb25Bcm4gPSBgYXJuOmF3czpjbG91ZGZvcm1hdGlvbjoke3N0YWNrLnJlZ2lvbn06JHtzdGFjay5hY2NvdW50fTpzdGFjay8ke3N0YWNrLnN0YWNrTmFtZX1gO1xuXG4gICAgbGV0IGNsYWltc1Byb3ZpZGVyUmVzdWx0OiB7IGZ1bmN0aW9uQ29kZUFzc2V0OiBzM2Fzc2V0cy5Bc3NldCB9IHwgdW5kZWZpbmVkO1xuXG4gICAgY29uc3QgeyB0ZW1wbGF0ZSwgb3V0cHV0S2V5cyB9ID0gbmV3IGJpY2VwLkJpY2VwVGVtcGxhdGVCdWlsZGVyKClcbiAgICAgIC53aXRoTWV0YWRhdGEoe1xuICAgICAgICBuYW1lOiBwcm9wcy5hcHBOYW1lLFxuICAgICAgICBkZXNjcmlwdGlvbjogJ0F6dXJlIEFEIEFwcGxpY2F0aW9uIHdpdGggZmVkZXJhdGVkIGNyZWRlbnRpYWxzIGZvciBBV1MgaW50ZWdyYXRpb24nLFxuICAgICAgICBjbG91ZGZvcm1hdGlvbjoge1xuICAgICAgICAgIHN0YWNrQXJuOiBjbG91ZGZvcm1hdGlvbkFybixcbiAgICAgICAgfSxcbiAgICAgIH0pXG4gICAgICAud2l0aEV4dGVuc2lvbnMoYmljZXAuQmljZXBFeHRlbnNpb24uTUlDUk9TT0ZUX0dSQVBIX1NUQUJMRSlcbiAgICAgIC53aXRoUmVzb3VyY2VzKGJ1aWxkZXIgPT4ge1xuICAgICAgICBjbGFpbXNQcm92aWRlclJlc3VsdCA9IHRoaXMuYnVpbGRSZXNvdXJjZXMoYnVpbGRlciwgcHJvcHMpO1xuICAgICAgfSlcbiAgICAgIC53aXRoT3V0cHV0cyh7XG4gICAgICAgIGFwcElkOiAnQXBwbGljYXRpb24uYXBwSWQnLFxuICAgICAgICB0ZW5hbnRJZDogJ3RlbmFudCgpLnRlbmFudElkJyxcbiAgICAgICAgLi4uKHByb3BzLmVuYWJsZUF3c1Nlc3Npb25UYWdNYXBwaW5nID8ge1xuICAgICAgICAgIGZ1bmN0aW9uQXBwTmFtZTogJ0Z1bmN0aW9uYXBwLm5hbWUnLFxuICAgICAgICB9IDoge30pLFxuICAgICAgfSlcbiAgICAgIC5idWlsZCgpO1xuXG4gICAgY29uc3QgZGVwbG95bWVudCA9IG5ldyBiaWNlcC5CaWNlcERlcGxveW1lbnQodGhpcywgJ0RlcGxveW1lbnQnLCB7XG4gICAgICB0ZW1wbGF0ZTogdGVtcGxhdGUuc3ludGhlc2l6ZSgpLFxuICAgICAgcmVzb3VyY2VHcm91cE5hbWU6IHByb3BzLnJlc291cmNlR3JvdXBOYW1lLFxuICAgICAgYXp1cmVGZWRlcmF0ZWRDcmVkZW50aWFsczogcHJvcHMuZGVwbG95bWVudENyZWRlbnRpYWxzLFxuICAgICAgY2xvdWRmb3JtYXRpb25TdGFja0FybjogY2xvdWRmb3JtYXRpb25Bcm4sXG4gICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgIGRlcGxveW1lbnRTcE9iamVjdElkOiBwcm9wcy5kZXBsb3ltZW50Q3JlZGVudGlhbHMuc3BPYmplY3RJZCxcbiAgICAgIH0sXG4gICAgICBmdW5jdGlvbkNvZGU6IGNsYWltc1Byb3ZpZGVyUmVzdWx0ID8ge1xuICAgICAgICBzM0J1Y2tldE5hbWU6IGNsYWltc1Byb3ZpZGVyUmVzdWx0LmZ1bmN0aW9uQ29kZUFzc2V0LnMzQnVja2V0TmFtZSxcbiAgICAgICAgczNPYmplY3RLZXk6IGNsYWltc1Byb3ZpZGVyUmVzdWx0LmZ1bmN0aW9uQ29kZUFzc2V0LnMzT2JqZWN0S2V5LFxuICAgICAgfSA6IHVuZGVmaW5lZCxcbiAgICB9KTtcblxuICAgIGlmIChjbGFpbXNQcm92aWRlclJlc3VsdCkge1xuICAgICAgY2xhaW1zUHJvdmlkZXJSZXN1bHQuZnVuY3Rpb25Db2RlQXNzZXQuZ3JhbnRSZWFkKGRlcGxveW1lbnQubGFtYmRhUm9sZSk7XG4gICAgfVxuXG4gICAgdGhpcy5vdXRwdXRzID0ge307XG4gICAgb3V0cHV0S2V5cy5mb3JFYWNoKGtleSA9PiB7XG4gICAgICB0aGlzLm91dHB1dHNba2V5XSA9IGRlcGxveW1lbnQuZ2V0T3V0cHV0KGtleSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkUmVzb3VyY2VzKFxuICAgIHRlbXBsYXRlOiBiaWNlcC5CaWNlcFRlbXBsYXRlLFxuICAgIHByb3BzOiBBenVyZUFkQXBwbGljYXRpb25GZWRlcmF0ZWRQcm9wcyxcbiAgKTogeyBmdW5jdGlvbkNvZGVBc3NldDogczNhc3NldHMuQXNzZXQgfSB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgYXBwUm9sZXMgPSBwcm9wcy5ncm91cHM/Lm1hcCgoZ3JvdXBOYW1lKSA9PiB7XG4gICAgICBjb25zdCByb2xlSWQgPSBgZ3VpZCgnJHtncm91cE5hbWV9LXJvbGUnKWA7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBpZDogcm9sZUlkLFxuICAgICAgICBkaXNwbGF5TmFtZTogZ3JvdXBOYW1lLFxuICAgICAgICBkZXNjcmlwdGlvbjogYCR7Z3JvdXBOYW1lfSByb2xlIGZvciAke3Byb3BzLmFwcE5hbWV9YCxcbiAgICAgICAgdmFsdWU6IGdyb3VwTmFtZSxcbiAgICAgICAgYWxsb3dlZE1lbWJlclR5cGVzOiBbZ3JhcGguQWxsb3dlZE1lbWJlclR5cGUuVVNFUl0sXG4gICAgICAgIGlzRW5hYmxlZDogdHJ1ZSxcbiAgICAgIH07XG4gICAgfSkgfHwgW107XG5cbiAgICBjb25zdCBhcHBsaWNhdGlvbiA9IG5ldyBncmFwaC5BcHBsaWNhdGlvbih0ZW1wbGF0ZSwgJ2FwcGxpY2F0aW9uJywge1xuICAgICAgZGlzcGxheU5hbWU6IHByb3BzLmFwcE5hbWUsXG4gICAgICByZWRpcmVjdFVyaXM6IHByb3BzLnJlZGlyZWN0VXJpcyxcbiAgICAgIHNpZ25JbkF1ZGllbmNlOiBwcm9wcy5zaWduSW5BdWRpZW5jZSA/PyBncmFwaC5TaWduSW5BdWRpZW5jZS5BWlVSRV9BRF9NWV9PUkcsXG4gICAgICBhcHBSb2xlczogYXBwUm9sZXMsXG4gICAgICBvcHRpb25hbENsYWltczogYXBwUm9sZXMubGVuZ3RoID4gMCA/IHtcbiAgICAgICAgaWRUb2tlbjogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6ICdyb2xlcycsXG4gICAgICAgICAgICBlc3NlbnRpYWw6IGZhbHNlLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgLi4uKHByb3BzLmVuYWJsZUF3c1Nlc3Npb25UYWdNYXBwaW5nID8gW3tcbiAgICAgICAgICAgIG5hbWU6ICdodHRwczovL2F3cy5hbWF6b24uY29tL3RhZ3MvcHJpbmNpcGFsX3RhZ3MvUm9sZXMnLFxuICAgICAgICAgICAgZXNzZW50aWFsOiBmYWxzZSxcbiAgICAgICAgICAgIHNvdXJjZTogJ2N1c3RvbUNsYWltc1Byb3ZpZGVyJyxcbiAgICAgICAgICB9XSA6IFtdKSxcbiAgICAgICAgXSxcbiAgICAgIH0gOiB1bmRlZmluZWQsXG4gICAgfSk7XG5cbiAgICBjb25zdCBzZXJ2aWNlUHJpbmNpcGFsID0gbmV3IGdyYXBoLlNlcnZpY2VQcmluY2lwYWwodGVtcGxhdGUsICdzZXJ2aWNlUHJpbmNpcGFsJywge1xuICAgICAgYXBwbGljYXRpb246IGFwcGxpY2F0aW9uLFxuICAgICAgYXBwUm9sZUFzc2lnbm1lbnRSZXF1aXJlZDogZmFsc2UsXG4gICAgfSk7XG5cbiAgICBjb25zdCBmZWRlcmF0ZWRDcmVkZW50aWFsID0gbmV3IGdyYXBoLkZlZGVyYXRlZElkZW50aXR5Q3JlZGVudGlhbCh0ZW1wbGF0ZSwgJ2ZlZGVyYXRlZENyZWRlbnRpYWwnLCB7XG4gICAgICBhcHBsaWNhdGlvbjogYXBwbGljYXRpb24sXG4gICAgICBuYW1lOiBgJHtwcm9wcy5hcHBOYW1lfS1hd3MtY3JlZGVudGlhbGAsXG4gICAgICBpc3N1ZXI6IHByb3BzLnRydXN0ZWRUb2tlblJlcXVlc3Rlci5pc3N1ZXIsXG4gICAgICBzdWJqZWN0OiBwcm9wcy50cnVzdGVkVG9rZW5SZXF1ZXN0ZXIuc3ViLFxuICAgICAgYXVkaWVuY2VzOiBwcm9wcy50cnVzdGVkVG9rZW5SZXF1ZXN0ZXIuYXVkLFxuICAgICAgZGVzY3JpcHRpb246IGBGZWRlcmF0ZWQgY3JlZGVudGlhbCBmb3IgJHtwcm9wcy5hcHBOYW1lfSBBV1MgaW50ZWdyYXRpb25gLFxuICAgIH0pO1xuXG4gICAgaWYgKHByb3BzLmdyb3Vwcykge1xuICAgICAgcHJvcHMuZ3JvdXBzLmZvckVhY2goKGdyb3VwTmFtZSkgPT4ge1xuICAgICAgICBjb25zdCBzYW5pdGl6ZWROYW1lID0gdGhpcy5zYW5pdGl6ZUlkZW50aWZpZXIoZ3JvdXBOYW1lKTtcblxuICAgICAgICBjb25zdCBncm91cCA9IG5ldyBncmFwaC5Hcm91cCh0ZW1wbGF0ZSwgYGdyb3VwJHtzYW5pdGl6ZWROYW1lfWAsIHtcbiAgICAgICAgICBkaXNwbGF5TmFtZTogZ3JvdXBOYW1lLFxuICAgICAgICAgIGRlc2NyaXB0aW9uOiBgJHtncm91cE5hbWV9IGdyb3VwIGZvciAke3Byb3BzLmFwcE5hbWV9YCxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgYXBwUm9sZUlkID0gYGd1aWQoJyR7Z3JvdXBOYW1lfS1yb2xlJylgO1xuXG4gICAgICAgIGNvbnN0IGFzc2lnbm1lbnQgPSBuZXcgZ3JhcGguQXBwUm9sZUFzc2lnbm1lbnQodGVtcGxhdGUsIGBncm91cEFzc2lnbm1lbnQke3Nhbml0aXplZE5hbWV9YCwge1xuICAgICAgICAgIHJlc291cmNlU2VydmljZVByaW5jaXBhbDogc2VydmljZVByaW5jaXBhbCxcbiAgICAgICAgICBwcmluY2lwYWw6IGdyb3VwLFxuICAgICAgICAgIGFwcFJvbGVJZDogYXBwUm9sZUlkLFxuICAgICAgICB9KTtcblxuICAgICAgICBncm91cC5zeW50aGVzaXplKCk7XG4gICAgICAgIGFzc2lnbm1lbnQuc3ludGhlc2l6ZSgpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgYXBwbGljYXRpb24uc3ludGhlc2l6ZSgpO1xuICAgIHNlcnZpY2VQcmluY2lwYWwuc3ludGhlc2l6ZSgpO1xuICAgIGZlZGVyYXRlZENyZWRlbnRpYWwuc3ludGhlc2l6ZSgpO1xuXG4gICAgaWYgKCFwcm9wcy5lbmFibGVBd3NTZXNzaW9uVGFnTWFwcGluZykge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5idWlsZEN1c3RvbUNsYWltc1Byb3ZpZGVyKHRlbXBsYXRlLCBwcm9wcyk7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkQ3VzdG9tQ2xhaW1zUHJvdmlkZXIoXG4gICAgdGVtcGxhdGU6IGJpY2VwLkJpY2VwVGVtcGxhdGUsXG4gICAgcHJvcHM6IEF6dXJlQWRBcHBsaWNhdGlvbkZlZGVyYXRlZFByb3BzLFxuICApOiB7IGZ1bmN0aW9uQ29kZUFzc2V0OiBzM2Fzc2V0cy5Bc3NldCB9IHtcbiAgICB0ZW1wbGF0ZS5hZGRTdHJpbmdQYXJhbWV0ZXIoJ2xvY2F0aW9uJywgJ0F6dXJlIHJlZ2lvbiBmb3IgcmVzb3VyY2VzJywgXCInYXVzdHJhbGlhZWFzdCdcIik7XG4gICAgdGVtcGxhdGUuYWRkU3RyaW5nUGFyYW1ldGVyKCdkZXBsb3ltZW50U3BPYmplY3RJZCcsICdPYmplY3QgSUQgb2YgdGhlIFNQIGRlcGxveWluZyB0aGlzIHRlbXBsYXRlIChuZWVkcyBTdG9yYWdlIEJsb2IgRGF0YSBDb250cmlidXRvciknLCAnJyk7XG5cbiAgICBjb25zdCBuYW1lUHJlZml4ID0gcHJvcHMuYXBwTmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIGNvbnN0IHVuaXF1ZVN1ZmZpeCA9ICdzdWJzdHJpbmcodW5pcXVlU3RyaW5nKHJlc291cmNlR3JvdXAoKS5pZCksIDAsIDgpJztcblxuICAgIGNvbnN0IG1hbmFnZWRJZGVudGl0eSA9IG5ldyBhenVyZS5NYW5hZ2VkSWRlbnRpdHkodGVtcGxhdGUsICdtYW5hZ2VkSWRlbnRpdHknLCB7XG4gICAgICBuYW1lOiBgJyR7bmFtZVByZWZpeH0tY2xhaW1zLWlkZW50aXR5LVxcJHske3VuaXF1ZVN1ZmZpeH19J2AsXG4gICAgfSk7XG5cbiAgICBjb25zdCBzdG9yYWdlQWNjb3VudCA9IG5ldyBhenVyZS5TdG9yYWdlQWNjb3VudCh0ZW1wbGF0ZSwgJ3N0b3JhZ2VBY2NvdW50Jywge1xuICAgICAgbmFtZTogYCcke25hbWVQcmVmaXh9Y2xhaW1zXFwkeyR7dW5pcXVlU3VmZml4fX0nYCxcbiAgICB9KTtcblxuICAgIGNvbnN0IGFwcFNlcnZpY2VQbGFuID0gbmV3IGF6dXJlLkFwcFNlcnZpY2VQbGFuKHRlbXBsYXRlLCAnYXBwU2VydmljZVBsYW4nLCB7XG4gICAgICBuYW1lOiBgJyR7bmFtZVByZWZpeH0tY2xhaW1zLXBsYW4tXFwkeyR7dW5pcXVlU3VmZml4fX0nYCxcbiAgICB9KTtcblxuICAgIGNvbnN0IGxvZ0FuYWx5dGljc1dvcmtzcGFjZSA9IG5ldyBhenVyZS5Mb2dBbmFseXRpY3NXb3Jrc3BhY2UodGVtcGxhdGUsICdsb2dBbmFseXRpY3NXb3Jrc3BhY2UnLCB7XG4gICAgICBuYW1lOiBgJyR7bmFtZVByZWZpeH0tY2xhaW1zLWxvZ3MtXFwkeyR7dW5pcXVlU3VmZml4fX0nYCxcbiAgICB9KTtcblxuICAgIGNvbnN0IGFwcGxpY2F0aW9uSW5zaWdodHMgPSBuZXcgYXp1cmUuQXBwbGljYXRpb25JbnNpZ2h0cyh0ZW1wbGF0ZSwgJ2FwcGxpY2F0aW9uSW5zaWdodHMnLCB7XG4gICAgICBuYW1lOiBgJyR7bmFtZVByZWZpeH0tY2xhaW1zLWluc2lnaHRzLVxcJHske3VuaXF1ZVN1ZmZpeH19J2AsXG4gICAgICBsb2dBbmFseXRpY3NXb3Jrc3BhY2U6IGxvZ0FuYWx5dGljc1dvcmtzcGFjZSxcbiAgICB9KTtcblxuICAgIGNvbnN0IGZ1bmN0aW9uQXBwID0gbmV3IGF6dXJlLkZ1bmN0aW9uQXBwKHRlbXBsYXRlLCAnZnVuY3Rpb25BcHAnLCB7XG4gICAgICBuYW1lOiBgJyR7bmFtZVByZWZpeH0tY2xhaW1zLWZ1bmMtXFwkeyR7dW5pcXVlU3VmZml4fX0nYCxcbiAgICAgIG1hbmFnZWRJZGVudGl0eTogbWFuYWdlZElkZW50aXR5LFxuICAgICAgYXBwU2VydmljZVBsYW46IGFwcFNlcnZpY2VQbGFuLFxuICAgICAgc3RvcmFnZUFjY291bnQ6IHN0b3JhZ2VBY2NvdW50LFxuICAgICAgYXBwbGljYXRpb25JbnNpZ2h0czogYXBwbGljYXRpb25JbnNpZ2h0cyxcbiAgICB9KTtcblxuICAgIGNvbnN0IHJvbGVBc3NpZ25tZW50ID0gbmV3IGF6dXJlLlJvbGVBc3NpZ25tZW50KHRlbXBsYXRlLCAnbWFuYWdlZElkZW50aXR5Q29udHJpYnV0b3InLCB7XG4gICAgICBuYW1lOiBgZ3VpZCgnJHtwcm9wcy5hcHBOYW1lfS1taS1jb250cmlidXRvcicpYCxcbiAgICAgIHJvbGVEZWZpbml0aW9uSWQ6IGF6dXJlLkF6dXJlQnVpbHRJblJvbGUuV0VCU0lURV9DT05UUklCVVRPUixcbiAgICAgIHByaW5jaXBhbElkOiBtYW5hZ2VkSWRlbnRpdHksXG4gICAgfSk7XG5cbiAgICBjb25zdCBzcEJsb2JSb2xlQXNzaWdubWVudCA9IG5ldyBhenVyZS5Sb2xlQXNzaWdubWVudCh0ZW1wbGF0ZSwgJ2RlcGxveW1lbnRTcEJsb2JDb250cmlidXRvcicsIHtcbiAgICAgIG5hbWU6IGBndWlkKCcke3Byb3BzLmFwcE5hbWV9LXNwLWJsb2ItY29udHJpYnV0b3InKWAsXG4gICAgICByb2xlRGVmaW5pdGlvbklkOiBhenVyZS5BenVyZUJ1aWx0SW5Sb2xlLlNUT1JBR0VfQkxPQl9EQVRBX0NPTlRSSUJVVE9SLFxuICAgICAgcHJpbmNpcGFsSWQ6ICdkZXBsb3ltZW50U3BPYmplY3RJZCcsXG4gICAgfSk7XG4gICAgc3BCbG9iUm9sZUFzc2lnbm1lbnQuYWRkRGVwZW5kZW5jeShzdG9yYWdlQWNjb3VudCk7XG5cbiAgICBjb25zdCBmdW5jdGlvbkNvZGVBc3NldCA9IG5ldyBzM2Fzc2V0cy5Bc3NldCh0aGlzLCAnRnVuY3Rpb25Db2RlQXNzZXQnLCB7XG4gICAgICBwYXRoOiBwYXRoLmpvaW4oX19kaXJuYW1lLCAnLi4nLCAnYXp1cmUtZnVuY3Rpb25zJywgJ2N1c3RvbS1jbGFpbXMtcHJvdmlkZXInKSxcbiAgICAgIGJ1bmRsaW5nOiB7XG4gICAgICAgIGltYWdlOiBjb3JlLkRvY2tlckltYWdlLmZyb21SZWdpc3RyeSgncHl0aG9uOjMuMTItc2xpbScpLFxuICAgICAgICBjb21tYW5kOiBbXG4gICAgICAgICAgJ2Jhc2gnLCAnLWMnLFxuICAgICAgICAgICdwaXAgaW5zdGFsbCAtciAvYXNzZXQtaW5wdXQvcmVxdWlyZW1lbnRzLnR4dCAtdCAvYXNzZXQtb3V0cHV0LyAmJiBjcCAvYXNzZXQtaW5wdXQvZnVuY3Rpb25fYXBwLnB5IC9hc3NldC1pbnB1dC9ob3N0Lmpzb24gL2Fzc2V0LWlucHV0L3JlcXVpcmVtZW50cy50eHQgL2Fzc2V0LW91dHB1dC8nLFxuICAgICAgICBdLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIGNvbnN0IGZ1bmN0aW9uQXBwUmVnaXN0cmF0aW9uID0gbmV3IGdyYXBoLkFwcGxpY2F0aW9uKHRlbXBsYXRlLCAnZnVuY3Rpb25BcHBSZWdpc3RyYXRpb24nLCB7XG4gICAgICBkaXNwbGF5TmFtZTogYCR7bmFtZVByZWZpeH0tY2xhaW1zLWZ1bmMtYXBwYCxcbiAgICAgIHJlZGlyZWN0VXJpczogW10sXG4gICAgICByZXF1aXJlZFJlc291cmNlQWNjZXNzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICByZXNvdXJjZUFwcElkOiBncmFwaC5SZXNvdXJjZUFwcElkLk1JQ1JPU09GVF9HUkFQSCxcbiAgICAgICAgICByZXNvdXJjZUFjY2VzczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBpZDogZ3JhcGguTWljcm9zb2Z0R3JhcGhQZXJtaXNzaW9uLkNVU1RPTV9BVVRIX0VYVF9SRUNFSVZFX1BBWUxPQUQsXG4gICAgICAgICAgICAgIHR5cGU6IGdyYXBoLlBlcm1pc3Npb25UeXBlLlJPTEUsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0pO1xuXG4gICAgY29uc3QgZ3JhcGhTZXJ2aWNlUHJpbmNpcGFsID0gbmV3IGdyYXBoLkV4aXN0aW5nU2VydmljZVByaW5jaXBhbCh0ZW1wbGF0ZSwgJ2dyYXBoU2VydmljZVByaW5jaXBhbCcsIHtcbiAgICAgIGFwcElkOiAnMDAwMDAwMDMtMDAwMC0wMDAwLWMwMDAtMDAwMDAwMDAwMDAwJyxcbiAgICB9KTtcblxuICAgIGNvbnN0IG1pUG9saWN5UmVhZFBlcm1pc3Npb24gPSBuZXcgZ3JhcGguQXBwUm9sZUFzc2lnbm1lbnQodGVtcGxhdGUsICdtaVBvbGljeVJlYWRQZXJtaXNzaW9uJywge1xuICAgICAgcmVzb3VyY2VTZXJ2aWNlUHJpbmNpcGFsOiBncmFwaFNlcnZpY2VQcmluY2lwYWwsXG4gICAgICBwcmluY2lwYWw6IGAke21hbmFnZWRJZGVudGl0eS5wcmluY2lwYWxJZH1gLFxuICAgICAgYXBwUm9sZUlkOiAnXFwnMjQ2ZGQwZDUtNWJkMC00ZGVmLTk0MGItMDQyMTAzMGE1YjY4XFwnJyxcbiAgICB9KTtcblxuICAgIGNvbnN0IG1pUG9saWN5UGVybWlzc2lvbiA9IG5ldyBncmFwaC5BcHBSb2xlQXNzaWdubWVudCh0ZW1wbGF0ZSwgJ21pUG9saWN5UGVybWlzc2lvbicsIHtcbiAgICAgIHJlc291cmNlU2VydmljZVByaW5jaXBhbDogZ3JhcGhTZXJ2aWNlUHJpbmNpcGFsLFxuICAgICAgcHJpbmNpcGFsOiBgJHttYW5hZ2VkSWRlbnRpdHkucHJpbmNpcGFsSWR9YCxcbiAgICAgIGFwcFJvbGVJZDogJ1xcJ2JlNzQxNjRiLWNmZjEtNDkxYy04NzQxLWU2NzFjYjUzNmUxM1xcJycsXG4gICAgfSk7XG5cbiAgICBjb25zdCBtaUN1c3RvbUF1dGhFeHRQZXJtaXNzaW9uID0gbmV3IGdyYXBoLkFwcFJvbGVBc3NpZ25tZW50KHRlbXBsYXRlLCAnbWlDdXN0b21BdXRoRXh0UGVybWlzc2lvbicsIHtcbiAgICAgIHJlc291cmNlU2VydmljZVByaW5jaXBhbDogZ3JhcGhTZXJ2aWNlUHJpbmNpcGFsLFxuICAgICAgcHJpbmNpcGFsOiBgJHttYW5hZ2VkSWRlbnRpdHkucHJpbmNpcGFsSWR9YCxcbiAgICAgIGFwcFJvbGVJZDogJ1xcJ2MyNjY3OTY3LTcwNTAtNGU3ZS1iMDU5LTRjYmJiMzgxMWQwM1xcJycsXG4gICAgfSk7XG5cbiAgICBjb25zdCBtaUV2ZW50TGlzdGVuZXJQZXJtaXNzaW9uID0gbmV3IGdyYXBoLkFwcFJvbGVBc3NpZ25tZW50KHRlbXBsYXRlLCAnbWlFdmVudExpc3RlbmVyUGVybWlzc2lvbicsIHtcbiAgICAgIHJlc291cmNlU2VydmljZVByaW5jaXBhbDogZ3JhcGhTZXJ2aWNlUHJpbmNpcGFsLFxuICAgICAgcHJpbmNpcGFsOiBgJHttYW5hZ2VkSWRlbnRpdHkucHJpbmNpcGFsSWR9YCxcbiAgICAgIGFwcFJvbGVJZDogJ1xcJzBlZGY1ZTllLTRjZTgtNDY4YS04NDMyLWQwODYzMWQxOGM0M1xcJycsXG4gICAgfSk7XG5cbiAgICBjb25zdCBtaUFwcFJlYWRXcml0ZVBlcm1pc3Npb24gPSBuZXcgZ3JhcGguQXBwUm9sZUFzc2lnbm1lbnQodGVtcGxhdGUsICdtaUFwcFJlYWRXcml0ZVBlcm1pc3Npb24nLCB7XG4gICAgICByZXNvdXJjZVNlcnZpY2VQcmluY2lwYWw6IGdyYXBoU2VydmljZVByaW5jaXBhbCxcbiAgICAgIHByaW5jaXBhbDogYCR7bWFuYWdlZElkZW50aXR5LnByaW5jaXBhbElkfWAsXG4gICAgICBhcHBSb2xlSWQ6IGAnJHtncmFwaC5NaWNyb3NvZnRHcmFwaFBlcm1pc3Npb24uQVBQTElDQVRJT05fUkVBRF9XUklURV9BTEx9J2AsXG4gICAgfSk7XG5cbiAgICBjb25zdCB3aXJlQ3VzdG9tQ2xhaW1zRXh0ZW5zaW9uID0gbmV3IGF6dXJlLkRlcGxveW1lbnRTY3JpcHQodGVtcGxhdGUsICd3aXJlQ3VzdG9tQ2xhaW1zRXh0ZW5zaW9uJywge1xuICAgICAgbmFtZTogXCInd2lyZS1jdXN0b20tY2xhaW1zLWV4dGVuc2lvbidcIixcbiAgICAgIG1hbmFnZWRJZGVudGl0eTogbWFuYWdlZElkZW50aXR5LFxuICAgICAgc2NyaXB0Q29udGVudDogZnMucmVhZEZpbGVTeW5jKHBhdGguam9pbihfX2Rpcm5hbWUsICdzY3JpcHRzJywgJ3dpcmUtY3VzdG9tLWNsYWltcy1leHRlbnNpb24uc2gnKSwgJ3V0ZjgnKSxcbiAgICAgIGVudmlyb25tZW50VmFyaWFibGVzOiB7XG4gICAgICAgIEZVTkNUSU9OX0hPU1ROQU1FOiAnRnVuY3Rpb25hcHAucHJvcGVydGllcy5kZWZhdWx0SG9zdE5hbWUnLFxuICAgICAgICBGVU5DVElPTl9BUFBfSUQ6ICdGdW5jdGlvbmFwcHJlZ2lzdHJhdGlvbi5hcHBJZCcsXG4gICAgICAgIENMRl9BUFBfSUQ6ICdBcHBsaWNhdGlvbi5hcHBJZCcsXG4gICAgICAgIEVYVF9ESVNQTEFZX05BTUU6IGAnJHtuYW1lUHJlZml4fS1jbGFpbXMtcHJvdmlkZXInYCxcbiAgICAgIH0sXG4gICAgfSk7XG4gICAgd2lyZUN1c3RvbUNsYWltc0V4dGVuc2lvbi5hZGREZXBlbmRlbmN5KG1pUG9saWN5UmVhZFBlcm1pc3Npb24pO1xuICAgIHdpcmVDdXN0b21DbGFpbXNFeHRlbnNpb24uYWRkRGVwZW5kZW5jeShtaVBvbGljeVBlcm1pc3Npb24pO1xuICAgIHdpcmVDdXN0b21DbGFpbXNFeHRlbnNpb24uYWRkRGVwZW5kZW5jeShtaUN1c3RvbUF1dGhFeHRQZXJtaXNzaW9uKTtcbiAgICB3aXJlQ3VzdG9tQ2xhaW1zRXh0ZW5zaW9uLmFkZERlcGVuZGVuY3kobWlFdmVudExpc3RlbmVyUGVybWlzc2lvbik7XG4gICAgd2lyZUN1c3RvbUNsYWltc0V4dGVuc2lvbi5hZGREZXBlbmRlbmN5KG1pQXBwUmVhZFdyaXRlUGVybWlzc2lvbik7XG5cbiAgICBtYW5hZ2VkSWRlbnRpdHkuc3ludGhlc2l6ZSgpO1xuICAgIHN0b3JhZ2VBY2NvdW50LnN5bnRoZXNpemUoKTtcbiAgICBhcHBTZXJ2aWNlUGxhbi5zeW50aGVzaXplKCk7XG4gICAgbG9nQW5hbHl0aWNzV29ya3NwYWNlLnN5bnRoZXNpemUoKTtcbiAgICBhcHBsaWNhdGlvbkluc2lnaHRzLnN5bnRoZXNpemUoKTtcbiAgICBmdW5jdGlvbkFwcC5zeW50aGVzaXplKCk7XG4gICAgcm9sZUFzc2lnbm1lbnQuc3ludGhlc2l6ZSgpO1xuICAgIHNwQmxvYlJvbGVBc3NpZ25tZW50LnN5bnRoZXNpemUoKTtcbiAgICBmdW5jdGlvbkFwcFJlZ2lzdHJhdGlvbi5zeW50aGVzaXplKCk7XG4gICAgZ3JhcGhTZXJ2aWNlUHJpbmNpcGFsLnN5bnRoZXNpemUoKTtcbiAgICBtaVBvbGljeVJlYWRQZXJtaXNzaW9uLnN5bnRoZXNpemUoKTtcbiAgICBtaVBvbGljeVBlcm1pc3Npb24uc3ludGhlc2l6ZSgpO1xuICAgIG1pQ3VzdG9tQXV0aEV4dFBlcm1pc3Npb24uc3ludGhlc2l6ZSgpO1xuICAgIG1pRXZlbnRMaXN0ZW5lclBlcm1pc3Npb24uc3ludGhlc2l6ZSgpO1xuICAgIG1pQXBwUmVhZFdyaXRlUGVybWlzc2lvbi5zeW50aGVzaXplKCk7XG4gICAgd2lyZUN1c3RvbUNsYWltc0V4dGVuc2lvbi5zeW50aGVzaXplKCk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgZnVuY3Rpb25Db2RlQXNzZXQ6IGZ1bmN0aW9uQ29kZUFzc2V0LFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIHNhbml0aXplSWRlbnRpZmllcihuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBuYW1lXG4gICAgICAuc3BsaXQoL1stX1xcc10rLylcbiAgICAgIC5tYXAod29yZCA9PiB3b3JkLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgd29yZC5zbGljZSgxKS50b0xvd2VyQ2FzZSgpKVxuICAgICAgLmpvaW4oJycpXG4gICAgICAucmVwbGFjZSgvW15hLXpBLVowLTldL2csICcnKVxuICAgICAgLnJlcGxhY2UoL15bMC05XS8sICdfJCYnKTtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './azureAdApplicationFederated';
|
|
@@ -0,0 +1,18 @@
|
|
|
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 __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./azureAdApplicationFederated"), exports);
|
|
18
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYmljZXAvcGF0dGVybnMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLGdFQUE4QyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vYXp1cmVBZEFwcGxpY2F0aW9uRmVkZXJhdGVkJztcbiJdfQ==
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { BicepTemplate } from '../../deploy/template';
|
|
2
|
+
import { BicepConstruct } from '../graph/bicepConstruct';
|
|
3
|
+
export interface AppServicePlanProps {
|
|
4
|
+
readonly name: string;
|
|
5
|
+
}
|
|
6
|
+
export declare class AppServicePlan extends BicepConstruct {
|
|
7
|
+
private props;
|
|
8
|
+
readonly id: string;
|
|
9
|
+
constructor(template: BicepTemplate, resourceName: string, props: AppServicePlanProps);
|
|
10
|
+
synthesize(): void;
|
|
11
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.AppServicePlan = void 0;
|
|
4
|
+
const bicepConstruct_1 = require("../graph/bicepConstruct");
|
|
5
|
+
class AppServicePlan extends bicepConstruct_1.BicepConstruct {
|
|
6
|
+
constructor(template, resourceName, props) {
|
|
7
|
+
super(template, resourceName);
|
|
8
|
+
this.props = props;
|
|
9
|
+
const pascalName = this.toPascalCase(resourceName);
|
|
10
|
+
this.id = `${pascalName}.id`;
|
|
11
|
+
}
|
|
12
|
+
synthesize() {
|
|
13
|
+
this.template.addResource(this.resourceName, {
|
|
14
|
+
type: 'Microsoft.Web/serverfarms',
|
|
15
|
+
apiVersion: '2022-09-01',
|
|
16
|
+
name: this.props.name,
|
|
17
|
+
location: 'location',
|
|
18
|
+
sku: { name: 'Y1', tier: 'Dynamic' },
|
|
19
|
+
properties: { reserved: true },
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
exports.AppServicePlan = AppServicePlan;
|
|
24
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwU2VydmljZVBsYW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYmljZXAvcmVzb3VyY2VzL2F6dXJlL2FwcFNlcnZpY2VQbGFuLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUNBLDREQUF5RDtBQU16RCxNQUFhLGNBQWUsU0FBUSwrQkFBYztJQUdoRCxZQUFZLFFBQXVCLEVBQUUsWUFBb0IsRUFBVSxLQUEwQjtRQUMzRixLQUFLLENBQUMsUUFBUSxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBRG1DLFVBQUssR0FBTCxLQUFLLENBQXFCO1FBRTNGLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDbkQsSUFBSSxDQUFDLEVBQUUsR0FBRyxHQUFHLFVBQVUsS0FBSyxDQUFDO0lBQy9CLENBQUM7SUFFRCxVQUFVO1FBQ1IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRTtZQUMzQyxJQUFJLEVBQUUsMkJBQTJCO1lBQ2pDLFVBQVUsRUFBRSxZQUFZO1lBQ3hCLElBQUksRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUk7WUFDckIsUUFBUSxFQUFFLFVBQVU7WUFDcEIsR0FBRyxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFO1lBQ3BDLFVBQVUsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7U0FDL0IsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGO0FBbkJELHdDQW1CQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJpY2VwVGVtcGxhdGUgfSBmcm9tICcuLi8uLi9kZXBsb3kvdGVtcGxhdGUnO1xuaW1wb3J0IHsgQmljZXBDb25zdHJ1Y3QgfSBmcm9tICcuLi9ncmFwaC9iaWNlcENvbnN0cnVjdCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXBwU2VydmljZVBsYW5Qcm9wcyB7XG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcbn1cblxuZXhwb3J0IGNsYXNzIEFwcFNlcnZpY2VQbGFuIGV4dGVuZHMgQmljZXBDb25zdHJ1Y3Qge1xuICBwdWJsaWMgcmVhZG9ubHkgaWQ6IHN0cmluZztcblxuICBjb25zdHJ1Y3Rvcih0ZW1wbGF0ZTogQmljZXBUZW1wbGF0ZSwgcmVzb3VyY2VOYW1lOiBzdHJpbmcsIHByaXZhdGUgcHJvcHM6IEFwcFNlcnZpY2VQbGFuUHJvcHMpIHtcbiAgICBzdXBlcih0ZW1wbGF0ZSwgcmVzb3VyY2VOYW1lKTtcbiAgICBjb25zdCBwYXNjYWxOYW1lID0gdGhpcy50b1Bhc2NhbENhc2UocmVzb3VyY2VOYW1lKTtcbiAgICB0aGlzLmlkID0gYCR7cGFzY2FsTmFtZX0uaWRgO1xuICB9XG5cbiAgc3ludGhlc2l6ZSgpOiB2b2lkIHtcbiAgICB0aGlzLnRlbXBsYXRlLmFkZFJlc291cmNlKHRoaXMucmVzb3VyY2VOYW1lLCB7XG4gICAgICB0eXBlOiAnTWljcm9zb2Z0LldlYi9zZXJ2ZXJmYXJtcycsXG4gICAgICBhcGlWZXJzaW9uOiAnMjAyMi0wOS0wMScsXG4gICAgICBuYW1lOiB0aGlzLnByb3BzLm5hbWUsXG4gICAgICBsb2NhdGlvbjogJ2xvY2F0aW9uJyxcbiAgICAgIHNrdTogeyBuYW1lOiAnWTEnLCB0aWVyOiAnRHluYW1pYycgfSxcbiAgICAgIHByb3BlcnRpZXM6IHsgcmVzZXJ2ZWQ6IHRydWUgfSxcbiAgICB9KTtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { LogAnalyticsWorkspace } from './logAnalyticsWorkspace';
|
|
2
|
+
import { BicepTemplate } from '../../deploy/template';
|
|
3
|
+
import { BicepConstruct } from '../graph/bicepConstruct';
|
|
4
|
+
export interface ApplicationInsightsProps {
|
|
5
|
+
readonly name: string;
|
|
6
|
+
readonly logAnalyticsWorkspace: LogAnalyticsWorkspace;
|
|
7
|
+
}
|
|
8
|
+
export declare class ApplicationInsights extends BicepConstruct {
|
|
9
|
+
private props;
|
|
10
|
+
readonly connectionString: string;
|
|
11
|
+
constructor(template: BicepTemplate, resourceName: string, props: ApplicationInsightsProps);
|
|
12
|
+
synthesize(): void;
|
|
13
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ApplicationInsights = void 0;
|
|
4
|
+
const bicepConstruct_1 = require("../graph/bicepConstruct");
|
|
5
|
+
class ApplicationInsights extends bicepConstruct_1.BicepConstruct {
|
|
6
|
+
constructor(template, resourceName, props) {
|
|
7
|
+
super(template, resourceName);
|
|
8
|
+
this.props = props;
|
|
9
|
+
const pascalName = this.toPascalCase(resourceName);
|
|
10
|
+
this.connectionString = `${pascalName}.properties.ConnectionString`;
|
|
11
|
+
}
|
|
12
|
+
synthesize() {
|
|
13
|
+
this.template.addResource(this.resourceName, {
|
|
14
|
+
type: 'Microsoft.Insights/components',
|
|
15
|
+
apiVersion: '2020-02-02',
|
|
16
|
+
name: this.props.name,
|
|
17
|
+
location: 'location',
|
|
18
|
+
kind: 'web',
|
|
19
|
+
properties: {
|
|
20
|
+
Application_Type: 'web',
|
|
21
|
+
WorkspaceResourceId: `${this.props.logAnalyticsWorkspace.id}`,
|
|
22
|
+
},
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
exports.ApplicationInsights = ApplicationInsights;
|
|
27
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwbGljYXRpb25JbnNpZ2h0cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9iaWNlcC9yZXNvdXJjZXMvYXp1cmUvYXBwbGljYXRpb25JbnNpZ2h0cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFFQSw0REFBeUQ7QUFPekQsTUFBYSxtQkFBb0IsU0FBUSwrQkFBYztJQUdyRCxZQUFZLFFBQXVCLEVBQUUsWUFBb0IsRUFBVSxLQUErQjtRQUNoRyxLQUFLLENBQUMsUUFBUSxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBRG1DLFVBQUssR0FBTCxLQUFLLENBQTBCO1FBRWhHLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDbkQsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEdBQUcsVUFBVSw4QkFBOEIsQ0FBQztJQUN0RSxDQUFDO0lBRUQsVUFBVTtRQUNSLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDM0MsSUFBSSxFQUFFLCtCQUErQjtZQUNyQyxVQUFVLEVBQUUsWUFBWTtZQUN4QixJQUFJLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJO1lBQ3JCLFFBQVEsRUFBRSxVQUFVO1lBQ3BCLElBQUksRUFBRSxLQUFLO1lBQ1gsVUFBVSxFQUFFO2dCQUNWLGdCQUFnQixFQUFFLEtBQUs7Z0JBQ3ZCLG1CQUFtQixFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxFQUFFLEVBQUU7YUFDOUQ7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0Y7QUF0QkQsa0RBc0JDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTG9nQW5hbHl0aWNzV29ya3NwYWNlIH0gZnJvbSAnLi9sb2dBbmFseXRpY3NXb3Jrc3BhY2UnO1xuaW1wb3J0IHsgQmljZXBUZW1wbGF0ZSB9IGZyb20gJy4uLy4uL2RlcGxveS90ZW1wbGF0ZSc7XG5pbXBvcnQgeyBCaWNlcENvbnN0cnVjdCB9IGZyb20gJy4uL2dyYXBoL2JpY2VwQ29uc3RydWN0JztcblxuZXhwb3J0IGludGVyZmFjZSBBcHBsaWNhdGlvbkluc2lnaHRzUHJvcHMge1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGxvZ0FuYWx5dGljc1dvcmtzcGFjZTogTG9nQW5hbHl0aWNzV29ya3NwYWNlO1xufVxuXG5leHBvcnQgY2xhc3MgQXBwbGljYXRpb25JbnNpZ2h0cyBleHRlbmRzIEJpY2VwQ29uc3RydWN0IHtcbiAgcHVibGljIHJlYWRvbmx5IGNvbm5lY3Rpb25TdHJpbmc6IHN0cmluZztcblxuICBjb25zdHJ1Y3Rvcih0ZW1wbGF0ZTogQmljZXBUZW1wbGF0ZSwgcmVzb3VyY2VOYW1lOiBzdHJpbmcsIHByaXZhdGUgcHJvcHM6IEFwcGxpY2F0aW9uSW5zaWdodHNQcm9wcykge1xuICAgIHN1cGVyKHRlbXBsYXRlLCByZXNvdXJjZU5hbWUpO1xuICAgIGNvbnN0IHBhc2NhbE5hbWUgPSB0aGlzLnRvUGFzY2FsQ2FzZShyZXNvdXJjZU5hbWUpO1xuICAgIHRoaXMuY29ubmVjdGlvblN0cmluZyA9IGAke3Bhc2NhbE5hbWV9LnByb3BlcnRpZXMuQ29ubmVjdGlvblN0cmluZ2A7XG4gIH1cblxuICBzeW50aGVzaXplKCk6IHZvaWQge1xuICAgIHRoaXMudGVtcGxhdGUuYWRkUmVzb3VyY2UodGhpcy5yZXNvdXJjZU5hbWUsIHtcbiAgICAgIHR5cGU6ICdNaWNyb3NvZnQuSW5zaWdodHMvY29tcG9uZW50cycsXG4gICAgICBhcGlWZXJzaW9uOiAnMjAyMC0wMi0wMicsXG4gICAgICBuYW1lOiB0aGlzLnByb3BzLm5hbWUsXG4gICAgICBsb2NhdGlvbjogJ2xvY2F0aW9uJyxcbiAgICAgIGtpbmQ6ICd3ZWInLFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICBBcHBsaWNhdGlvbl9UeXBlOiAnd2ViJyxcbiAgICAgICAgV29ya3NwYWNlUmVzb3VyY2VJZDogYCR7dGhpcy5wcm9wcy5sb2dBbmFseXRpY3NXb3Jrc3BhY2UuaWR9YCxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { ManagedIdentity } from './managedIdentity';
|
|
2
|
+
import { BicepTemplate } from '../../deploy/template';
|
|
3
|
+
import { BicepConstruct } from '../graph/bicepConstruct';
|
|
4
|
+
export interface DeploymentScriptProps {
|
|
5
|
+
readonly name: string;
|
|
6
|
+
readonly managedIdentity: ManagedIdentity;
|
|
7
|
+
readonly scriptContent: string;
|
|
8
|
+
readonly forceUpdateTag?: string;
|
|
9
|
+
readonly environmentVariables?: Record<string, string>;
|
|
10
|
+
readonly secureEnvironmentVariables?: Record<string, string>;
|
|
11
|
+
}
|
|
12
|
+
export declare class DeploymentScript extends BicepConstruct {
|
|
13
|
+
readonly props: DeploymentScriptProps;
|
|
14
|
+
constructor(template: BicepTemplate, resourceName: string, props: DeploymentScriptProps);
|
|
15
|
+
synthesize(): void;
|
|
16
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DeploymentScript = void 0;
|
|
4
|
+
const bicepConstruct_1 = require("../graph/bicepConstruct");
|
|
5
|
+
class DeploymentScript extends bicepConstruct_1.BicepConstruct {
|
|
6
|
+
constructor(template, resourceName, props) {
|
|
7
|
+
super(template, resourceName);
|
|
8
|
+
this.props = props;
|
|
9
|
+
}
|
|
10
|
+
synthesize() {
|
|
11
|
+
const envVars = this.props.environmentVariables || {};
|
|
12
|
+
const secureEnvVars = this.props.secureEnvironmentVariables || {};
|
|
13
|
+
const envList = [
|
|
14
|
+
...Object.entries(envVars).map(([name, value]) => ({ name: `'${name}'`, value: value })),
|
|
15
|
+
...Object.entries(secureEnvVars).map(([name, value]) => ({ name: `'${name}'`, secureValue: value })),
|
|
16
|
+
];
|
|
17
|
+
this.template.addResource(this.resourceName, {
|
|
18
|
+
type: 'Microsoft.Resources/deploymentScripts',
|
|
19
|
+
apiVersion: '2023-08-01',
|
|
20
|
+
name: this.props.name,
|
|
21
|
+
location: 'location',
|
|
22
|
+
kind: 'AzureCLI',
|
|
23
|
+
identity: {
|
|
24
|
+
type: 'UserAssigned',
|
|
25
|
+
userAssignedIdentities: {
|
|
26
|
+
[`'\${${this.props.managedIdentity.id}}'`]: {},
|
|
27
|
+
},
|
|
28
|
+
},
|
|
29
|
+
properties: {
|
|
30
|
+
azCliVersion: "'2.67.0'",
|
|
31
|
+
retentionInterval: "'PT1H'",
|
|
32
|
+
timeout: "'PT10M'",
|
|
33
|
+
cleanupPreference: "'OnExpiration'",
|
|
34
|
+
forceUpdateTag: this.props.forceUpdateTag,
|
|
35
|
+
scriptContent: this.props.scriptContent,
|
|
36
|
+
environmentVariables: envList.length > 0 ? envList : undefined,
|
|
37
|
+
},
|
|
38
|
+
dependsOn: this.explicitDependencies.length > 0 ? this.explicitDependencies : undefined,
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
exports.DeploymentScript = DeploymentScript;
|
|
43
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVwbG95bWVudFNjcmlwdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9iaWNlcC9yZXNvdXJjZXMvYXp1cmUvZGVwbG95bWVudFNjcmlwdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFFQSw0REFBeUQ7QUFXekQsTUFBYSxnQkFBaUIsU0FBUSwrQkFBYztJQUNsRCxZQUFZLFFBQXVCLEVBQUUsWUFBb0IsRUFBa0IsS0FBNEI7UUFDckcsS0FBSyxDQUFDLFFBQVEsRUFBRSxZQUFZLENBQUMsQ0FBQztRQUQyQyxVQUFLLEdBQUwsS0FBSyxDQUF1QjtJQUV2RyxDQUFDO0lBRUQsVUFBVTtRQUNSLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsb0JBQW9CLElBQUksRUFBRSxDQUFDO1FBQ3RELE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsMEJBQTBCLElBQUksRUFBRSxDQUFDO1FBRWxFLE1BQU0sT0FBTyxHQUFHO1lBQ2QsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksSUFBSSxHQUFHLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7WUFDeEYsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksSUFBSSxHQUFHLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7U0FDckcsQ0FBQztRQUVGLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDM0MsSUFBSSxFQUFFLHVDQUF1QztZQUM3QyxVQUFVLEVBQUUsWUFBWTtZQUN4QixJQUFJLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJO1lBQ3JCLFFBQVEsRUFBRSxVQUFVO1lBQ3BCLElBQUksRUFBRSxVQUFVO1lBQ2hCLFFBQVEsRUFBRTtnQkFDUixJQUFJLEVBQUUsY0FBYztnQkFDcEIsc0JBQXNCLEVBQUU7b0JBQ3RCLENBQUMsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUU7aUJBQy9DO2FBQ0Y7WUFDRCxVQUFVLEVBQUU7Z0JBQ1YsWUFBWSxFQUFFLFVBQVU7Z0JBQ3hCLGlCQUFpQixFQUFFLFFBQVE7Z0JBQzNCLE9BQU8sRUFBRSxTQUFTO2dCQUNsQixpQkFBaUIsRUFBRSxnQkFBZ0I7Z0JBQ25DLGNBQWMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWM7Z0JBQ3pDLGFBQWEsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWE7Z0JBQ3ZDLG9CQUFvQixFQUFFLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFNBQVM7YUFDL0Q7WUFDRCxTQUFTLEVBQUUsSUFBSSxDQUFDLG9CQUFvQixDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsU0FBUztTQUN4RixDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0Y7QUF0Q0QsNENBc0NDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTWFuYWdlZElkZW50aXR5IH0gZnJvbSAnLi9tYW5hZ2VkSWRlbnRpdHknO1xuaW1wb3J0IHsgQmljZXBUZW1wbGF0ZSB9IGZyb20gJy4uLy4uL2RlcGxveS90ZW1wbGF0ZSc7XG5pbXBvcnQgeyBCaWNlcENvbnN0cnVjdCB9IGZyb20gJy4uL2dyYXBoL2JpY2VwQ29uc3RydWN0JztcblxuZXhwb3J0IGludGVyZmFjZSBEZXBsb3ltZW50U2NyaXB0UHJvcHMge1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG4gIHJlYWRvbmx5IG1hbmFnZWRJZGVudGl0eTogTWFuYWdlZElkZW50aXR5O1xuICByZWFkb25seSBzY3JpcHRDb250ZW50OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGZvcmNlVXBkYXRlVGFnPzogc3RyaW5nO1xuICByZWFkb25seSBlbnZpcm9ubWVudFZhcmlhYmxlcz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIHJlYWRvbmx5IHNlY3VyZUVudmlyb25tZW50VmFyaWFibGVzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbn1cblxuZXhwb3J0IGNsYXNzIERlcGxveW1lbnRTY3JpcHQgZXh0ZW5kcyBCaWNlcENvbnN0cnVjdCB7XG4gIGNvbnN0cnVjdG9yKHRlbXBsYXRlOiBCaWNlcFRlbXBsYXRlLCByZXNvdXJjZU5hbWU6IHN0cmluZywgcHVibGljIHJlYWRvbmx5IHByb3BzOiBEZXBsb3ltZW50U2NyaXB0UHJvcHMpIHtcbiAgICBzdXBlcih0ZW1wbGF0ZSwgcmVzb3VyY2VOYW1lKTtcbiAgfVxuXG4gIHN5bnRoZXNpemUoKTogdm9pZCB7XG4gICAgY29uc3QgZW52VmFycyA9IHRoaXMucHJvcHMuZW52aXJvbm1lbnRWYXJpYWJsZXMgfHwge307XG4gICAgY29uc3Qgc2VjdXJlRW52VmFycyA9IHRoaXMucHJvcHMuc2VjdXJlRW52aXJvbm1lbnRWYXJpYWJsZXMgfHwge307XG5cbiAgICBjb25zdCBlbnZMaXN0ID0gW1xuICAgICAgLi4uT2JqZWN0LmVudHJpZXMoZW52VmFycykubWFwKChbbmFtZSwgdmFsdWVdKSA9PiAoeyBuYW1lOiBgJyR7bmFtZX0nYCwgdmFsdWU6IHZhbHVlIH0pKSxcbiAgICAgIC4uLk9iamVjdC5lbnRyaWVzKHNlY3VyZUVudlZhcnMpLm1hcCgoW25hbWUsIHZhbHVlXSkgPT4gKHsgbmFtZTogYCcke25hbWV9J2AsIHNlY3VyZVZhbHVlOiB2YWx1ZSB9KSksXG4gICAgXTtcblxuICAgIHRoaXMudGVtcGxhdGUuYWRkUmVzb3VyY2UodGhpcy5yZXNvdXJjZU5hbWUsIHtcbiAgICAgIHR5cGU6ICdNaWNyb3NvZnQuUmVzb3VyY2VzL2RlcGxveW1lbnRTY3JpcHRzJyxcbiAgICAgIGFwaVZlcnNpb246ICcyMDIzLTA4LTAxJyxcbiAgICAgIG5hbWU6IHRoaXMucHJvcHMubmFtZSxcbiAgICAgIGxvY2F0aW9uOiAnbG9jYXRpb24nLFxuICAgICAga2luZDogJ0F6dXJlQ0xJJyxcbiAgICAgIGlkZW50aXR5OiB7XG4gICAgICAgIHR5cGU6ICdVc2VyQXNzaWduZWQnLFxuICAgICAgICB1c2VyQXNzaWduZWRJZGVudGl0aWVzOiB7XG4gICAgICAgICAgW2AnXFwkeyR7dGhpcy5wcm9wcy5tYW5hZ2VkSWRlbnRpdHkuaWR9fSdgXToge30sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICBhekNsaVZlcnNpb246IFwiJzIuNjcuMCdcIixcbiAgICAgICAgcmV0ZW50aW9uSW50ZXJ2YWw6IFwiJ1BUMUgnXCIsXG4gICAgICAgIHRpbWVvdXQ6IFwiJ1BUMTBNJ1wiLFxuICAgICAgICBjbGVhbnVwUHJlZmVyZW5jZTogXCInT25FeHBpcmF0aW9uJ1wiLFxuICAgICAgICBmb3JjZVVwZGF0ZVRhZzogdGhpcy5wcm9wcy5mb3JjZVVwZGF0ZVRhZyxcbiAgICAgICAgc2NyaXB0Q29udGVudDogdGhpcy5wcm9wcy5zY3JpcHRDb250ZW50LFxuICAgICAgICBlbnZpcm9ubWVudFZhcmlhYmxlczogZW52TGlzdC5sZW5ndGggPiAwID8gZW52TGlzdCA6IHVuZGVmaW5lZCxcbiAgICAgIH0sXG4gICAgICBkZXBlbmRzT246IHRoaXMuZXhwbGljaXREZXBlbmRlbmNpZXMubGVuZ3RoID4gMCA/IHRoaXMuZXhwbGljaXREZXBlbmRlbmNpZXMgOiB1bmRlZmluZWQsXG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { ApplicationInsights } from './applicationInsights';
|
|
2
|
+
import { AppServicePlan } from './appServicePlan';
|
|
3
|
+
import { ManagedIdentity } from './managedIdentity';
|
|
4
|
+
import { StorageAccount } from './storageAccount';
|
|
5
|
+
import { BicepTemplate } from '../../deploy/template';
|
|
6
|
+
import { BicepConstruct } from '../graph/bicepConstruct';
|
|
7
|
+
export interface FunctionAppProps {
|
|
8
|
+
readonly name: string;
|
|
9
|
+
readonly managedIdentity: ManagedIdentity;
|
|
10
|
+
readonly appServicePlan: AppServicePlan;
|
|
11
|
+
readonly storageAccount: StorageAccount;
|
|
12
|
+
readonly applicationInsights?: ApplicationInsights;
|
|
13
|
+
}
|
|
14
|
+
export declare class FunctionApp extends BicepConstruct {
|
|
15
|
+
private props;
|
|
16
|
+
readonly name: string;
|
|
17
|
+
readonly defaultHostName: string;
|
|
18
|
+
constructor(template: BicepTemplate, resourceName: string, props: FunctionAppProps);
|
|
19
|
+
synthesize(): void;
|
|
20
|
+
}
|