handler.go 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154
  1. package ftpserv
  2. import (
  3. "encoding/json"
  4. "net/http"
  5. "strconv"
  6. "strings"
  7. "imuslab.com/arozos/mod/storage/ftp"
  8. "imuslab.com/arozos/mod/utils"
  9. )
  10. //Start the FTP Server by request
  11. func (m *Manager) HandleFTPServerStart(w http.ResponseWriter, r *http.Request) {
  12. err := m.StartFtpServer()
  13. if err != nil {
  14. utils.SendErrorResponse(w, err.Error())
  15. }
  16. utils.SendOK(w)
  17. }
  18. //Stop the FTP server by request
  19. func (m *Manager) HandleFTPServerStop(w http.ResponseWriter, r *http.Request) {
  20. m.StopFtpServer()
  21. utils.SendOK(w)
  22. }
  23. //Get the FTP server status
  24. func (m *Manager) HandleFTPServerStatus(w http.ResponseWriter, r *http.Request) {
  25. status, err := m.GetFtpServerStatus()
  26. if err != nil {
  27. utils.SendErrorResponse(w, err.Error())
  28. return
  29. }
  30. js, _ := json.Marshal(status)
  31. utils.SendJSONResponse(w, string(js))
  32. }
  33. //Update UPnP setting on FTP server
  34. func (m *Manager) HandleFTPUPnP(w http.ResponseWriter, r *http.Request) {
  35. enable, _ := utils.Mv(r, "enable", false)
  36. if enable == "true" {
  37. m.option.Logger.PrintAndLog("FTP", "Enabling UPnP on FTP Server Port", nil)
  38. m.option.Sysdb.Write("ftp", "upnp", true)
  39. } else {
  40. m.option.Logger.PrintAndLog("FTP", "Disabling UPnP on FTP Server Port", nil)
  41. m.option.Sysdb.Write("ftp", "upnp", false)
  42. }
  43. //Restart FTP Server if server is running
  44. if m.option.FtpServer != nil && m.option.FtpServer.ServerRunning {
  45. m.StartFtpServer()
  46. }
  47. utils.SendOK(w)
  48. }
  49. //Update access permission on FTP server
  50. func (m *Manager) HandleFTPAccessUpdate(w http.ResponseWriter, r *http.Request) {
  51. //Get groups paramter from post req
  52. groupString, err := utils.Mv(r, "groups", true)
  53. if err != nil {
  54. utils.SendErrorResponse(w, "groups not defined")
  55. return
  56. }
  57. //Prase it
  58. groups := []string{}
  59. err = json.Unmarshal([]byte(groupString), &groups)
  60. if err != nil {
  61. utils.SendErrorResponse(w, "Unable to parse groups")
  62. return
  63. }
  64. m.option.Logger.PrintAndLog("FTP", "Updating FTP Access group to: "+strings.Join(groups, ","), nil)
  65. //Set the accessable group
  66. ftp.UpdateAccessableGroups(m.option.Sysdb, groups)
  67. utils.SendOK(w)
  68. }
  69. //Handle FTP Set access port
  70. func (m *Manager) HandleFTPSetPort(w http.ResponseWriter, r *http.Request) {
  71. port, err := utils.Mv(r, "port", true)
  72. if err != nil {
  73. utils.SendErrorResponse(w, "Port not defined")
  74. return
  75. }
  76. //Try parse the port into int
  77. portInt, err := strconv.Atoi(port)
  78. if err != nil {
  79. utils.SendErrorResponse(w, "Invalid port number")
  80. return
  81. }
  82. //Update the database port configuration
  83. m.option.Sysdb.Write("ftp", "port", portInt)
  84. //Restart the FTP server
  85. m.StartFtpServer()
  86. utils.SendOK(w)
  87. }
  88. /*
  89. Handle the settings for passive mode related files
  90. Example set commands
  91. set=ip&ip=123.456.789.1
  92. set=mode&passive=true
  93. */
  94. func (m *Manager) HandleFTPPassiveModeSettings(w http.ResponseWriter, r *http.Request) {
  95. set, err := utils.Mv(r, "set", true)
  96. if err != nil {
  97. utils.SendErrorResponse(w, "Invalid set type")
  98. return
  99. }
  100. if set == "ip" {
  101. //Update the public up addr
  102. ip, err := utils.Mv(r, "ip", true)
  103. if err != nil {
  104. utils.SendErrorResponse(w, "Invalid ip given")
  105. return
  106. }
  107. m.option.Sysdb.Write("ftp", "publicip", ip)
  108. } else if set == "mode" {
  109. //Update the passive mode setting
  110. passive, err := utils.Mv(r, "passive", true)
  111. if err != nil {
  112. utils.SendErrorResponse(w, "Invalid passive option (true/false)")
  113. return
  114. }
  115. m.option.Logger.PrintAndLog("FTP", "Updating FTP Server PassiveMode to "+passive, nil)
  116. if passive == "true" {
  117. m.option.Sysdb.Write("ftp", "passive", true)
  118. } else {
  119. m.option.Sysdb.Write("ftp", "passive", false)
  120. }
  121. } else {
  122. utils.SendErrorResponse(w, "Unknown setting filed")
  123. return
  124. }
  125. //Restart the FTP server if it is running now
  126. if m.option.FtpServer != nil && m.option.FtpServer.ServerRunning {
  127. m.StartFtpServer()
  128. }
  129. }