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 }