backup.go 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. package main
  2. import (
  3. "encoding/json"
  4. "net/http"
  5. prout "imuslab.com/arozos/mod/prouter"
  6. )
  7. func backup_init() {
  8. //Register HybridBackup storage restore endpoints
  9. router := prout.NewModuleRouter(prout.RouterOption{
  10. AdminOnly: false,
  11. UserHandler: userHandler,
  12. DeniedHandler: func(w http.ResponseWriter, r *http.Request) {
  13. sendErrorResponse(w, "Permission Denied")
  14. },
  15. })
  16. router.HandleFunc("/system/backup/listRestorable", backup_listRestorable)
  17. }
  18. func backup_listRestorable(w http.ResponseWriter, r *http.Request) {
  19. //Get user accessiable storage pools
  20. userinfo, err := userHandler.GetUserInfoFromRequest(w, r)
  21. if err != nil {
  22. sendErrorResponse(w, "User not logged in")
  23. return
  24. }
  25. //Get Vroot ID from request
  26. vroot, err := mv(r, "vroot", true)
  27. if err != nil {
  28. sendErrorResponse(w, "Invalid vroot given")
  29. return
  30. }
  31. //Get fsh from the id
  32. fsh, err := GetFsHandlerByUUID(vroot)
  33. if err != nil {
  34. sendErrorResponse(w, err.Error())
  35. return
  36. }
  37. //Get the user's storage pool and list restorable by the user's storage pool access
  38. restorableReport, err := userinfo.HomeDirectories.HyperBackupManager.ListRestorable(fsh.UUID)
  39. if err != nil {
  40. sendErrorResponse(w, err.Error())
  41. return
  42. }
  43. js, _ := json.Marshal(restorableReport)
  44. sendJSONResponse(w, string(js))
  45. }