backup.go 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  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", false)
  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. }
  36. //Get the user's storage pool and list restorable by the user's storage pool access
  37. restorableReport, err := userinfo.HomeDirectories.HyperBackupManager.ListRestorable(fsh.UUID)
  38. if err != nil {
  39. sendErrorResponse(w, err.Error())
  40. return
  41. }
  42. js, _ := json.Marshal(restorableReport)
  43. sendJSONResponse(w, string(js))
  44. }