From 120d04464866443f9dda243263c592c3d3e8d31e Mon Sep 17 00:00:00 2001 From: vx-clutch Date: Mon, 8 Dec 2025 19:52:27 -0500 Subject: [PATCH] add https support --- main.go | 3 ++- src/config/config.go | 1 + src/server/server.go | 20 +++++++++++++++++--- 3 files changed, 20 insertions(+), 4 deletions(-) diff --git a/main.go b/main.go index 952dc4e..2d95708 100644 --- a/main.go +++ b/main.go @@ -19,7 +19,8 @@ import ( var core embed.FS func init() { - config.Port = flag.Int("p", 3000, "Set the server port") + config.Port = flag.Int("p", 3000, "Set the server port for http") + config.HTTPSPort = flag.Int("ps", 3000, "Set the server port for https") config.Color = flag.Bool("no-color", false, "Disable color output") config.Core = core } diff --git a/src/config/config.go b/src/config/config.go index 9f20968..c5d629a 100644 --- a/src/config/config.go +++ b/src/config/config.go @@ -4,6 +4,7 @@ import "embed" var Core embed.FS var Port *int +var HTTPSPort *int var Color *bool type MyConfig struct { diff --git a/src/server/server.go b/src/server/server.go index bb2701a..396fe9f 100644 --- a/src/server/server.go +++ b/src/server/server.go @@ -399,7 +399,7 @@ func Start(dir string) error { } } - http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { + handler := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { path := r.URL.Path lp, ok := routes[path] @@ -457,6 +457,20 @@ func Start(dir string) error { w.Write(data) }) - fmt.Printf("Server is running on http://localhost:%d\n", *config.Port) - return http.ListenAndServe(fmt.Sprintf(":%d", *config.Port), nil) + addrHTTPS := fmt.Sprintf(":%d", *config.HTTPSPort) + addrHTTP := fmt.Sprintf(":%d", *config.Port) + + go func() { + http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { + target := "https://" + r.Host + r.RequestURI + http.Redirect(w, r, target, http.StatusMovedPermanently) + }) + fmt.Printf("Redirecting HTTP to HTTPS on port %d\n", *config.Port) + if err := http.ListenAndServe(addrHTTP, nil); err != nil { + fmt.Printf("HTTP redirect server error: %v\n", err) + } + }() + + fmt.Printf("HTTPS server is running on https://localhost:%d\n", *config.HTTPSPort) + return http.ListenAndServeTLS(addrHTTPS, "cert.pem", "key.pem", handler) }