mirror of
https://github.com/micromdm/micromdm/
synced 2026-05-15 02:55:40 +08:00
Adds a webhook worker which is scaffolded to support multiple event types. Supports Checkin And Acknowledge events from the start.
44 lines
912 B
Go
44 lines
912 B
Go
package webhook
|
|
|
|
import (
|
|
"bytes"
|
|
"context"
|
|
"encoding/json"
|
|
"net/http"
|
|
|
|
"github.com/pkg/errors"
|
|
)
|
|
|
|
type httpClient interface {
|
|
Do(*http.Request) (*http.Response, error)
|
|
}
|
|
|
|
func postWebhookEvent(
|
|
ctx context.Context,
|
|
client httpClient,
|
|
url string,
|
|
event interface{},
|
|
) error {
|
|
raw, err := json.MarshalIndent(event, "", " ")
|
|
if err != nil {
|
|
return errors.Wrap(err, "marshal webhook event")
|
|
}
|
|
|
|
req, err := http.NewRequest(http.MethodPost, url, bytes.NewBuffer(raw))
|
|
if err != nil {
|
|
return errors.Wrap(err, "create webhook http request")
|
|
}
|
|
req.Header.Set("Content-Type", "application/json; charset=utf-8")
|
|
|
|
resp, err := client.Do(req.WithContext(ctx))
|
|
if err != nil {
|
|
return errors.Wrap(err, "post webhook event to URL")
|
|
}
|
|
defer resp.Body.Close()
|
|
|
|
if resp.StatusCode >= 400 {
|
|
return errors.Errorf("received unexpected HTTP status %d %s", resp.StatusCode, resp.Status)
|
|
}
|
|
return nil
|
|
}
|