network.webdav.go 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. package main
  2. /*
  3. WebDAV Entry point
  4. author: tobychui
  5. */
  6. import (
  7. "encoding/json"
  8. "net/http"
  9. prout "imuslab.com/arozos/mod/prouter"
  10. awebdav "imuslab.com/arozos/mod/storage/webdav"
  11. )
  12. var (
  13. WebDavHandler *awebdav.Server
  14. )
  15. func WebDAVInit() {
  16. //Create a database table for webdav service
  17. sysdb.NewTable("webdav")
  18. //Create a new webdav server
  19. newserver := awebdav.NewServer(*host_name, "/webdav", *tmp_directory, *use_tls, userHandler)
  20. WebDavHandler = newserver
  21. //Check the webdav default state
  22. enabled := false
  23. if sysdb.KeyExists("webdav", "enabled") {
  24. sysdb.Read("webdav", "enabled", &enabled)
  25. }
  26. WebDavHandler.Enabled = enabled
  27. http.HandleFunc("/webdav", func(w http.ResponseWriter, r *http.Request) {
  28. WebDavHandler.HandleRequest(w, r)
  29. })
  30. http.HandleFunc("/system/network/webdav/list", WebDavHandler.HandleConnectionList)
  31. //Handle setting related functions
  32. router := prout.NewModuleRouter(prout.RouterOption{
  33. ModuleName: "File Manager",
  34. AdminOnly: false,
  35. UserHandler: userHandler,
  36. DeniedHandler: func(w http.ResponseWriter, r *http.Request) {
  37. sendErrorResponse(w, "Permission Denied")
  38. },
  39. })
  40. router.HandleFunc("/system/network/webdav/edit", WebDavHandler.HandlePermissionEdit)
  41. router.HandleFunc("/system/network/webdav/clear", WebDavHandler.HandleClearAllPending)
  42. router.HandleFunc("/system/network/webdav/status", func(w http.ResponseWriter, r *http.Request) {
  43. //Show status for every user, only allow change if admin
  44. userinfo, _ := userHandler.GetUserInfoFromRequest(w, r)
  45. isAdmin := userinfo.IsAdmin()
  46. set, _ := mv(r, "set", false)
  47. if set == "" {
  48. //Return the current status
  49. results := []bool{WebDavHandler.Enabled, isAdmin}
  50. js, _ := json.Marshal(results)
  51. sendJSONResponse(w, string(js))
  52. } else if isAdmin && set == "disable" {
  53. WebDavHandler.Enabled = false
  54. sysdb.Write("webdav", "enabled", false)
  55. sendOK(w)
  56. } else if isAdmin && set == "enable" {
  57. WebDavHandler.Enabled = true
  58. sysdb.Write("webdav", "enabled", true)
  59. sendOK(w)
  60. } else {
  61. sendErrorResponse(w, "Permission Denied")
  62. }
  63. })
  64. //Register settings
  65. registerSetting(settingModule{
  66. Name: "WebDAV Server",
  67. Desc: "WebDAV Server",
  68. IconPath: "SystemAO/info/img/small_icon.png",
  69. Group: "Network",
  70. StartDir: "SystemAO/disk/webdav.html",
  71. })
  72. }