handler.go 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. package webserv
  2. import (
  3. "encoding/json"
  4. "net/http"
  5. "strconv"
  6. "imuslab.com/zoraxy/mod/utils"
  7. )
  8. /*
  9. Handler.go
  10. Handler for web server options change
  11. web server is directly listening to the TCP port
  12. handlers in this script are for setting change only
  13. */
  14. type StaticWebServerStatus struct {
  15. ListeningPort int
  16. EnableDirectoryListing bool
  17. WebRoot string
  18. Running bool
  19. }
  20. // Handle getting current static web server status
  21. func (ws *WebServer) HandleGetStatus(w http.ResponseWriter, r *http.Request) {
  22. listeningPortInt, _ := strconv.Atoi(ws.option.Port)
  23. currentStatus := StaticWebServerStatus{
  24. ListeningPort: listeningPortInt,
  25. EnableDirectoryListing: ws.option.EnableDirectoryListing,
  26. WebRoot: ws.option.WebRoot,
  27. Running: ws.isRunning,
  28. }
  29. js, _ := json.Marshal(currentStatus)
  30. utils.SendJSONResponse(w, string(js))
  31. }
  32. // Handle request for starting the static web server
  33. func (ws *WebServer) HandleStartServer(w http.ResponseWriter, r *http.Request) {
  34. err := ws.Start()
  35. if err != nil {
  36. utils.SendErrorResponse(w, err.Error())
  37. return
  38. }
  39. utils.SendOK(w)
  40. }
  41. // Handle request for stopping the static web server
  42. func (ws *WebServer) HandleStopServer(w http.ResponseWriter, r *http.Request) {
  43. err := ws.Stop()
  44. if err != nil {
  45. utils.SendErrorResponse(w, err.Error())
  46. return
  47. }
  48. utils.SendOK(w)
  49. }
  50. // Handle change server listening port request
  51. func (ws *WebServer) HandlePortChange(w http.ResponseWriter, r *http.Request) {
  52. newPort, err := utils.PostInt(r, "port")
  53. if err != nil {
  54. utils.SendErrorResponse(w, "invalid port number given")
  55. return
  56. }
  57. err = ws.ChangePort(strconv.Itoa(newPort))
  58. if err != nil {
  59. utils.SendErrorResponse(w, err.Error())
  60. return
  61. }
  62. utils.SendOK(w)
  63. }
  64. // Change enable directory listing settings
  65. func (ws *WebServer) SetEnableDirectoryListing(w http.ResponseWriter, r *http.Request) {
  66. enableList, err := utils.PostBool(r, "enable")
  67. if err != nil {
  68. utils.SendErrorResponse(w, "invalid setting given")
  69. return
  70. }
  71. ws.option.EnableDirectoryListing = enableList
  72. utils.SendOK(w)
  73. }