package main import ( "log" "net/http" "os" "github.com/prometheus/client_golang/prometheus/promhttp" ) var ( SigningToken = os.Getenv("SIGNING_TOKEN") ) func main() { listenAddr := os.Getenv("LISTEN_ADDR") if listenAddr == "" { listenAddr = "0.0.0.0:8555" } mux := http.NewServeMux() // our routes mux.HandleFunc("/hook/{token}", postGetHookToken) mux.HandleFunc("/healthcheck", getHealthcheck) go populateSwitches() // prometheus mux.Handle("/metrics", promhttp.Handler()) log.Println("[main] http server listening on", listenAddr) err := http.ListenAndServe(listenAddr, mux) if err != nil { log.Fatalln("[main] http server errored", err) } } func errMethodNotAllowed(rw http.ResponseWriter) { rw.Header().Add("content-type", "text/plain") rw.WriteHeader(http.StatusMethodNotAllowed) rw.Write([]byte("405 Method Not Allowed")) } func errStatusInternalServerError(rw http.ResponseWriter) { rw.Header().Add("content-type", "text/plain") rw.WriteHeader(http.StatusInternalServerError) rw.Write([]byte("500 Internal Server Error")) } func errUnauthorized(rw http.ResponseWriter) { rw.Header().Add("content-type", "text/plain") rw.WriteHeader(http.StatusUnauthorized) rw.Write([]byte("401 Unauthorized")) } func errBadRequest(rw http.ResponseWriter) { rw.Header().Add("content-type", "text/plain") rw.WriteHeader(http.StatusBadRequest) rw.Write([]byte("401 Bad Request")) } func basicOk(rw http.ResponseWriter) { rw.Header().Add("content-type", "text/plain") rw.WriteHeader(http.StatusOK) rw.Write([]byte("200 Aight Request")) } func basicNoContent(rw http.ResponseWriter) { rw.Header().Add("content-type", "text/plain") rw.WriteHeader(http.StatusNoContent) rw.Write([]byte("204 No Content (debug: likely not handled)")) } func getHealthcheck(rw http.ResponseWriter, req *http.Request) { _, err := pkApi.GetMember("iodbz") if err != nil { log.Println("[HEALTHCHECK FAIL] failed to reach pluralkit", err) errStatusInternalServerError(rw) return } }