disk.go 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  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. "log"
  8. "net/http"
  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. )
  15. func DiskServiceInit() {
  16. //Register Disk Utilities under System Setting
  17. //Disk info are only viewable by administrator
  18. router := prout.NewModuleRouter(prout.RouterOption{
  19. ModuleName: "System Setting",
  20. AdminOnly: false,
  21. UserHandler: userHandler,
  22. DeniedHandler: func(w http.ResponseWriter, r *http.Request) {
  23. sendErrorResponse(w, "Permission Denied")
  24. },
  25. })
  26. //Disk Space Display endpoint
  27. router.HandleFunc("/system/disk/space/list", diskspace.HandleDiskSpaceList)
  28. //New Large File Scanner
  29. lfs := sortfile.NewLargeFileScanner(userHandler)
  30. router.HandleFunc("/system/disk/space/largeFiles", lfs.HandleLargeFileList)
  31. //Register settings
  32. registerSetting(settingModule{
  33. Name: "Space Finder",
  34. Desc: "Reclaim Storage Space on Disks",
  35. IconPath: "SystemAO/disk/space/img/small_icon.png",
  36. Group: "Disk",
  37. StartDir: "SystemAO/disk/space/finder.html",
  38. RequireAdmin: false,
  39. })
  40. if *allow_hardware_management {
  41. //Displaying remaining space on disk, only enabled when allow hardware is true
  42. registerSetting(settingModule{
  43. Name: "Disk Space",
  44. Desc: "System Storage Space on Disks",
  45. IconPath: "SystemAO/disk/space/img/small_icon.png",
  46. Group: "Disk",
  47. StartDir: "SystemAO/disk/space/diskspace.html",
  48. RequireAdmin: false,
  49. })
  50. }
  51. //Register Disk SMART services
  52. if sudo_mode {
  53. //Create a new admin router
  54. adminRouter := prout.NewModuleRouter(prout.RouterOption{
  55. ModuleName: "System Setting",
  56. AdminOnly: true,
  57. UserHandler: userHandler,
  58. DeniedHandler: func(w http.ResponseWriter, r *http.Request) {
  59. sendErrorResponse(w, "Permission Denied")
  60. },
  61. })
  62. /*
  63. SMART Listener
  64. Handle disk SMART and disk information
  65. See disk/SMART for more information
  66. */
  67. if *allow_hardware_management {
  68. smartListener, err := smart.NewSmartListener()
  69. if err != nil {
  70. //Listener creation failed
  71. log.Println("Failed to create SMART listener: " + err.Error())
  72. } else {
  73. //Listener created. Register endpoints
  74. //Register as a system setting
  75. registerSetting(settingModule{
  76. Name: "Disk SMART",
  77. Desc: "HardDisk Health Checking",
  78. IconPath: "SystemAO/disk/smart/img/small_icon.png",
  79. Group: "Disk",
  80. StartDir: "SystemAO/disk/smart/smart.html",
  81. RequireAdmin: true,
  82. })
  83. /*
  84. registerSetting(settingModule{
  85. Name: "SMART Log",
  86. Desc: "HardDisk Health Log",
  87. IconPath: "SystemAO/disk/smart/img/small_icon.png",
  88. Group: "Disk",
  89. StartDir: "SystemAO/disk/smart/log.html",
  90. RequireAdmin: true,
  91. })
  92. */
  93. adminRouter.HandleFunc("/system/disk/smart/getSMART", smartListener.GetSMART)
  94. }
  95. }
  96. /*
  97. Disk Manager Initialization
  98. See disk/diskmg.go for more details
  99. For setting register, see setting.advance.go
  100. */
  101. if *allow_hardware_management {
  102. adminRouter.HandleFunc("/system/disk/diskmg/view", diskmg.HandleView)
  103. adminRouter.HandleFunc("/system/disk/diskmg/platform", diskmg.HandlePlatform)
  104. adminRouter.HandleFunc("/system/disk/diskmg/mount", func(w http.ResponseWriter, r *http.Request) {
  105. //Mount option require passing in all filesystem handlers
  106. diskmg.HandleMount(w, r, fsHandlers)
  107. })
  108. adminRouter.HandleFunc("/system/disk/diskmg/format", func(w http.ResponseWriter, r *http.Request) {
  109. //Format option require passing in all filesystem handlers
  110. diskmg.HandleFormat(w, r, fsHandlers)
  111. })
  112. adminRouter.HandleFunc("/system/disk/diskmg/mpt", diskmg.HandleListMountPoints)
  113. }
  114. }
  115. }