diff --git a/src/mod/webserv/handler.go b/src/mod/webserv/handler.go index e040b1f..d8ac735 100644 --- a/src/mod/webserv/handler.go +++ b/src/mod/webserv/handler.go @@ -69,6 +69,12 @@ func (ws *WebServer) HandlePortChange(w http.ResponseWriter, r *http.Request) { return } + // Check if newPort is a valid TCP port number (1-65535) + if newPort < 1 || newPort > 65535 { + utils.SendErrorResponse(w, "invalid port number given") + return + } + err = ws.ChangePort(strconv.Itoa(newPort)) if err != nil { utils.SendErrorResponse(w, err.Error()) @@ -106,6 +112,17 @@ func (ws *WebServer) SetDisableListenToAllInterface(w http.ResponseWriter, r *ht utils.SendErrorResponse(w, "unable to save setting") return } + + // Update the option in the web server instance ws.option.DisableListenToAllInterface = disableListen + + // If the server is running and the setting is changed, we need to restart the server + if ws.IsRunning() { + err = ws.Restart() + if err != nil { + utils.SendErrorResponse(w, "unable to restart web server: "+err.Error()) + return + } + } utils.SendOK(w) } diff --git a/src/mod/webserv/webserv.go b/src/mod/webserv/webserv.go index 85214e4..44830ec 100644 --- a/src/mod/webserv/webserv.go +++ b/src/mod/webserv/webserv.go @@ -210,6 +210,27 @@ func (ws *WebServer) Stop() error { return nil } +func (ws *WebServer) Restart() error { + if ws.isRunning { + if err := ws.Stop(); err != nil { + return err + } + } + + if err := ws.Start(); err != nil { + return err + } + + ws.option.Logger.PrintAndLog("static-webserv", "Static Web Server restarted. Listening on :"+ws.option.Port, nil) + return nil +} + +func (ws *WebServer) IsRunning() bool { + ws.mu.Lock() + defer ws.mu.Unlock() + return ws.isRunning +} + // UpdateDirectoryListing enables or disables directory listing. func (ws *WebServer) UpdateDirectoryListing(enable bool) { ws.option.EnableDirectoryListing = enable