aws-cdk-lib
Version:
Version 2 of the AWS Cloud Development Kit library
61 lines (52 loc) • 2.03 kB
text/typescript
import * as path from 'path';
import * as lambda from '../../../aws-lambda';
import { App, Stack } from '../../../core';
import { MockIntegration, PassthroughBehavior, RestApi, RequestAuthorizer, IdentitySource } from '../../lib';
// Against the RestApi endpoint from the stack output, run
// `curl -s -o /dev/null -w "%{http_code}" <url>` should return 401
// `curl -s -o /dev/null -w "%{http_code}" -H 'Authorization: deny' <url>?allow=yes` should return 403
// `curl -s -o /dev/null -w "%{http_code}" -H 'Authorization: allow' <url>?allow=yes` should return 200
const app = new App();
const stack = new Stack(app, 'RequestAuthorizerInteg');
const authorizerFn = new lambda.Function(stack, 'MyAuthorizerFunction', {
runtime: lambda.Runtime.NODEJS_14_X,
handler: 'index.handler',
code: lambda.AssetCode.fromAsset(path.join(__dirname, 'integ.request-authorizer.handler')),
});
const restapi = new RestApi(stack, 'MyRestApi', { cloudWatchRole: true });
const authorizer = new RequestAuthorizer(stack, 'MyAuthorizer', {
handler: authorizerFn,
identitySources: [IdentitySource.header('Authorization'), IdentitySource.queryString('allow')],
});
const secondAuthorizer = new RequestAuthorizer(stack, 'MySecondAuthorizer', {
handler: authorizerFn,
identitySources: [IdentitySource.header('Authorization'), IdentitySource.queryString('allow')],
});
restapi.root.addMethod('ANY', new MockIntegration({
integrationResponses: [
{ statusCode: '200' },
],
passthroughBehavior: PassthroughBehavior.NEVER,
requestTemplates: {
'application/json': '{ "statusCode": 200 }',
},
}), {
methodResponses: [
{ statusCode: '200' },
],
authorizer,
});
restapi.root.resourceForPath('auth').addMethod('ANY', new MockIntegration({
integrationResponses: [
{ statusCode: '200' },
],
passthroughBehavior: PassthroughBehavior.NEVER,
requestTemplates: {
'application/json': '{ "statusCode": 200 }',
},
}), {
methodResponses: [
{ statusCode: '200' },
],
authorizer: secondAuthorizer,
});