Skip to content

Commit

Permalink
refactor(apigateway): Enclose getaway response parameters within sing…
Browse files Browse the repository at this point in the history
…le quotes (#22637)

Hi team,

Here is a follow up to #22633

Please let me know if this makes sense.
Thanks

----

### All Submissions:

* [ ] Have you followed the guidelines in our [Contributing guide?](https://github.com/aws/aws-cdk/blob/main/CONTRIBUTING.md)

### Adding new Unconventional Dependencies:

* [ ] This PR adds new unconventional dependencies following the process described [here](https://github.com/aws/aws-cdk/blob/main/CONTRIBUTING.md/#adding-new-unconventional-dependencies)

### New Features

* [ ] Have you added the new feature to an [integration test](https://github.com/aws/aws-cdk/blob/main/INTEGRATION_TESTS.md)?
	* [ ] Did you use `yarn integ` to deploy the infrastructure and generate the snapshot (i.e. `yarn integ` without `--dry-run`)?

*By submitting this pull request, I confirm that my contribution is made under the terms of the Apache-2.0 license*
  • Loading branch information
yuyokk committed Oct 25, 2022
1 parent b33b9b0 commit fc9e142
Show file tree
Hide file tree
Showing 4 changed files with 24 additions and 6 deletions.
5 changes: 2 additions & 3 deletions packages/@aws-cdk/aws-apigateway/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -1378,9 +1378,8 @@ api.addGatewayResponse('test-response', {
type: apigateway.ResponseType.ACCESS_DENIED,
statusCode: '500',
responseHeaders: {
// Note that values must be enclosed within a pair of single quotes
'Access-Control-Allow-Origin': "'test.com'",
'test-key': "'test-value'",
'Access-Control-Allow-Origin': 'test.com',
'test-key': 'test-value',
},
templates: {
'application/json': '{ "message": $context.error.messageString, "statusCode": "488", "type": "$context.error.responseType" }'
Expand Down
3 changes: 2 additions & 1 deletion packages/@aws-cdk/aws-apigateway/lib/gateway-response.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import { IResource, Resource } from '@aws-cdk/core';
import { Construct } from 'constructs';
import { CfnGatewayResponse, CfnGatewayResponseProps } from './apigateway.generated';
import { IRestApi } from './restapi';
import { normalizeResponseParameterValue } from './util';

/**
* Represents gateway response resource.
Expand Down Expand Up @@ -88,7 +89,7 @@ export class GatewayResponse extends Resource implements IGatewayResponse {

const responseParameters: { [key: string]: string } = {};
for (const [header, value] of Object.entries(responseHeaders)) {
responseParameters[`gatewayresponse.header.${header}`] = value;
responseParameters[`gatewayresponse.header.${header}`] = normalizeResponseParameterValue(value) ;
}
return responseParameters;
}
Expand Down
16 changes: 16 additions & 0 deletions packages/@aws-cdk/aws-apigateway/lib/util.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,22 @@ export function validateHttpMethod(method: string, messagePrefix: string = '') {
}
}

/**
* Response header values need to be enclosed in single quotes.
*/
export function normalizeResponseParameterValue(value: string) {
if (!value) {
return value;
}

// check if the value is already enclosed in single quotes
if (value.startsWith("'") && value.endsWith("'")) {
return value;
}

return `'${value}'`;
}

export function parseMethodOptionsPath(originalPath: string): { resourcePath: string, httpMethod: string } {
if (!originalPath.startsWith('/')) {
throw new Error(`Method options path must start with '/': ${originalPath}`);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@ describe('gateway response', () => {
responseHeaders: {
'Access-Control-Allow-Origin': 'test.com',
'test-key': 'test-value',
'another-test': "'test-value-enclosed-within-single-quotes'",
},
});

Expand All @@ -54,8 +55,9 @@ describe('gateway response', () => {
RestApiId: stack.resolve(api.restApiId),
StatusCode: '500',
ResponseParameters: {
'gatewayresponse.header.Access-Control-Allow-Origin': 'test.com',
'gatewayresponse.header.test-key': 'test-value',
'gatewayresponse.header.Access-Control-Allow-Origin': "'test.com'",
'gatewayresponse.header.test-key': "'test-value'",
'gatewayresponse.header.another-test': "'test-value-enclosed-within-single-quotes'",
},
ResponseTemplates: Match.absent(),
});
Expand Down

0 comments on commit fc9e142

Please sign in to comment.