66from django .utils .dateparse import parse_datetime
77
88from anymail .exceptions import (
9+ AnymailConfigurationError ,
910 AnymailImproperlyInstalled ,
1011 AnymailWebhookValidationFailure ,
1112 _LazyError ,
@@ -50,9 +51,12 @@ class MailPaceTrackingWebhookView(MailPaceBaseWebhookView):
5051 webhook_key = None
5152
5253 def __init__ (self , ** kwargs ):
53- self .webhook_key = get_anymail_setting (
54- "webhook_key" , esp_name = self .esp_name , kwargs = kwargs , allow_bare = True
55- )
54+ try :
55+ get_anymail_setting (
56+ "webhook_key" , esp_name = self .esp_name , kwargs = kwargs , allow_bare = True
57+ )
58+ except AnymailConfigurationError :
59+ self .webhook_key = None
5660
5761 super ().__init__ (** kwargs )
5862
@@ -71,26 +75,29 @@ def __init__(self, **kwargs):
7175 # MailPace doesn't send a signature for inbound webhooks, yet
7276 # When/if MailPace does this, move this to the parent class
7377 def validate_request (self , request ):
74- try :
75- signature_base64 = request .headers ["X-MailPace-Signature" ]
76- signature = base64 .b64decode (signature_base64 )
77- except (KeyError , binascii .Error ):
78- raise AnymailWebhookValidationFailure (
79- "MailPace webhook called with invalid or missing signature"
80- )
81-
82- verify_key_base64 = self .webhook_key
83-
84- verify_key = VerifyKey (base64 .b64decode (verify_key_base64 ))
85-
86- message = request .body
87-
88- try :
89- verify_key .verify (message , signature )
90- except (CryptoError , ValueError ):
91- raise AnymailWebhookValidationFailure (
92- "MailPace webhook called with incorrect signature"
93- )
78+ if self .webhook_key is None :
79+ return True
80+ else :
81+ try :
82+ signature_base64 = request .headers ["X-MailPace-Signature" ]
83+ signature = base64 .b64decode (signature_base64 )
84+ except (KeyError , binascii .Error ):
85+ raise AnymailWebhookValidationFailure (
86+ "MailPace webhook called with invalid or missing signature"
87+ )
88+
89+ verify_key_base64 = self .webhook_key
90+
91+ verify_key = VerifyKey (base64 .b64decode (verify_key_base64 ))
92+
93+ message = request .body
94+
95+ try :
96+ verify_key .verify (message , signature )
97+ except (CryptoError , ValueError ):
98+ raise AnymailWebhookValidationFailure (
99+ "MailPace webhook called with incorrect signature"
100+ )
94101
95102 def esp_to_anymail_event (self , esp_event ):
96103 event_type = self .event_record_types .get (esp_event ["event" ], EventType .UNKNOWN )
0 commit comments