Skip to content

Commit 2dda52c

Browse files
Merge branch 'develop' into fix/logger-handler
2 parents ae1a112 + f526b84 commit 2dda52c

File tree

16 files changed

+201
-163
lines changed

16 files changed

+201
-163
lines changed

.github/workflows/ossf_scorecard.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ jobs:
2727
persist-credentials: false
2828

2929
- name: "Run analysis"
30-
uses: ossf/scorecard-action@0864cf19026789058feabb7e87baa5f140aac736 # v2.3.1
30+
uses: ossf/scorecard-action@dc50aa9510b46c811795eb24b2f1ba02a914e534 # v2.3.3
3131
with:
3232
results_file: results.sarif
3333
results_format: sarif

CHANGELOG.md

+51-36
Large diffs are not rendered by default.

aws_lambda_powertools/event_handler/api_gateway.py

+4
Original file line numberDiff line numberDiff line change
@@ -1753,6 +1753,7 @@ def enable_swagger(
17531753
security_schemes: Optional[Dict[str, "SecurityScheme"]] = None,
17541754
security: Optional[List[Dict[str, List[str]]]] = None,
17551755
oauth2_config: Optional["OAuth2Config"] = None,
1756+
persist_authorization: bool = False,
17561757
):
17571758
"""
17581759
Returns the OpenAPI schema as a JSON serializable dict
@@ -1793,6 +1794,8 @@ def enable_swagger(
17931794
A declaration of which security mechanisms are applied globally across the API.
17941795
oauth2_config: OAuth2Config, optional
17951796
The OAuth2 configuration for the Swagger UI.
1797+
persist_authorization: bool, optional
1798+
Whether to persist authorization data on browser close/refresh.
17961799
"""
17971800
from aws_lambda_powertools.event_handler.openapi.compat import model_json
17981801
from aws_lambda_powertools.event_handler.openapi.models import Server
@@ -1871,6 +1874,7 @@ def swagger_handler():
18711874
swagger_css,
18721875
swagger_base_url,
18731876
oauth2_config,
1877+
persist_authorization,
18741878
)
18751879

18761880
return Response(

aws_lambda_powertools/event_handler/openapi/swagger_ui/html.py

+4
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ def generate_swagger_html(
1010
swagger_css: str,
1111
swagger_base_url: str,
1212
oauth2_config: Optional[OAuth2Config],
13+
persist_authorization: bool = False,
1314
) -> str:
1415
"""
1516
Generate Swagger UI HTML page
@@ -28,6 +29,8 @@ def generate_swagger_html(
2829
The base URL for Swagger UI
2930
oauth2_config: OAuth2Config, optional
3031
The OAuth2 configuration.
32+
persist_authorization: bool, optional
33+
Whether to persist authorization data on browser close/refresh.
3134
"""
3235

3336
# If Swagger base URL is present, generate HTML content with linked CSS and JavaScript files
@@ -86,6 +89,7 @@ def generate_swagger_html(
8689
SwaggerUIBundle.plugins.DownloadUrl
8790
],
8891
withCredentials: true,
92+
persistAuthorization: {str(persist_authorization).lower()},
8993
oauth2RedirectUrl: baseUrl + "?format=oauth2-redirect",
9094
}}
9195

aws_lambda_powertools/shared/constants.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@
6262

6363
# JSON constants
6464
PRETTY_INDENT: int = 4
65-
COMPACT_INDENT = None
65+
COMPACT_INDENT: None = None
6666

6767
# Idempotency constants
6868
IDEMPOTENCY_DISABLED_ENV: str = "POWERTOOLS_IDEMPOTENCY_DISABLED"

aws_lambda_powertools/utilities/data_classes/api_gateway_proxy_event.py

+44-43
Original file line numberDiff line numberDiff line change
@@ -15,18 +15,18 @@
1515

1616
class APIGatewayEventAuthorizer(DictWrapper):
1717
@property
18-
def claims(self) -> Optional[Dict[str, Any]]:
19-
return self.get("claims")
18+
def claims(self) -> Dict[str, Any]:
19+
return self.get("claims") or {} # key might exist but can be `null`
2020

2121
@property
22-
def scopes(self) -> Optional[List[str]]:
23-
return self.get("scopes")
22+
def scopes(self) -> List[str]:
23+
return self.get("scopes") or [] # key might exist but can be `null`
2424

2525
@property
26-
def principal_id(self) -> Optional[str]:
26+
def principal_id(self) -> str:
2727
"""The principal user identification associated with the token sent by the client and returned from an
2828
API Gateway Lambda authorizer (formerly known as a custom authorizer)"""
29-
return self.get("principalId")
29+
return self.get("principalId") or "" # key might exist but can be `null`
3030

3131
@property
3232
def integration_latency(self) -> Optional[int]:
@@ -91,7 +91,8 @@ def route_key(self) -> Optional[str]:
9191

9292
@property
9393
def authorizer(self) -> APIGatewayEventAuthorizer:
94-
return APIGatewayEventAuthorizer(self._data["requestContext"]["authorizer"])
94+
authz_data = self._data.get("requestContext", {}).get("authorizer", {})
95+
return APIGatewayEventAuthorizer(authz_data)
9596

9697

9798
class APIGatewayProxyEvent(BaseProxyEvent):
@@ -112,11 +113,11 @@ def resource(self) -> str:
112113

113114
@property
114115
def multi_value_headers(self) -> Dict[str, List[str]]:
115-
return self.get("multiValueHeaders") or {}
116+
return self.get("multiValueHeaders") or {} # key might exist but can be `null`
116117

117118
@property
118119
def multi_value_query_string_parameters(self) -> Dict[str, List[str]]:
119-
return self.get("multiValueQueryStringParameters") or {}
120+
return self.get("multiValueQueryStringParameters") or {} # key might exist but can be `null`
120121

121122
@property
122123
def resolved_query_string_parameters(self) -> Dict[str, List[str]]:
@@ -154,72 +155,72 @@ def header_serializer(self) -> BaseHeadersSerializer:
154155

155156
class RequestContextV2AuthorizerIam(DictWrapper):
156157
@property
157-
def access_key(self) -> Optional[str]:
158+
def access_key(self) -> str:
158159
"""The IAM user access key associated with the request."""
159-
return self.get("accessKey")
160+
return self.get("accessKey") or "" # key might exist but can be `null`
160161

161162
@property
162-
def account_id(self) -> Optional[str]:
163+
def account_id(self) -> str:
163164
"""The AWS account ID associated with the request."""
164-
return self.get("accountId")
165+
return self.get("accountId") or "" # key might exist but can be `null`
165166

166167
@property
167-
def caller_id(self) -> Optional[str]:
168+
def caller_id(self) -> str:
168169
"""The principal identifier of the caller making the request."""
169-
return self.get("callerId")
170+
return self.get("callerId") or "" # key might exist but can be `null`
170171

171172
def _cognito_identity(self) -> Dict:
172-
return self.get("cognitoIdentity", {}) or {} # not available in FunctionURL
173+
return self.get("cognitoIdentity") or {} # not available in FunctionURL; key might exist but can be `null`
173174

174175
@property
175-
def cognito_amr(self) -> Optional[List[str]]:
176+
def cognito_amr(self) -> List[str]:
176177
"""This represents how the user was authenticated.
177178
AMR stands for Authentication Methods References as per the openid spec"""
178-
return self._cognito_identity().get("amr")
179+
return self._cognito_identity().get("amr", [])
179180

180181
@property
181-
def cognito_identity_id(self) -> Optional[str]:
182+
def cognito_identity_id(self) -> str:
182183
"""The Amazon Cognito identity ID of the caller making the request.
183184
Available only if the request was signed with Amazon Cognito credentials."""
184-
return self._cognito_identity().get("identityId")
185+
return self._cognito_identity().get("identityId", "")
185186

186187
@property
187-
def cognito_identity_pool_id(self) -> Optional[str]:
188+
def cognito_identity_pool_id(self) -> str:
188189
"""The Amazon Cognito identity pool ID of the caller making the request.
189190
Available only if the request was signed with Amazon Cognito credentials."""
190-
return self._cognito_identity().get("identityPoolId")
191+
return self._cognito_identity().get("identityPoolId") or "" # key might exist but can be `null`
191192

192193
@property
193-
def principal_org_id(self) -> Optional[str]:
194+
def principal_org_id(self) -> str:
194195
"""The AWS organization ID."""
195-
return self.get("principalOrgId")
196+
return self.get("principalOrgId") or "" # key might exist but can be `null`
196197

197198
@property
198-
def user_arn(self) -> Optional[str]:
199+
def user_arn(self) -> str:
199200
"""The Amazon Resource Name (ARN) of the effective user identified after authentication."""
200-
return self.get("userArn")
201+
return self.get("userArn") or "" # key might exist but can be `null`
201202

202203
@property
203-
def user_id(self) -> Optional[str]:
204+
def user_id(self) -> str:
204205
"""The IAM user ID of the effective user identified after authentication."""
205-
return self.get("userId")
206+
return self.get("userId") or "" # key might exist but can be `null`
206207

207208

208209
class RequestContextV2Authorizer(DictWrapper):
209210
@property
210-
def jwt_claim(self) -> Optional[Dict[str, Any]]:
211-
jwt = self.get("jwt") or {} # not available in FunctionURL
212-
return jwt.get("claims")
211+
def jwt_claim(self) -> Dict[str, Any]:
212+
jwt = self.get("jwt") or {} # not available in FunctionURL; key might exist but can be `null`
213+
return jwt.get("claims") or {} # key might exist but can be `null`
213214

214215
@property
215-
def jwt_scopes(self) -> Optional[List[str]]:
216-
jwt = self.get("jwt") or {} # not available in FunctionURL
217-
return jwt.get("scopes")
216+
def jwt_scopes(self) -> List[str]:
217+
jwt = self.get("jwt") or {} # not available in FunctionURL; key might exist but can be `null`
218+
return jwt.get("scopes", [])
218219

219220
@property
220-
def get_lambda(self) -> Optional[Dict[str, Any]]:
221+
def get_lambda(self) -> Dict[str, Any]:
221222
"""Lambda authorization context details"""
222-
return self.get("lambda")
223+
return self.get("lambda") or {} # key might exist but can be `null`
223224

224225
def get_context(self) -> Dict[str, Any]:
225226
"""Retrieve the authorization context details injected by a Lambda Authorizer.
@@ -238,20 +239,20 @@ def get_context(self) -> Dict[str, Any]:
238239
Dict[str, Any]
239240
A dictionary containing Lambda authorization context details.
240241
"""
241-
return self.get("lambda", {}) or {}
242+
return self.get_lambda
242243

243244
@property
244-
def iam(self) -> Optional[RequestContextV2AuthorizerIam]:
245+
def iam(self) -> RequestContextV2AuthorizerIam:
245246
"""IAM authorization details used for making the request."""
246-
iam = self.get("iam")
247-
return None if iam is None else RequestContextV2AuthorizerIam(iam)
247+
iam = self.get("iam") or {} # key might exist but can be `null`
248+
return RequestContextV2AuthorizerIam(iam)
248249

249250

250251
class RequestContextV2(BaseRequestContextV2):
251252
@property
252-
def authorizer(self) -> Optional[RequestContextV2Authorizer]:
253-
authorizer = self["requestContext"].get("authorizer")
254-
return None if authorizer is None else RequestContextV2Authorizer(authorizer)
253+
def authorizer(self) -> RequestContextV2Authorizer:
254+
ctx = self.get("requestContext") or {} # key might exist but can be `null`
255+
return RequestContextV2Authorizer(ctx.get("authorizer", {}))
255256

256257

257258
class APIGatewayProxyEventV2(BaseProxyEvent):

docs/core/event_handler/api_gateway.md

+7-6
Original file line numberDiff line numberDiff line change
@@ -524,12 +524,13 @@ Behind the scenes, the [data validation](#data-validation) feature auto-generate
524524

525525
There are some important **caveats** that you should know before enabling it:
526526

527-
| Caveat | Description |
528-
| ------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
529-
| Swagger UI is **publicly accessible by default** | When using `enable_swagger` method, you can [protect sensitive API endpoints by implementing a custom middleware](#customizing-swagger-ui) using your preferred authorization mechanism. |
530-
| **No micro-functions support** yet | Swagger UI is enabled on a per resolver instance which will limit its accuracy here. |
531-
| You need to expose a **new route** | You'll need to expose the following path to Lambda: `/swagger`; ignore if you're routing this path already. |
532-
| JS and CSS files are **embedded within Swagger HTML** | If you are not using an external CDN to serve Swagger UI assets, we embed JS and CSS directly into the HTML. To enhance performance, please consider enabling the `compress` option to minimize the size of HTTP requests. |
527+
| Caveat | Description |
528+
| ------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
529+
| Swagger UI is **publicly accessible by default** | When using `enable_swagger` method, you can [protect sensitive API endpoints by implementing a custom middleware](#customizing-swagger-ui) using your preferred authorization mechanism. |
530+
| **No micro-functions support** yet | Swagger UI is enabled on a per resolver instance which will limit its accuracy here. |
531+
| You need to expose a **new route** | You'll need to expose the following path to Lambda: `/swagger`; ignore if you're routing this path already. |
532+
| JS and CSS files are **embedded within Swagger HTML** | If you are not using an external CDN to serve Swagger UI assets, we embed JS and CSS directly into the HTML. To enhance performance, please consider enabling the `compress` option to minimize the size of HTTP requests. |
533+
| Authorization data is **lost** on browser close/refresh | Use `enable_swagger(persist_authorization=True)` to persist authorization data, like OAuath 2.0 access tokens. |
533534

534535
```python hl_lines="12-13" title="enabling_swagger.py"
535536
--8<-- "examples/event_handler_rest/src/enabling_swagger.py"

layer/scripts/layer-balancer/go.mod

+6-6
Original file line numberDiff line numberDiff line change
@@ -4,24 +4,24 @@ go 1.18
44

55
require (
66
github.com/aws/aws-sdk-go-v2 v1.26.1
7-
github.com/aws/aws-sdk-go-v2/config v1.27.11
8-
github.com/aws/aws-sdk-go-v2/service/lambda v1.54.0
7+
github.com/aws/aws-sdk-go-v2/config v1.27.13
8+
github.com/aws/aws-sdk-go-v2/service/lambda v1.54.1
99
golang.org/x/exp v0.0.0-20230321023759-10a507213a29
1010
golang.org/x/sync v0.7.0
1111
)
1212

1313
require (
1414
github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.2 // indirect
15-
github.com/aws/aws-sdk-go-v2/credentials v1.17.11 // indirect
15+
github.com/aws/aws-sdk-go-v2/credentials v1.17.13 // indirect
1616
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.1 // indirect
1717
github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.5 // indirect
1818
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.5 // indirect
1919
github.com/aws/aws-sdk-go-v2/internal/ini v1.8.0 // indirect
2020
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.2 // indirect
2121
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.7 // indirect
22-
github.com/aws/aws-sdk-go-v2/service/sso v1.20.5 // indirect
23-
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.23.4 // indirect
24-
github.com/aws/aws-sdk-go-v2/service/sts v1.28.6 // indirect
22+
github.com/aws/aws-sdk-go-v2/service/sso v1.20.6 // indirect
23+
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.24.0 // indirect
24+
github.com/aws/aws-sdk-go-v2/service/sts v1.28.7 // indirect
2525
github.com/aws/smithy-go v1.20.2 // indirect
2626
github.com/jmespath/go-jmespath v0.4.0 // indirect
2727
)

layer/scripts/layer-balancer/go.sum

+12-12
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,10 @@ github.com/aws/aws-sdk-go-v2 v1.26.1 h1:5554eUqIYVWpU0YmeeYZ0wU64H2VLBs8TlhRB2L+
22
github.com/aws/aws-sdk-go-v2 v1.26.1/go.mod h1:ffIFB97e2yNsv4aTSGkqtHnppsIJzw7G7BReUZ3jCXM=
33
github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.2 h1:x6xsQXGSmW6frevwDA+vi/wqhp1ct18mVXYN08/93to=
44
github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.2/go.mod h1:lPprDr1e6cJdyYeGXnRaJoP4Md+cDBvi2eOj00BlGmg=
5-
github.com/aws/aws-sdk-go-v2/config v1.27.11 h1:f47rANd2LQEYHda2ddSCKYId18/8BhSRM4BULGmfgNA=
6-
github.com/aws/aws-sdk-go-v2/config v1.27.11/go.mod h1:SMsV78RIOYdve1vf36z8LmnszlRWkwMQtomCAI0/mIE=
7-
github.com/aws/aws-sdk-go-v2/credentials v1.17.11 h1:YuIB1dJNf1Re822rriUOTxopaHHvIq0l/pX3fwO+Tzs=
8-
github.com/aws/aws-sdk-go-v2/credentials v1.17.11/go.mod h1:AQtFPsDH9bI2O+71anW6EKL+NcD7LG3dpKGMV4SShgo=
5+
github.com/aws/aws-sdk-go-v2/config v1.27.13 h1:WbKW8hOzrWoOA/+35S5okqO/2Ap8hkkFUzoW8Hzq24A=
6+
github.com/aws/aws-sdk-go-v2/config v1.27.13/go.mod h1:XLiyiTMnguytjRER7u5RIkhIqS8Nyz41SwAWb4xEjxs=
7+
github.com/aws/aws-sdk-go-v2/credentials v1.17.13 h1:XDCJDzk/u5cN7Aple7D/MiAhx1Rjo/0nueJ0La8mRuE=
8+
github.com/aws/aws-sdk-go-v2/credentials v1.17.13/go.mod h1:FMNcjQrmuBYvOTZDtOLCIu0esmxjF7RuA/89iSXWzQI=
99
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.1 h1:FVJ0r5XTHSmIHJV6KuDmdYhEpvlHpiSd38RQWhut5J4=
1010
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.1/go.mod h1:zusuAeqezXzAB24LGuzuekqMAEgWkVYukBec3kr3jUg=
1111
github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.5 h1:aw39xVGeRWlWx9EzGVnhOR4yOjQDHPQ6o6NmBlscyQg=
@@ -18,14 +18,14 @@ github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.2 h1:Ji0DY1x
1818
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.2/go.mod h1:5CsjAbs3NlGQyZNFACh+zztPDI7fU6eW9QsxjfnuBKg=
1919
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.7 h1:ogRAwT1/gxJBcSWDMZlgyFUM962F51A5CRhDLbxLdmo=
2020
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.7/go.mod h1:YCsIZhXfRPLFFCl5xxY+1T9RKzOKjCut+28JSX2DnAk=
21-
github.com/aws/aws-sdk-go-v2/service/lambda v1.54.0 h1:gazALVrZ7RIG6gJXut3c7NKtPgs9eQ8BFCA9uoliayk=
22-
github.com/aws/aws-sdk-go-v2/service/lambda v1.54.0/go.mod h1:rFAo+jemFgeqYzDbbCbz2QWQs1Fnk1meTUK9fWkED9M=
23-
github.com/aws/aws-sdk-go-v2/service/sso v1.20.5 h1:vN8hEbpRnL7+Hopy9dzmRle1xmDc7o8tmY0klsr175w=
24-
github.com/aws/aws-sdk-go-v2/service/sso v1.20.5/go.mod h1:qGzynb/msuZIE8I75DVRCUXw3o3ZyBmUvMwQ2t/BrGM=
25-
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.23.4 h1:Jux+gDDyi1Lruk+KHF91tK2KCuY61kzoCpvtvJJBtOE=
26-
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.23.4/go.mod h1:mUYPBhaF2lGiukDEjJX2BLRRKTmoUSitGDUgM4tRxak=
27-
github.com/aws/aws-sdk-go-v2/service/sts v1.28.6 h1:cwIxeBttqPN3qkaAjcEcsh8NYr8n2HZPkcKgPAi1phU=
28-
github.com/aws/aws-sdk-go-v2/service/sts v1.28.6/go.mod h1:FZf1/nKNEkHdGGJP/cI2MoIMquumuRK6ol3QQJNDxmw=
21+
github.com/aws/aws-sdk-go-v2/service/lambda v1.54.1 h1:RzdiCmlbYq/Qmay/CHQychZFu+p0C+e1OfmK49LHSqg=
22+
github.com/aws/aws-sdk-go-v2/service/lambda v1.54.1/go.mod h1:rFAo+jemFgeqYzDbbCbz2QWQs1Fnk1meTUK9fWkED9M=
23+
github.com/aws/aws-sdk-go-v2/service/sso v1.20.6 h1:o5cTaeunSpfXiLTIBx5xo2enQmiChtu1IBbzXnfU9Hs=
24+
github.com/aws/aws-sdk-go-v2/service/sso v1.20.6/go.mod h1:qGzynb/msuZIE8I75DVRCUXw3o3ZyBmUvMwQ2t/BrGM=
25+
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.24.0 h1:Qe0r0lVURDDeBQJ4yP+BOrJkvkiCo/3FH/t+wY11dmw=
26+
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.24.0/go.mod h1:mUYPBhaF2lGiukDEjJX2BLRRKTmoUSitGDUgM4tRxak=
27+
github.com/aws/aws-sdk-go-v2/service/sts v1.28.7 h1:et3Ta53gotFR4ERLXXHIHl/Uuk1qYpP5uU7cvNql8ns=
28+
github.com/aws/aws-sdk-go-v2/service/sts v1.28.7/go.mod h1:FZf1/nKNEkHdGGJP/cI2MoIMquumuRK6ol3QQJNDxmw=
2929
github.com/aws/smithy-go v1.20.2 h1:tbp628ireGtzcHDDmLT/6ADHidqnwgF57XOXZe6tp4Q=
3030
github.com/aws/smithy-go v1.20.2/go.mod h1:krry+ya/rV9RDcV/Q16kpu6ypI4K2czasz0NC3qS14E=
3131
github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8=

package-lock.json

+4-4
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)