From 596b4865440bf22bbf41462c2e02639276278806 Mon Sep 17 00:00:00 2001 From: idk Date: Sun, 4 Jun 2023 15:48:52 +0000 Subject: [PATCH 1/2] Make it so that library users can override listeners --- app.go | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/app.go b/app.go index c7bdbb5..cd80e88 100644 --- a/app.go +++ b/app.go @@ -432,6 +432,8 @@ func Initialize(apper Apper, debug bool) (*App, error) { return apper.App(), nil } +var Listen = net.Listen + func Serve(app *App, r *mux.Router) { log.Info("Going to serve...") @@ -489,17 +491,23 @@ requests. We recommend supplying a valid host name.`) go func() { log.Info("Serving redirects on http://%s:80", bindAddress) - err = http.ListenAndServe(":80", m.HTTPHandler(nil)) + listener, err := Listen("tcp", fmt.Sprintf("%s:80", bindAddress)) + log.Error("Unable to listen on %s: %v", bindAddress, err) + err = http.Serve(listener, m.HTTPHandler(nil)) log.Error("Unable to start redirect server: %v", err) }() - log.Info("Serving on https://%s:443", bindAddress) log.Info("---") - err = s.ListenAndServeTLS("", "") + listener, err := Listen("tcp", fmt.Sprintf("%s:443", bindAddress)) + log.Error("Unable to listen on %s: %v", bindAddress, err) + err = s.ServeTLS(listener, "", "") + log.Error("Unable to start https server: %v", err) } else { go func() { + listener, err := Listen("tcp", fmt.Sprintf("%s:80", bindAddress)) + log.Error("Unable to listen on %s: %v", bindAddress, err) log.Info("Serving redirects on http://%s:80", bindAddress) - err = http.ListenAndServe(fmt.Sprintf("%s:80", bindAddress), http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + err = http.Serve(listener, http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { http.Redirect(w, r, app.cfg.App.Host, http.StatusMovedPermanently) })) log.Error("Unable to start redirect server: %v", err) @@ -508,7 +516,10 @@ requests. We recommend supplying a valid host name.`) log.Info("Serving on https://%s:443", bindAddress) log.Info("Using manual certificates") log.Info("---") - err = http.ListenAndServeTLS(fmt.Sprintf("%s:443", bindAddress), app.cfg.Server.TLSCertPath, app.cfg.Server.TLSKeyPath, r) + listener, err := Listen("tcp", fmt.Sprintf("%s:443", bindAddress)) + log.Error("Unable to listen on %s: %v", bindAddress, err) + err = http.ServeTLS(listener, r, app.cfg.Server.TLSCertPath, app.cfg.Server.TLSKeyPath) + log.Error("Unable to start https server: %v", err) } } else { network := "tcp" @@ -530,7 +541,7 @@ requests. We recommend supplying a valid host name.`) log.Info("Serving on %s://%s", protocol, bindAddress) log.Info("---") - listener, err := net.Listen(network, bindAddress) + listener, err := Listen(network, bindAddress) if err != nil { log.Error("Could not bind to address: %v", err) os.Exit(1) @@ -546,6 +557,7 @@ requests. We recommend supplying a valid host name.`) defer listener.Close() err = http.Serve(listener, r) + log.Error("Unable to start http server: %v", err) } if err != nil { log.Error("Unable to start: %v", err) From af11b394593d23c418023a03725f6d199e5c08f7 Mon Sep 17 00:00:00 2001 From: idk Date: Sun, 4 Jun 2023 18:31:35 +0000 Subject: [PATCH 2/2] gopher listener --- gopher.go | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/gopher.go b/gopher.go index 2ac1590..caff801 100644 --- a/gopher.go +++ b/gopher.go @@ -24,10 +24,13 @@ import ( func initGopher(apper Apper) { handler := NewWFHandler(apper) - gopher.HandleFunc("/", handler.Gopher(handleGopher)) log.Info("Serving on gopher://localhost:%d", apper.App().Config().Server.GopherPort) - gopher.ListenAndServe(fmt.Sprintf(":%d", apper.App().Config().Server.GopherPort), nil) + listener, err := Listen("tcp", fmt.Sprintf("%s:%d", apper.App().Config().Server.Bind, apper.App().Config().Server.GopherPort)) + if err != nil { + panic(err) + } + gopher.Serve(listener, nil) } // Utility function to strip the URL from the hostname provided by app.cfg.App.Host