startup.flags.go 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. package main
  2. import (
  3. "encoding/json"
  4. "log"
  5. "net/http"
  6. prout "imuslab.com/arozos/mod/prouter"
  7. )
  8. /*
  9. Startup Flags Manager
  10. This script is design to provide interface for editing the boot flags
  11. during the system is running
  12. */
  13. func StartupFlagsInit() {
  14. //Create a admin permission router for handling requests
  15. adminRouter := prout.NewModuleRouter(prout.RouterOption{
  16. AdminOnly: true,
  17. UserHandler: userHandler,
  18. DeniedHandler: func(w http.ResponseWriter, r *http.Request) {
  19. sendErrorResponse(w, "Permission Denied")
  20. },
  21. })
  22. adminRouter.HandleFunc("/system/bootflags", handleBootFlagsFunction)
  23. }
  24. func handleBootFlagsFunction(w http.ResponseWriter, r *http.Request) {
  25. type bootFlags struct {
  26. Hostname string
  27. MaxUploadSize int
  28. MaxFileUploadBuff int
  29. FileIOBuffer int
  30. DisableIPResolver bool
  31. EnableHomePage bool
  32. EnableDirListing bool
  33. }
  34. opr, _ := mv(r, "opr", true)
  35. if opr == "" {
  36. //List the current boot flag, all units in MB
  37. js, _ := json.Marshal(bootFlags{
  38. *host_name,
  39. int(max_upload_size >> 20),
  40. *upload_buf,
  41. *file_opr_buff,
  42. *disable_ip_resolve_services,
  43. *allow_homepage,
  44. *enable_dir_listing,
  45. })
  46. sendJSONResponse(w, string(js))
  47. } else if opr == "set" {
  48. //Set and update the boot flags
  49. newSettings, err := mv(r, "value", true)
  50. if err != nil {
  51. sendErrorResponse(w, "Invalid new seting value")
  52. return
  53. }
  54. //Try parse it
  55. newConfig := bootFlags{
  56. "My ArOZ",
  57. 8192,
  58. 25,
  59. 1024,
  60. false,
  61. false,
  62. true,
  63. }
  64. err = json.Unmarshal([]byte(newSettings), &newConfig)
  65. if err != nil {
  66. sendErrorResponse(w, err.Error())
  67. return
  68. }
  69. //Update the current global flags
  70. log.Println("Updating boot flag to:", newSettings)
  71. *host_name = newConfig.Hostname
  72. max_upload_size = int64(newConfig.MaxUploadSize << 20)
  73. *upload_buf = newConfig.MaxFileUploadBuff
  74. *file_opr_buff = newConfig.FileIOBuffer
  75. *disable_ip_resolve_services = newConfig.DisableIPResolver
  76. *allow_homepage = newConfig.EnableHomePage
  77. *enable_dir_listing = newConfig.EnableDirListing
  78. sendOK(w)
  79. } else {
  80. sendErrorResponse(w, "Unknown operation")
  81. }
  82. }