From f4eb4b8d42b4e48dd0c30fb60036493ea5b5fcd1 Mon Sep 17 00:00:00 2001 From: David Hubbell Date: Fri, 10 Oct 2025 11:03:02 -0400 Subject: [PATCH 1/6] Update requirements.txt --- eventbridge-webhooks/2-github/src/requirements.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/eventbridge-webhooks/2-github/src/requirements.txt b/eventbridge-webhooks/2-github/src/requirements.txt index 1db657b6b..52762ff6c 100644 --- a/eventbridge-webhooks/2-github/src/requirements.txt +++ b/eventbridge-webhooks/2-github/src/requirements.txt @@ -1 +1,2 @@ -boto3 \ No newline at end of file +boto3 +aws-secretsmanager-caching From ac962f3db84853f4492c12be2eb0fa969832d67b Mon Sep 17 00:00:00 2001 From: David Hubbell Date: Fri, 10 Oct 2025 11:04:27 -0400 Subject: [PATCH 2/6] Update app.py Makes it compatible with Python 3.13. The cgi library had been deprecated prior to 3.13 and was no longer a viable import. --- eventbridge-webhooks/2-github/src/app.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/eventbridge-webhooks/2-github/src/app.py b/eventbridge-webhooks/2-github/src/app.py index 2b23e6a3c..05d131b53 100644 --- a/eventbridge-webhooks/2-github/src/app.py +++ b/eventbridge-webhooks/2-github/src/app.py @@ -6,7 +6,6 @@ import base64 import hmac import hashlib -from cgi import parse_header import boto3 import botocore import botocore.session @@ -160,7 +159,7 @@ def get_content_type(headers): if raw_content_type is None: return None - content_type, _ = parse_header(raw_content_type) + content_type = raw_content_type.split(';')[0].strip() return content_type From c0e5b1819c3bf63c36c76a5e69fa3b2da871a5a9 Mon Sep 17 00:00:00 2001 From: David Hubbell Date: Fri, 10 Oct 2025 11:10:29 -0400 Subject: [PATCH 3/6] Update app.py --- eventbridge-webhooks/1-stripe/src/app.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/eventbridge-webhooks/1-stripe/src/app.py b/eventbridge-webhooks/1-stripe/src/app.py index f88f2d062..17b09dc6d 100644 --- a/eventbridge-webhooks/1-stripe/src/app.py +++ b/eventbridge-webhooks/1-stripe/src/app.py @@ -6,7 +6,6 @@ import base64 import hmac import hashlib -from cgi import parse_header import boto3 import botocore import botocore.session @@ -200,7 +199,7 @@ def get_content_type(headers): if raw_content_type is None: return None - content_type, _ = parse_header(raw_content_type) + content_type = raw_content_type.split(';')[0].strip() return content_type From 77003e826018a35986f981c3cfef274bd2c0903e Mon Sep 17 00:00:00 2001 From: David Hubbell Date: Fri, 10 Oct 2025 11:10:51 -0400 Subject: [PATCH 4/6] Update requirements.txt --- eventbridge-webhooks/1-stripe/src/requirements.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/eventbridge-webhooks/1-stripe/src/requirements.txt b/eventbridge-webhooks/1-stripe/src/requirements.txt index 1db657b6b..52762ff6c 100644 --- a/eventbridge-webhooks/1-stripe/src/requirements.txt +++ b/eventbridge-webhooks/1-stripe/src/requirements.txt @@ -1 +1,2 @@ -boto3 \ No newline at end of file +boto3 +aws-secretsmanager-caching From bb9d67f509b348594f3b0996814b71e9ae80e021 Mon Sep 17 00:00:00 2001 From: David Hubbell Date: Fri, 10 Oct 2025 11:11:05 -0400 Subject: [PATCH 5/6] Update requirements.txt --- eventbridge-webhooks/3-twilio/src/requirements.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/eventbridge-webhooks/3-twilio/src/requirements.txt b/eventbridge-webhooks/3-twilio/src/requirements.txt index 1db657b6b..52762ff6c 100644 --- a/eventbridge-webhooks/3-twilio/src/requirements.txt +++ b/eventbridge-webhooks/3-twilio/src/requirements.txt @@ -1 +1,2 @@ -boto3 \ No newline at end of file +boto3 +aws-secretsmanager-caching From 75034e743320e1101c015230939dd71484c07434 Mon Sep 17 00:00:00 2001 From: David Hubbell Date: Fri, 10 Oct 2025 11:11:58 -0400 Subject: [PATCH 6/6] Update app.py --- eventbridge-webhooks/3-twilio/src/app.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/eventbridge-webhooks/3-twilio/src/app.py b/eventbridge-webhooks/3-twilio/src/app.py index ccb97e385..681c0547b 100644 --- a/eventbridge-webhooks/3-twilio/src/app.py +++ b/eventbridge-webhooks/3-twilio/src/app.py @@ -7,7 +7,6 @@ import hmac import hashlib from functools import reduce -from cgi import parse_header import boto3 import botocore import botocore.session @@ -18,7 +17,7 @@ cache_config = SecretCacheConfig() cache = SecretCache(config=cache_config, client=client) -github_webhook_secret_arn = os.environ.get('TWILIO_WEBHOOK_SECRET_ARN') +twilio_webhook_secret_arn = os.environ.get('TWILIO_WEBHOOK_SECRET_ARN') event_bus_name = os.environ.get('EVENT_BUS_NAME', 'default') event_bridge_client = boto3.client('events') @@ -114,7 +113,7 @@ def contains_valid_signature(payload_object, url, event_signature): """Check for the payload signature Twilio documentation: https://www.twilio.com/docs/usage/webhooks/webhooks-security#validating-signatures-from-twilio """ - secret = cache.get_secret_string(github_webhook_secret_arn) + secret = cache.get_secret_string(twilio_webhook_secret_arn) payload_bytes = get_payload_bytes( url=url, payload_object=payload_object @@ -166,7 +165,7 @@ def get_content_type(headers): if raw_content_type is None: return None - content_type, _ = parse_header(raw_content_type) + content_type = raw_content_type.split(';')[0].strip() return content_type