diff --git a/samtranslator/model/api/http_api_generator.py b/samtranslator/model/api/http_api_generator.py index d9e07d5d67..e3efc07c78 100644 --- a/samtranslator/model/api/http_api_generator.py +++ b/samtranslator/model/api/http_api_generator.py @@ -14,7 +14,7 @@ from samtranslator.open_api.open_api import OpenApiEditor from samtranslator.translator import logical_id_generator from samtranslator.model.tags.resource_tagging import get_tag_list -from samtranslator.model.intrinsics import is_intrinsic +from samtranslator.model.intrinsics import is_intrinsic, is_intrinsic_no_value from samtranslator.model.route53 import Route53RecordSetGroup _CORS_WILDCARD = "*" @@ -467,6 +467,15 @@ def _set_default_authorizer(self, open_api_editor, authorizers, default_authoriz if not default_authorizer: return + if is_intrinsic_no_value(default_authorizer): + return + + if is_intrinsic(default_authorizer): + raise InvalidResourceException( + self.logical_id, + "Unable to set DefaultAuthorizer because intrinsic functions are not supported for this field.", + ) + if not authorizers.get(default_authorizer): raise InvalidResourceException( self.logical_id, diff --git a/tests/model/api/test_http_api_generator.py b/tests/model/api/test_http_api_generator.py index 404dd7f41b..2a9f4e97a1 100644 --- a/tests/model/api/test_http_api_generator.py +++ b/tests/model/api/test_http_api_generator.py @@ -69,6 +69,19 @@ def test_auth_missing_default_auth(self): with pytest.raises(InvalidResourceException): HttpApiGenerator(**self.kwargs)._construct_http_api() + def test_auth_intrinsic_default_auth(self): + self.kwargs["auth"] = self.authorizers + self.kwargs["auth"]["DefaultAuthorizer"] = {"Ref": "SomeValue"} + self.kwargs["definition_body"] = OpenApiEditor.gen_skeleton() + with pytest.raises(InvalidResourceException): + HttpApiGenerator(**self.kwargs)._construct_http_api() + + def test_auth_novalue_default_does_not_raise(self): + self.kwargs["auth"] = self.authorizers + self.kwargs["auth"]["DefaultAuthorizer"] = {"Ref": "AWS::NoValue"} + self.kwargs["definition_body"] = OpenApiEditor.gen_skeleton() + HttpApiGenerator(**self.kwargs)._construct_http_api() + def test_def_uri_invalid_dict(self): self.kwargs["auth"] = None self.kwargs["definition_body"] = None