go-pkg/mercury/http/notify.go
2024-04-05 13:26:11 -06:00

64 lines
1.2 KiB
Go

package http
import (
"bytes"
"context"
"crypto/tls"
"crypto/x509"
"fmt"
"net/http"
"go.sour.is/pkg/lg"
"go.sour.is/pkg/mercury"
)
type httpNotify struct{}
func (httpNotify) SendNotify(ctx context.Context, n mercury.Notify) error {
ctx, span := lg.Span(ctx)
defer span.End()
cl := &http.Client{}
caCertPool, err := x509.SystemCertPool()
if err != nil {
caCertPool = x509.NewCertPool()
}
// Setup HTTPS client
tlsConfig := &tls.Config{
RootCAs: caCertPool,
}
transport := &http.Transport{TLSClientConfig: tlsConfig}
cl.Transport = transport
var req *http.Request
req, err = http.NewRequestWithContext(ctx, n.Method, n.URL, bytes.NewBufferString(""))
if err != nil {
span.RecordError(err)
return err
}
req.Header.Set("content-type", "application/json")
span.AddEvent(fmt.Sprint("URL: ", n.URL))
res, err := cl.Do(req)
if err != nil {
span.RecordError(err)
return err
}
res.Body.Close()
span.AddEvent(fmt.Sprint(res.Status))
if res.StatusCode != 200 {
span.RecordError(err)
err = fmt.Errorf("unable to read config")
return err
}
return nil
}
func Register() {
mercury.Registry.Register("http-notify", func(s *mercury.Space) any { return httpNotify{} })
}