package main import ( "fmt" "html/template" "log" "net/http" "os" "path/filepath" "time" "github.com/alexedwards/scs/v2" "github.com/joho/godotenv" ) var sessionManager *scs.SessionManager func main() { err := godotenv.Load() if err != nil { log.Fatal("Error loading .env file") } // handle authentication sessionManager = scs.New() sessionManager.Lifetime = 24 * time.Hour // handle frontend views webDir := "./web/dist" fs := http.FileServer(http.Dir(webDir)) http.Handle("/", sessionManager.LoadAndSave( http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) { if request.URL.Path != "/" { path := filepath.Join(webDir, filepath.Clean(request.URL.Path)) _, err := os.Stat(path) if err == nil { fs.ServeHTTP(writer, request) return } } handler(writer, request) }), )) port := os.Getenv("HTTP_PORT") if port == "" { port = "8080" } addr := ":" + port fmt.Printf("Server listening on http://localhost%s\n", addr) if err := http.ListenAndServe(addr, nil); err != nil { log.Fatalf("server error: %v", err) } } func handler(writer http.ResponseWriter, request *http.Request) { templ := template.Must(template.ParseFiles("./web/dist/index.html")) templ.Execute(writer, nil) }