123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166 |
- package main
- /*
- ArOZ Online Disk Service Endpoint Handler
- This is a module to provide access to the disk services
- */
- import (
- "net/http"
- "imuslab.com/arozos/mod/disk/diskcapacity"
- "imuslab.com/arozos/mod/disk/diskmg"
- diskspace "imuslab.com/arozos/mod/disk/diskspace"
- smart "imuslab.com/arozos/mod/disk/smart"
- sortfile "imuslab.com/arozos/mod/disk/sortfile"
- prout "imuslab.com/arozos/mod/prouter"
- "imuslab.com/arozos/mod/utils"
- )
- func DiskServiceInit() {
- //Register Disk Utilities under System Setting
- //Disk info are only viewable by administrator
- router := prout.NewModuleRouter(prout.RouterOption{
- ModuleName: "System Setting",
- AdminOnly: false,
- UserHandler: userHandler,
- DeniedHandler: func(w http.ResponseWriter, r *http.Request) {
- utils.SendErrorResponse(w, "Permission Denied")
- },
- })
- //Anyone logged in can load router
- authRouter := prout.NewModuleRouter(prout.RouterOption{
- AdminOnly: false,
- UserHandler: userHandler,
- DeniedHandler: func(w http.ResponseWriter, r *http.Request) {
- utils.SendErrorResponse(w, "Permission Denied")
- },
- })
- //Disk Space Display endpoint
- router.HandleFunc("/system/disk/space/list", diskspace.HandleDiskSpaceList)
- //Handle Virtual Disk Properties display endpoints
- dc := diskcapacity.NewCapacityResolver(userHandler)
- router.HandleFunc("/system/disk/space/resolve", dc.HandleCapacityResolving)
- authRouter.HandleFunc("/system/disk/space/tmp", dc.HandleTmpCapacityResolving)
- //New Large File Scanner
- lfs := sortfile.NewLargeFileScanner(userHandler)
- router.HandleFunc("/system/disk/space/largeFiles", lfs.HandleLargeFileList)
- //Register settings
- registerSetting(settingModule{
- Name: "Space Finder",
- Desc: "Reclaim Storage Space on Disks",
- IconPath: "SystemAO/disk/space/img/small_icon.png",
- Group: "Disk",
- StartDir: "SystemAO/disk/space/finder.html",
- RequireAdmin: false,
- })
- if *allow_hardware_management {
- //Displaying remaining space on disk, only enabled when allow hardware is true
- registerSetting(settingModule{
- Name: "Disk Space",
- Desc: "System Storage Space on Disks",
- IconPath: "SystemAO/disk/space/img/small_icon.png",
- Group: "Disk",
- StartDir: "SystemAO/disk/space/diskspace.html",
- RequireAdmin: false,
- })
- }
- //Register Disk SMART services
- if sudo_mode {
- //Create a new admin router
- adminRouter := prout.NewModuleRouter(prout.RouterOption{
- ModuleName: "System Setting",
- AdminOnly: true,
- UserHandler: userHandler,
- DeniedHandler: func(w http.ResponseWriter, r *http.Request) {
- utils.SendErrorResponse(w, "Permission Denied")
- },
- })
- /*
- SMART Listener
- Handle disk SMART and disk information
- See disk/SMART for more information
- */
- if *allow_hardware_management {
- smartListener, err := smart.NewSmartListener()
- if err != nil {
- //Listener creation failed
- systemWideLogger.PrintAndLog("Disk", "Failed to create SMART listener: "+err.Error(), err)
- } else {
- //Listener created. Register endpoints
- //Register as a system setting
- registerSetting(settingModule{
- Name: "Disk SMART",
- Desc: "HardDisk Health Checking",
- IconPath: "SystemAO/disk/smart/img/small_icon.png",
- Group: "Disk",
- StartDir: "SystemAO/disk/smart/smart.html",
- RequireAdmin: true,
- })
- /*
- registerSetting(settingModule{
- Name: "SMART Log",
- Desc: "HardDisk Health Log",
- IconPath: "SystemAO/disk/smart/img/small_icon.png",
- Group: "Disk",
- StartDir: "SystemAO/disk/smart/log.html",
- RequireAdmin: true,
- })
- */
- adminRouter.HandleFunc("/system/disk/smart/getSMART", smartListener.GetSMART)
- }
- }
- /*
- Disk Manager Initialization
- See disk/diskmg.go for more details
- For setting register, see setting.advance.go
- */
- if *allow_hardware_management {
- adminRouter.HandleFunc("/system/disk/diskmg/view", diskmg.HandleView)
- adminRouter.HandleFunc("/system/disk/diskmg/platform", diskmg.HandlePlatform)
- adminRouter.HandleFunc("/system/disk/diskmg/mount", func(w http.ResponseWriter, r *http.Request) {
- //Mount option require passing in all filesystem handlers
- allFsh := GetAllLoadedFsh()
- diskmg.HandleMount(w, r, allFsh)
- })
- adminRouter.HandleFunc("/system/disk/diskmg/format", func(w http.ResponseWriter, r *http.Request) {
- //Check if request are made in POST mode
- if r.Method != http.MethodPost {
- w.WriteHeader(http.StatusMethodNotAllowed)
- w.Write([]byte("405 - Method Not Allowed"))
- return
- }
- //Check if ArozOS is running in sudo mode
- if !sudo_mode {
- w.WriteHeader(http.StatusUnauthorized)
- w.Write([]byte("401 - Unauthorized (Is ArozOS running in sudo mode?)"))
- return
- }
- //Format option require passing in all filesystem handlers
- allFsh := GetAllLoadedFsh()
- diskmg.HandleFormat(w, r, allFsh)
- })
- adminRouter.HandleFunc("/system/disk/diskmg/mpt", diskmg.HandleListMountPoints)
- }
- }
- }
|