दस्तावेज़ पर जाएँ
Go

वेबहुक सत्यापित करें

किसी डिलीवरी की बात पर भरोसा करने से पहले उसका हस्ताक्षर जाँचें।

एक डिलीवरी सत्यापित करें

webhook.go
package main import (	"io"	"log"	"net/http"	"os" 	"github.com/bfzli/openemail-go") func main() {	secret := os.Getenv("OPENEMAIL_WEBHOOK_SECRET") 	http.HandleFunc("/webhooks/openemail", func(writer http.ResponseWriter, request *http.Request) {		payload, err := io.ReadAll(http.MaxBytesReader(writer, request.Body, 1<<20))		if err != nil {			writer.WriteHeader(http.StatusBadRequest) 			return		} 		event, err := openemail.VerifyWebhookSignature(payload, request.Header, secret)		if err != nil {			writer.WriteHeader(http.StatusBadRequest) 			return		} 		log.Println(event.String("type"), event.ID())		writer.WriteHeader(http.StatusNoContent)	}) 	log.Fatal(http.ListenAndServe(":8080", nil))}

openemail.VerifyWebhookSignature X-OpenEmail-Signature हेडर पढ़ता है, टाइमस्टैम्प और बॉडी पर उसके HMAC को स्थिर समय में जाँचता है, और इवेंट को openemail.Object के रूप में लौटाता है। सीक्रेट वही है जो client.Webhooks.Create ने लौटाया था।

कच्ची बॉडी ठीक वैसी ही पास करें जैसी वह आई थी। जिस बॉडी को पार्स करके दोबारा एनकोड किया गया हो वह अब अपने हस्ताक्षर से मेल नहीं खाती।

पुरानी डिलीवरी

tolerance.go
payload := []byte(`{"id":"evt_1","type":"email.received"}`)headers := http.Header{"X-OpenEmail-Signature": {"t=1767225600,v1=5f2d"}} _, err := openemail.VerifyWebhookSignature(payload, headers, "whsec_example", openemail.WithTolerance(time.Minute)) if errors.Is(err, openemail.ErrWebhookSignature) {	fmt.Println("refused:", err)}

पाँच मिनट से ज़्यादा पुरानी डिलीवरी अस्वीकार कर दी जाती है, इसलिए पकड़ा गया अनुरोध बाद में दोबारा नहीं चलाया जा सकता। openemail.WithTolerance इन पाँच मिनट को बदलता है, और शून्य किसी भी उम्र की डिलीवरी स्वीकार करता है।

  • गायब या गलत बनावट वाला हेडर, मेल न खाने वाला हस्ताक्षर और बहुत पुरानी डिलीवरी, ये सभी ऐसा एरर लौटाते हैं जो openemail.ErrWebhookSignature से मेल खाता है।
  • सीक्रेट बदलने के बाद एक डिलीवरी में एक से ज़्यादा हस्ताक्षर हो सकते हैं, और उनमें से किसी एक का मेल खाना काफ़ी है।
  • जल्दी से 2xx स्टेटस के साथ जवाब दें। जिस डिलीवरी को कोई और जवाब मिलता है उसे बाद में दोबारा आज़माया जाता है।