sermoni

"Service monitor" / cronjob status service
Log | Files | Refs

http.go (1779B)


      1 package http
      2 
      3 import (
      4 	"fmt"
      5 	"log"
      6 	"net/http"
      7 
      8 	"sermoni/internal/config"
      9 
     10 	"github.com/gorilla/mux"
     11 	"github.com/gorilla/sessions"
     12 )
     13 
     14 var conf *config.Config
     15 var store *sessions.CookieStore
     16 
     17 // StartServer initializes the session store given the session key and starts
     18 // the server at the given port
     19 func StartServer(port int) {
     20 	conf = config.GetConfig()
     21 	store = sessions.NewCookieStore(conf.SessionKey)
     22 	store.Options.MaxAge = 604800
     23 	store.Options.HttpOnly = true
     24 	store.Options.Secure = PRODUCTION // Found in html.go / html_dev.go
     25 
     26 	router := mux.NewRouter()
     27 	router.HandleFunc("/", homeHandler)
     28 	router.HandleFunc("/init", initHandler).Methods(http.MethodGet)
     29 	router.HandleFunc("/login", loginHandler).Methods(http.MethodPost)
     30 	router.HandleFunc("/setup", setupHandler).Methods(http.MethodGet)
     31 	router.Handle("/logout", auth(logoutHandler))
     32 
     33 	router.Handle("/services", auth(getServices)).Methods(http.MethodGet)
     34 	router.Handle("/services", auth(postService)).Methods(http.MethodPost)
     35 	router.Handle("/services/{id:[0-9]+}", auth(deleteService)).Methods(http.MethodDelete)
     36 	//router.Handle("/services/{id:[0-9]+}", auth(putService)).Methods("PUT") (TODO)
     37 
     38 	router.Handle("/events", auth(getEvents)).Methods(http.MethodGet)
     39 	router.Handle("/events/{id:[0-9]+}", auth(deleteEvent)).Methods(http.MethodDelete)
     40 	// POSTS to /events is how services should report events to the monitor
     41 	// This should not be accessible from the website
     42 	router.HandleFunc("/events", reportEvent).Methods(http.MethodPost)
     43 
     44 	http.Handle("/", router)
     45 	log.Fatal(http.ListenAndServe(fmt.Sprintf(":%v", port), nil))
     46 }
     47 
     48 func homeHandler(w http.ResponseWriter, r *http.Request) {
     49 	defer r.Body.Close()
     50 	w.Write(getWebsite())
     51 	return
     52 }
     53 
     54 func check(err error) {
     55 	if err != nil {
     56 		panic(err)
     57 	}
     58 }