diff --git a/cmd/wappcityuni/main.go b/cmd/wappcityuni/main.go index 0ade9eb..b79cf29 100644 --- a/cmd/wappcityuni/main.go +++ b/cmd/wappcityuni/main.go @@ -4,10 +4,12 @@ import ( "fmt" "github.com/joho/godotenv" "golang.captainalm.com/cityuni-webserver/conf" + "golang.captainalm.com/cityuni-webserver/pageHandler" "gopkg.in/yaml.v3" "log" "net" "net/http" + "net/http/fcgi" "os" "os/signal" "path" @@ -79,13 +81,18 @@ func main() { var fcgiListen net.Listener switch strings.ToLower(configYml.Listen.WebMethod) { case "http": - webServer, _ = web.New(configYml, getListener(configYml, cwdDir)) + webServer = &http.Server{ + Handler: pageHandler.GetRouter(configYml), + ReadTimeout: configYml.Listen.ReadTimeout, + ReadHeaderTimeout: configYml.Listen.WriteTimeout, + } + go runBackgroundHttp(webServer, getListener(configYml, cwdDir), false) case "fcgi": fcgiListen = getListener(configYml, cwdDir) if fcgiListen == nil { log.Fatalln("Listener Nil") } else { - //Serve FCGI + go runBackgroundFCgi(pageHandler.GetRouter(configYml), fcgiListen) } default: log.Fatalln("Unknown Web Method.") @@ -180,3 +187,30 @@ func getListener(config conf.ConfigYaml, cwd string) net.Listener { return theListener } } + +func runBackgroundHttp(s *http.Server, l net.Listener, tlsEnabled bool) { + var err error + if tlsEnabled { + err = s.ServeTLS(l, "", "") + } else { + err = s.Serve(l) + } + if err != nil { + if err == http.ErrServerClosed { + log.Println("The http server shutdown successfully") + } else { + log.Fatalf("[Http] Error trying to host the http server: %s\n", err.Error()) + } + } +} + +func runBackgroundFCgi(h http.Handler, l net.Listener) { + err := fcgi.Serve(l, h) + if err != nil { + if err == net.ErrClosed { + log.Println("The fcgi server shutdown successfully") + } else { + log.Fatalf("[Http] Error trying to host the fcgi server: %s\n", err.Error()) + } + } +} diff --git a/go.mod b/go.mod index da3b6a5..726432d 100644 --- a/go.mod +++ b/go.mod @@ -3,6 +3,7 @@ module golang.captainalm.com/cityuni-webserver go 1.18 require ( + github.com/gorilla/mux v1.8.0 github.com/joho/godotenv v1.4.0 gopkg.in/yaml.v3 v3.0.1 ) diff --git a/go.sum b/go.sum index b6897df..27d4d9a 100644 --- a/go.sum +++ b/go.sum @@ -1,3 +1,5 @@ +github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI= +github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= github.com/joho/godotenv v1.4.0 h1:3l4+N6zfMWnkbPEXKng2o2/MR5mSwTrBih4ZEkkz1lg= github.com/joho/godotenv v1.4.0/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= diff --git a/pageHandler/page-handler.go b/pageHandler/page-handler.go new file mode 100644 index 0000000..61e19b6 --- /dev/null +++ b/pageHandler/page-handler.go @@ -0,0 +1,17 @@ +package pageHandler + +import ( + "github.com/gorilla/mux" + "golang.captainalm.com/cityuni-webserver/conf" + "net/http" +) + +var theRouter *mux.Router + +func GetRouter(config conf.ConfigYaml) http.Handler { + if theRouter == nil { + theRouter = mux.NewRouter() + //Mux routing stuff + } + return theRouter +}