package notify import ( "bytes" "encoding/json" "net/http" "github.com/drone/drone/pkg/model" ) type Webhook struct { URL []string `yaml:"urls,omitempty"` Success bool `yaml:"on_success,omitempty"` Failure bool `yaml:"on_failure,omitempty"` } func (w *Webhook) Send(context *Context) error { switch { case context.Commit.Status == "Success" && w.Success: return w.send(context) case context.Commit.Status == "Failure" && w.Failure: return w.send(context) } return nil } // helper function to send HTTP requests func (w *Webhook) send(context *Context) error { // data will get posted in this format data := struct { Owner *model.User `json:"owner"` Repo *model.Repo `json:"repository"` Commit *model.Commit `json:"commit"` }{context.User, context.Repo, context.Commit} // data json encoded payload, err := json.Marshal(data) if err != nil { return err } // loop through and email recipients for _, url := range w.URL { go sendJson(url, payload) } return nil } // helper fuction to sent HTTP Post requests // with JSON data as the payload. func sendJson(url string, payload []byte) { buf := bytes.NewBuffer(payload) resp, err := http.Post(url, "application/json", buf) if err != nil { return } resp.Body.Close() }