startup.flags.go 2.5 KB

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