esbot/internal/http/http.go

54 lines
1.2 KiB
Go

package http
import (
"crypto/tls"
"encoding/json"
"net/http"
"os"
"git.netflux.io/rob/esbot/internal/matrix"
"github.com/rs/zerolog"
"github.com/rs/zerolog/log"
)
type handler struct {
logger zerolog.Logger
ep matrix.EventProcessor
}
func (h *handler) handleTransactions(w http.ResponseWriter, r *http.Request) {
if r.Method != "PUT" {
w.WriteHeader(http.StatusMethodNotAllowed)
return
}
var payload EventsRequest
if err := json.NewDecoder(r.Body).Decode(&payload); err != nil {
w.WriteHeader(http.StatusBadRequest)
return
}
if err := h.ep.ProcessEvents(payload.RawEvents); err != nil {
w.WriteHeader(http.StatusBadRequest)
return
}
w.WriteHeader(http.StatusOK)
w.Write([]byte("{}"))
}
func ListenAndServe(addr, accessToken string, insecureTLS bool) error {
http.DefaultTransport.(*http.Transport).TLSClientConfig = &tls.Config{InsecureSkipVerify: insecureTLS}
logger := log.Output(zerolog.ConsoleWriter{Out: os.Stdout})
h := handler{
logger: logger,
ep: matrix.NewProcessor(accessToken, logger),
}
mux := http.NewServeMux()
mux.HandleFunc("/transactions/", h.handleTransactions)
return http.ListenAndServe(addr, loggerMiddleware(logger, mux))
}