Go
Verifikoni webhook-ët
Kontrolloni nënshkrimin e një dorëzimi para se t'i besoni asaj që thotë.
Verifikoni një dorëzim
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
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ë.