disk.go 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156
  1. package main
  2. /*
  3. ArOZ Online Disk Service Endpoint Handler
  4. This is a module to provide access to the disk services
  5. */
  6. import (
  7. "net/http"
  8. "imuslab.com/arozos/mod/disk/diskcapacity"
  9. "imuslab.com/arozos/mod/disk/diskmg"
  10. diskspace "imuslab.com/arozos/mod/disk/diskspace"
  11. smart "imuslab.com/arozos/mod/disk/smart"
  12. sortfile "imuslab.com/arozos/mod/disk/sortfile"
  13. prout "imuslab.com/arozos/mod/prouter"
  14. "imuslab.com/arozos/mod/utils"
  15. )
  16. func DiskServiceInit() {
  17. //Register Disk Utilities under System Setting
  18. //Disk info are only viewable by administrator
  19. router := prout.NewModuleRouter(prout.RouterOption{
  20. ModuleName: "System Setting",
  21. AdminOnly: false,
  22. UserHandler: userHandler,
  23. DeniedHandler: func(w http.ResponseWriter, r *http.Request) {
  24. utils.SendErrorResponse(w, "Permission Denied")
  25. },
  26. })
  27. //Disk Space Display endpoint
  28. router.HandleFunc("/system/disk/space/list", diskspace.HandleDiskSpaceList)
  29. //Handle Virtual Disk Properties display endpoints
  30. dc := diskcapacity.NewCapacityResolver(userHandler)
  31. router.HandleFunc("/system/disk/space/resolve", dc.HandleCapacityResolving)
  32. //New Large File Scanner
  33. lfs := sortfile.NewLargeFileScanner(userHandler)
  34. router.HandleFunc("/system/disk/space/largeFiles", lfs.HandleLargeFileList)
  35. //Register settings
  36. registerSetting(settingModule{
  37. Name: "Space Finder",
  38. Desc: "Reclaim Storage Space on Disks",
  39. IconPath: "SystemAO/disk/space/img/small_icon.png",
  40. Group: "Disk",
  41. StartDir: "SystemAO/disk/space/finder.html",
  42. RequireAdmin: false,
  43. })
  44. if *allow_hardware_management {
  45. //Displaying remaining space on disk, only enabled when allow hardware is true
  46. registerSetting(settingModule{
  47. Name: "Disk Space",
  48. Desc: "System Storage Space on Disks",
  49. IconPath: "SystemAO/disk/space/img/small_icon.png",
  50. Group: "Disk",
  51. StartDir: "SystemAO/disk/space/diskspace.html",
  52. RequireAdmin: false,
  53. })
  54. }
  55. //Register Disk SMART services
  56. if sudo_mode {
  57. //Create a new admin router
  58. adminRouter := prout.NewModuleRouter(prout.RouterOption{
  59. ModuleName: "System Setting",
  60. AdminOnly: true,
  61. UserHandler: userHandler,
  62. DeniedHandler: func(w http.ResponseWriter, r *http.Request) {
  63. utils.SendErrorResponse(w, "Permission Denied")
  64. },
  65. })
  66. /*
  67. SMART Listener
  68. Handle disk SMART and disk information
  69. See disk/SMART for more information
  70. */
  71. if *allow_hardware_management {
  72. smartListener, err := smart.NewSmartListener()
  73. if err != nil {
  74. //Listener creation failed
  75. systemWideLogger.PrintAndLog("Disk", "Failed to create SMART listener: "+err.Error(), err)
  76. } else {
  77. //Listener created. Register endpoints
  78. //Register as a system setting
  79. registerSetting(settingModule{
  80. Name: "Disk SMART",
  81. Desc: "HardDisk Health Checking",
  82. IconPath: "SystemAO/disk/smart/img/small_icon.png",
  83. Group: "Disk",
  84. StartDir: "SystemAO/disk/smart/smart.html",
  85. RequireAdmin: true,
  86. })
  87. /*
  88. registerSetting(settingModule{
  89. Name: "SMART Log",
  90. Desc: "HardDisk Health Log",
  91. IconPath: "SystemAO/disk/smart/img/small_icon.png",
  92. Group: "Disk",
  93. StartDir: "SystemAO/disk/smart/log.html",
  94. RequireAdmin: true,
  95. })
  96. */
  97. adminRouter.HandleFunc("/system/disk/smart/getSMART", smartListener.GetSMART)
  98. }
  99. }
  100. /*
  101. Disk Manager Initialization
  102. See disk/diskmg.go for more details
  103. For setting register, see setting.advance.go
  104. */
  105. if *allow_hardware_management {
  106. adminRouter.HandleFunc("/system/disk/diskmg/view", diskmg.HandleView)
  107. adminRouter.HandleFunc("/system/disk/diskmg/platform", diskmg.HandlePlatform)
  108. adminRouter.HandleFunc("/system/disk/diskmg/mount", func(w http.ResponseWriter, r *http.Request) {
  109. //Mount option require passing in all filesystem handlers
  110. allFsh := GetAllLoadedFsh()
  111. diskmg.HandleMount(w, r, allFsh)
  112. })
  113. adminRouter.HandleFunc("/system/disk/diskmg/format", func(w http.ResponseWriter, r *http.Request) {
  114. //Check if request are made in POST mode
  115. if r.Method != http.MethodPost {
  116. w.WriteHeader(http.StatusMethodNotAllowed)
  117. w.Write([]byte("405 - Method Not Allowed"))
  118. return
  119. }
  120. //Check if ArozOS is running in sudo mode
  121. if !sudo_mode {
  122. w.WriteHeader(http.StatusUnauthorized)
  123. w.Write([]byte("401 - Unauthorized (Is ArozOS running in sudo mode?)"))
  124. return
  125. }
  126. //Format option require passing in all filesystem handlers
  127. allFsh := GetAllLoadedFsh()
  128. diskmg.HandleFormat(w, r, allFsh)
  129. })
  130. adminRouter.HandleFunc("/system/disk/diskmg/mpt", diskmg.HandleListMountPoints)
  131. }
  132. }
  133. }