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)) }