github.com/mailgun/mailgun-go/v3@v3.6.4/mock_webhooks.go (about)

     1  package mailgun
     2  
     3  import (
     4  	"net/http"
     5  
     6  	"github.com/go-chi/chi"
     7  )
     8  
     9  func (ms *MockServer) addWebhookRoutes(r chi.Router) {
    10  	r.Route("/domains/{domain}/webhooks", func(r chi.Router) {
    11  		r.Get("/", ms.listWebHooks)
    12  		r.Post("/", ms.postWebHook)
    13  		r.Get("/{webhook}", ms.getWebHook)
    14  		r.Put("/{webhook}", ms.putWebHook)
    15  		r.Delete("/{webhook}", ms.deleteWebHook)
    16  	})
    17  	ms.webhooks = WebHooksListResponse{
    18  		Webhooks: map[string]UrlOrUrls{
    19  			"new-webhook": {
    20  				Urls: []string{"http://example.com/new"},
    21  			},
    22  			"legacy-webhook": {
    23  				Url: "http://example.com/legacy",
    24  			},
    25  		},
    26  	}
    27  }
    28  
    29  func (ms *MockServer) listWebHooks(w http.ResponseWriter, _ *http.Request) {
    30  	toJSON(w, ms.webhooks)
    31  }
    32  
    33  func (ms *MockServer) getWebHook(w http.ResponseWriter, r *http.Request) {
    34  	resp := WebHookResponse{
    35  		Webhook: UrlOrUrls{
    36  			Urls: ms.webhooks.Webhooks[chi.URLParam(r, "webhook")].Urls,
    37  		},
    38  	}
    39  	toJSON(w, resp)
    40  }
    41  
    42  func (ms *MockServer) postWebHook(w http.ResponseWriter, r *http.Request) {
    43  	if err := r.ParseForm(); err != nil {
    44  		w.WriteHeader(http.StatusBadRequest)
    45  		toJSON(w, okResp{Message: err.Error()})
    46  		return
    47  	}
    48  
    49  	var urls []string
    50  	for _, url := range r.Form["url"] {
    51  		urls = append(urls, url)
    52  	}
    53  	ms.webhooks.Webhooks[r.FormValue("id")] = UrlOrUrls{Urls: urls}
    54  
    55  	toJSON(w, okResp{Message: "success"})
    56  }
    57  
    58  func (ms *MockServer) putWebHook(w http.ResponseWriter, r *http.Request) {
    59  	if err := r.ParseForm(); err != nil {
    60  		w.WriteHeader(http.StatusBadRequest)
    61  		toJSON(w, okResp{Message: err.Error()})
    62  		return
    63  	}
    64  
    65  	var urls []string
    66  	for _, url := range r.Form["url"] {
    67  		urls = append(urls, url)
    68  	}
    69  	ms.webhooks.Webhooks[chi.URLParam(r, "webhook")] = UrlOrUrls{Urls: urls}
    70  
    71  	toJSON(w, okResp{Message: "success"})
    72  }
    73  
    74  func (ms *MockServer) deleteWebHook(w http.ResponseWriter, r *http.Request) {
    75  	_, ok := ms.webhooks.Webhooks[chi.URLParam(r, "webhook")]
    76  	if !ok {
    77  		w.WriteHeader(http.StatusNotFound)
    78  		toJSON(w, okResp{Message: "webhook not found"})
    79  	}
    80  
    81  	delete(ms.webhooks.Webhooks, chi.URLParam(r, "webhook"))
    82  	toJSON(w, okResp{Message: "success"})
    83  }