s1llyw0rdz/web/web.go
2021-11-22 10:06:23 +01:00

47 lines
1.1 KiB
Go

package web
import (
"fmt"
"log"
"net/http"
"status/config"
"status/storage"
"status/web/handler"
"status/web/session"
)
func httpToHTTPSHandler() *http.ServeMux {
handleRedirect := func(w http.ResponseWriter, r *http.Request) {
newURI := "https://" + r.Host + r.URL.String()
http.Redirect(w, r, newURI, http.StatusFound)
}
mux := &http.ServeMux{}
mux.HandleFunc("/", handleRedirect)
return mux
}
func Serve(data *storage.Storage, cfg *config.Config) error {
var err error
sess := session.New(cfg.SessionKey, data)
s, err := handler.New(cfg, sess, data)
if err != nil {
log.Fatal(err)
}
switch cfg.Env {
case "PROD":
go func() {
fmt.Printf("Starting HTTP server on :443\n")
err := http.ListenAndServeTLS(":443", cfg.CertFile, cfg.KeyFile, s)
if err != nil {
log.Fatalf("httpsSrv.ListendAndServeTLS() failed with %s", err)
}
}()
fmt.Printf("Starting HTTP to HTTPS server on :80\n")
err = http.ListenAndServe(":80", httpToHTTPSHandler())
break
default:
fmt.Printf("Starting HTTP server on port 8000\n")
err = http.ListenAndServe(":8000", s)
}
return err
}