Make it so that library users can override listeners

This commit is contained in:
idk 2023-06-04 15:48:52 +00:00
parent 67dbc9b22b
commit 596b486544
No known key found for this signature in database
GPG key ID: D75C03B39B5E14E1

24
app.go
View file

@ -432,6 +432,8 @@ func Initialize(apper Apper, debug bool) (*App, error) {
return apper.App(), nil return apper.App(), nil
} }
var Listen = net.Listen
func Serve(app *App, r *mux.Router) { func Serve(app *App, r *mux.Router) {
log.Info("Going to serve...") log.Info("Going to serve...")
@ -489,17 +491,23 @@ requests. We recommend supplying a valid host name.`)
go func() { go func() {
log.Info("Serving redirects on http://%s:80", bindAddress) 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.Error("Unable to start redirect server: %v", err)
}() }()
log.Info("Serving on https://%s:443", bindAddress) log.Info("Serving on https://%s:443", bindAddress)
log.Info("---") 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 { } else {
go func() { 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) 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) http.Redirect(w, r, app.cfg.App.Host, http.StatusMovedPermanently)
})) }))
log.Error("Unable to start redirect server: %v", err) 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("Serving on https://%s:443", bindAddress)
log.Info("Using manual certificates") log.Info("Using manual certificates")
log.Info("---") 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 { } else {
network := "tcp" network := "tcp"
@ -530,7 +541,7 @@ requests. We recommend supplying a valid host name.`)
log.Info("Serving on %s://%s", protocol, bindAddress) log.Info("Serving on %s://%s", protocol, bindAddress)
log.Info("---") log.Info("---")
listener, err := net.Listen(network, bindAddress) listener, err := Listen(network, bindAddress)
if err != nil { if err != nil {
log.Error("Could not bind to address: %v", err) log.Error("Could not bind to address: %v", err)
os.Exit(1) os.Exit(1)
@ -546,6 +557,7 @@ requests. We recommend supplying a valid host name.`)
defer listener.Close() defer listener.Close()
err = http.Serve(listener, r) err = http.Serve(listener, r)
log.Error("Unable to start http server: %v", err)
} }
if err != nil { if err != nil {
log.Error("Unable to start: %v", err) log.Error("Unable to start: %v", err)