Skip to content

Commit 5e2e61b

Browse files
authored
fix: Better Error Handling of Intrinsics (#1896)
* Better Error Handling of Intrinsics In HTTP API authorizers, we don't yet handle intrinsics, and an attempt to use them creates a crash when it tries to hash the input `dict`. This change starts by wrapping that use case properly so that a helpful error is raised until intrinsics are supported here. Note: Does not yet handle `!Sub`, looking at options for that. * Add "NoValue" Test Case Should not raise, making that explicit.
1 parent e29c42e commit 5e2e61b

File tree

2 files changed

+23
-1
lines changed

2 files changed

+23
-1
lines changed

samtranslator/model/api/http_api_generator.py

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
from samtranslator.open_api.open_api import OpenApiEditor
1515
from samtranslator.translator import logical_id_generator
1616
from samtranslator.model.tags.resource_tagging import get_tag_list
17-
from samtranslator.model.intrinsics import is_intrinsic
17+
from samtranslator.model.intrinsics import is_intrinsic, is_intrinsic_no_value
1818
from samtranslator.model.route53 import Route53RecordSetGroup
1919

2020
_CORS_WILDCARD = "*"
@@ -467,6 +467,15 @@ def _set_default_authorizer(self, open_api_editor, authorizers, default_authoriz
467467
if not default_authorizer:
468468
return
469469

470+
if is_intrinsic_no_value(default_authorizer):
471+
return
472+
473+
if is_intrinsic(default_authorizer):
474+
raise InvalidResourceException(
475+
self.logical_id,
476+
"Unable to set DefaultAuthorizer because intrinsic functions are not supported for this field.",
477+
)
478+
470479
if not authorizers.get(default_authorizer):
471480
raise InvalidResourceException(
472481
self.logical_id,

tests/model/api/test_http_api_generator.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,19 @@ def test_auth_missing_default_auth(self):
6969
with pytest.raises(InvalidResourceException):
7070
HttpApiGenerator(**self.kwargs)._construct_http_api()
7171

72+
def test_auth_intrinsic_default_auth(self):
73+
self.kwargs["auth"] = self.authorizers
74+
self.kwargs["auth"]["DefaultAuthorizer"] = {"Ref": "SomeValue"}
75+
self.kwargs["definition_body"] = OpenApiEditor.gen_skeleton()
76+
with pytest.raises(InvalidResourceException):
77+
HttpApiGenerator(**self.kwargs)._construct_http_api()
78+
79+
def test_auth_novalue_default_does_not_raise(self):
80+
self.kwargs["auth"] = self.authorizers
81+
self.kwargs["auth"]["DefaultAuthorizer"] = {"Ref": "AWS::NoValue"}
82+
self.kwargs["definition_body"] = OpenApiEditor.gen_skeleton()
83+
HttpApiGenerator(**self.kwargs)._construct_http_api()
84+
7285
def test_def_uri_invalid_dict(self):
7386
self.kwargs["auth"] = None
7487
self.kwargs["definition_body"] = None

0 commit comments

Comments
 (0)