|
10 | 10 | from datetime import datetime, timezone, timedelta
|
11 | 11 |
|
12 | 12 | from .._types import HeadersLike
|
| 13 | +from .._utils import get_required_header |
13 | 14 | from .._resource import SyncAPIResource, AsyncAPIResource
|
14 | 15 |
|
15 | 16 | __all__ = ["Webhooks", "AsyncWebhooks"]
|
@@ -51,13 +52,8 @@ def verify_signature(
|
51 | 52 | except Exception:
|
52 | 53 | raise ValueError("Bad secret")
|
53 | 54 |
|
54 |
| - msg_id = headers.get("finch-event-id") |
55 |
| - if not msg_id: |
56 |
| - raise ValueError("Could not find finch-event-id header") |
57 |
| - |
58 |
| - msg_timestamp = headers.get("finch-timestamp") |
59 |
| - if not msg_timestamp: |
60 |
| - raise ValueError("Could not find finch-timestamp header") |
| 55 | + msg_id = get_required_header(headers, "finch-event-id") |
| 56 | + msg_timestamp = get_required_header(headers, "finch-timestamp") |
61 | 57 |
|
62 | 58 | # validate the timestamp
|
63 | 59 | webhook_tolerance = timedelta(minutes=5)
|
@@ -88,9 +84,7 @@ def verify_signature(
|
88 | 84 | to_sign = f"{msg_id}.{timestamp_str}.{body}".encode()
|
89 | 85 | expected_signature = hmac.new(parsedSecret, to_sign, hashlib.sha256).digest()
|
90 | 86 |
|
91 |
| - msg_signature = headers.get("finch-signature") |
92 |
| - if not msg_signature: |
93 |
| - raise ValueError("Could not find finch-signature header") |
| 87 | + msg_signature = get_required_header(headers, "finch-signature") |
94 | 88 |
|
95 | 89 | # Signature header can contain multiple signatures delimited by spaces
|
96 | 90 | passed_sigs = msg_signature.split(" ")
|
@@ -151,13 +145,8 @@ def verify_signature(
|
151 | 145 | except Exception:
|
152 | 146 | raise ValueError("Bad secret")
|
153 | 147 |
|
154 |
| - msg_id = headers.get("finch-event-id") |
155 |
| - if not msg_id: |
156 |
| - raise ValueError("Could not find finch-event-id header") |
157 |
| - |
158 |
| - msg_timestamp = headers.get("finch-timestamp") |
159 |
| - if not msg_timestamp: |
160 |
| - raise ValueError("Could not find finch-timestamp header") |
| 148 | + msg_id = get_required_header(headers, "finch-event-id") |
| 149 | + msg_timestamp = get_required_header(headers, "finch-timestamp") |
161 | 150 |
|
162 | 151 | # validate the timestamp
|
163 | 152 | webhook_tolerance = timedelta(minutes=5)
|
@@ -188,9 +177,7 @@ def verify_signature(
|
188 | 177 | to_sign = f"{msg_id}.{timestamp_str}.{body}".encode()
|
189 | 178 | expected_signature = hmac.new(parsedSecret, to_sign, hashlib.sha256).digest()
|
190 | 179 |
|
191 |
| - msg_signature = headers.get("finch-signature") |
192 |
| - if not msg_signature: |
193 |
| - raise ValueError("Could not find finch-signature header") |
| 180 | + msg_signature = get_required_header(headers, "finch-signature") |
194 | 181 |
|
195 | 182 | # Signature header can contain multiple signatures delimited by spaces
|
196 | 183 | passed_sigs = msg_signature.split(" ")
|
|
0 commit comments