Kalo te dokumentacioni
Go

Verifikoni webhook-ët

Kontrolloni nënshkrimin e një dorëzimi para se t'i besoni asaj që thotë.

Verifikoni një dorëzim

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 lexon kokën X-OpenEmail-Signature, kontrollon HMAC-un e saj mbi vulën kohore dhe trupin në kohë konstante, dhe e kthen ngjarjen si një openemail.Object. Sekreti është ai që ktheu client.Webhooks.Create.

Jepni trupin e papërpunuar, pikërisht siç mbërriti. Një trup që është analizuar dhe koduar sërish nuk përputhet më me nënshkrimin e vet.

Dorëzime të vjetra

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)}

Një dorëzim më i vjetër se pesë minuta refuzohet, kështu që një kërkesë e kapur nuk mund të riluhet më vonë. openemail.WithTolerance i ndryshon pesë minutat, dhe zeroja pranon një dorëzim të çdo moshe.

  • Një kokë që mungon ose është e keqformuar, një nënshkrim që nuk përputhet dhe një dorëzim tepër i vjetër kthejnë të gjitha një gabim që përputhet me openemail.ErrWebhookSignature.
  • Pasi një sekret rrotullohet, një dorëzim mund të mbajë më shumë se një nënshkrim, dhe mjafton që njëri të përputhet.
  • Përgjigjuni shpejt me një status 2xx. Një dorëzim që merr çdo përgjigje tjetër riprovohet më vonë.