diff --git a/samtranslator/model/api/api_generator.py b/samtranslator/model/api/api_generator.py index dc1f5029b..92a360c11 100644 --- a/samtranslator/model/api/api_generator.py +++ b/samtranslator/model/api/api_generator.py @@ -750,8 +750,9 @@ def _add_cors(self) -> None: properties = CorsProperties(AllowOrigin=self.cors) # type: ignore[call-arg] elif isinstance(self.cors, dict): # Make sure keys in the dict are recognized - if not all(key in CorsProperties._fields for key in self.cors): - raise InvalidResourceException(self.logical_id, INVALID_ERROR) + for key in self.cors: + if key not in CorsProperties._fields: + raise InvalidResourceException(self.logical_id, f"Invalid key '{key}' for 'Cors' property.") properties = CorsProperties(**self.cors) diff --git a/samtranslator/model/api/http_api_generator.py b/samtranslator/model/api/http_api_generator.py index 6ce507137..1096fbd8f 100644 --- a/samtranslator/model/api/http_api_generator.py +++ b/samtranslator/model/api/http_api_generator.py @@ -187,8 +187,9 @@ def _add_cors(self) -> None: elif isinstance(self.cors_configuration, dict): # Make sure keys in the dict are recognized - if not all(key in CorsProperties._fields for key in self.cors_configuration): - raise InvalidResourceException(self.logical_id, "Invalid value for 'Cors' property.") + for key in self.cors_configuration: + if key not in CorsProperties._fields: + raise InvalidResourceException(self.logical_id, f"Invalid key '{key}' for 'Cors' property.") properties = CorsProperties(**self.cors_configuration) diff --git a/tests/translator/input/error_invalid_httpapi_cors_property.yaml b/tests/translator/input/error_invalid_httpapi_cors_property.yaml new file mode 100644 index 000000000..2dac2029c --- /dev/null +++ b/tests/translator/input/error_invalid_httpapi_cors_property.yaml @@ -0,0 +1,22 @@ +Resources: + HttpApi: + Type: AWS::Serverless::HttpApi + Properties: + StageName: stagename + DefaultRouteSettings: + ThrottlingBurstLimit: 200 + RouteSettings: + GET /path: + ThrottlingBurstLimit: 500 # overridden in HttpApi Event + StageVariables: + StageVar: Value + FailOnWarnings: true + CorsConfiguration: + AllowOrigin: + - https://example.com + AllowHeaders: + - x-apigateway-header + AllowMethods: + - GET + MaxAge: 600 + AllowCredentials: true diff --git a/tests/translator/output/error_invalid_cors_dict.json b/tests/translator/output/error_invalid_cors_dict.json index 5a5da8656..848328401 100644 --- a/tests/translator/output/error_invalid_cors_dict.json +++ b/tests/translator/output/error_invalid_cors_dict.json @@ -3,12 +3,12 @@ "Invalid Serverless Application Specification document. ", "Number of errors found: 1. ", "Resource with id [ServerlessRestApi] is invalid. ", - "Invalid value for 'Cors' property" + "Invalid key 'Foo' for 'Cors' property." ], - "errorMessage": "Invalid Serverless Application Specification document. Number of errors found: 1. Resource with id [ServerlessRestApi] is invalid. Invalid value for 'Cors' property", + "errorMessage": "Invalid Serverless Application Specification document. Number of errors found: 1. Resource with id [ServerlessRestApi] is invalid. Invalid key 'Foo' for 'Cors' property.", "errors": [ { - "errorMessage": "Resource with id [ServerlessRestApi] is invalid. Invalid value for 'Cors' property" + "errorMessage": "Resource with id [ServerlessRestApi] is invalid. Invalid key 'Foo' for 'Cors' property." } ] } diff --git a/tests/translator/output/error_invalid_httpapi_cors_property.json b/tests/translator/output/error_invalid_httpapi_cors_property.json new file mode 100644 index 000000000..afa1c220e --- /dev/null +++ b/tests/translator/output/error_invalid_httpapi_cors_property.json @@ -0,0 +1,14 @@ +{ + "_autoGeneratedBreakdownErrorMessage": [ + "Invalid Serverless Application Specification document. ", + "Number of errors found: 1. ", + "Resource with id [HttpApi] is invalid. ", + "Invalid key 'AllowOrigin' for 'Cors' property." + ], + "errorMessage": "Invalid Serverless Application Specification document. Number of errors found: 1. Resource with id [HttpApi] is invalid. Invalid key 'AllowOrigin' for 'Cors' property.", + "errors": [ + { + "errorMessage": "Resource with id [HttpApi] is invalid. Invalid key 'AllowOrigin' for 'Cors' property." + } + ] +}