35 lines
734 B
Go
35 lines
734 B
Go
|
// +build !go1.13
|
||
|
|
||
|
package slack
|
||
|
|
||
|
import (
|
||
|
"bytes"
|
||
|
"context"
|
||
|
"encoding/json"
|
||
|
"net/http"
|
||
|
|
||
|
"github.com/pkg/errors"
|
||
|
)
|
||
|
|
||
|
func PostWebhookCustomHTTPContext(ctx context.Context, url string, httpClient *http.Client, msg *WebhookMessage) error {
|
||
|
raw, err := json.Marshal(msg)
|
||
|
if err != nil {
|
||
|
return errors.Wrap(err, "marshal failed")
|
||
|
}
|
||
|
|
||
|
req, err := http.NewRequest(http.MethodPost, url, bytes.NewReader(raw))
|
||
|
if err != nil {
|
||
|
return errors.Wrap(err, "failed new request")
|
||
|
}
|
||
|
req = req.WithContext(ctx)
|
||
|
req.Header.Set("Content-Type", "application/json")
|
||
|
|
||
|
resp, err := httpClient.Do(req)
|
||
|
if err != nil {
|
||
|
return errors.Wrap(err, "failed to post webhook")
|
||
|
}
|
||
|
defer resp.Body.Close()
|
||
|
|
||
|
return checkStatusCode(resp, discard{})
|
||
|
}
|