123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154 |
- package ftpserv
- import (
- "encoding/json"
- "net/http"
- "strconv"
- "strings"
- "imuslab.com/arozos/mod/storage/ftp"
- "imuslab.com/arozos/mod/utils"
- )
- //Start the FTP Server by request
- func (m *Manager) HandleFTPServerStart(w http.ResponseWriter, r *http.Request) {
- err := m.StartFtpServer()
- if err != nil {
- utils.SendErrorResponse(w, err.Error())
- }
- utils.SendOK(w)
- }
- //Stop the FTP server by request
- func (m *Manager) HandleFTPServerStop(w http.ResponseWriter, r *http.Request) {
- m.StopFtpServer()
- utils.SendOK(w)
- }
- //Get the FTP server status
- func (m *Manager) HandleFTPServerStatus(w http.ResponseWriter, r *http.Request) {
- status, err := m.GetFtpServerStatus()
- if err != nil {
- utils.SendErrorResponse(w, err.Error())
- return
- }
- js, _ := json.Marshal(status)
- utils.SendJSONResponse(w, string(js))
- }
- //Update UPnP setting on FTP server
- func (m *Manager) HandleFTPUPnP(w http.ResponseWriter, r *http.Request) {
- enable, _ := utils.Mv(r, "enable", false)
- if enable == "true" {
- m.option.Logger.PrintAndLog("FTP", "Enabling UPnP on FTP Server Port", nil)
- m.option.Sysdb.Write("ftp", "upnp", true)
- } else {
- m.option.Logger.PrintAndLog("FTP", "Disabling UPnP on FTP Server Port", nil)
- m.option.Sysdb.Write("ftp", "upnp", false)
- }
- //Restart FTP Server if server is running
- if m.option.FtpServer != nil && m.option.FtpServer.ServerRunning {
- m.StartFtpServer()
- }
- utils.SendOK(w)
- }
- //Update access permission on FTP server
- func (m *Manager) HandleFTPAccessUpdate(w http.ResponseWriter, r *http.Request) {
- //Get groups paramter from post req
- groupString, err := utils.Mv(r, "groups", true)
- if err != nil {
- utils.SendErrorResponse(w, "groups not defined")
- return
- }
- //Prase it
- groups := []string{}
- err = json.Unmarshal([]byte(groupString), &groups)
- if err != nil {
- utils.SendErrorResponse(w, "Unable to parse groups")
- return
- }
- m.option.Logger.PrintAndLog("FTP", "Updating FTP Access group to: "+strings.Join(groups, ","), nil)
- //Set the accessable group
- ftp.UpdateAccessableGroups(m.option.Sysdb, groups)
- utils.SendOK(w)
- }
- //Handle FTP Set access port
- func (m *Manager) HandleFTPSetPort(w http.ResponseWriter, r *http.Request) {
- port, err := utils.Mv(r, "port", true)
- if err != nil {
- utils.SendErrorResponse(w, "Port not defined")
- return
- }
- //Try parse the port into int
- portInt, err := strconv.Atoi(port)
- if err != nil {
- utils.SendErrorResponse(w, "Invalid port number")
- return
- }
- //Update the database port configuration
- m.option.Sysdb.Write("ftp", "port", portInt)
- //Restart the FTP server
- m.StartFtpServer()
- utils.SendOK(w)
- }
- /*
- Handle the settings for passive mode related files
- Example set commands
- set=ip&ip=123.456.789.1
- set=mode&passive=true
- */
- func (m *Manager) HandleFTPPassiveModeSettings(w http.ResponseWriter, r *http.Request) {
- set, err := utils.Mv(r, "set", true)
- if err != nil {
- utils.SendErrorResponse(w, "Invalid set type")
- return
- }
- if set == "ip" {
- //Update the public up addr
- ip, err := utils.Mv(r, "ip", true)
- if err != nil {
- utils.SendErrorResponse(w, "Invalid ip given")
- return
- }
- m.option.Sysdb.Write("ftp", "publicip", ip)
- } else if set == "mode" {
- //Update the passive mode setting
- passive, err := utils.Mv(r, "passive", true)
- if err != nil {
- utils.SendErrorResponse(w, "Invalid passive option (true/false)")
- return
- }
- m.option.Logger.PrintAndLog("FTP", "Updating FTP Server PassiveMode to "+passive, nil)
- if passive == "true" {
- m.option.Sysdb.Write("ftp", "passive", true)
- } else {
- m.option.Sysdb.Write("ftp", "passive", false)
- }
- } else {
- utils.SendErrorResponse(w, "Unknown setting filed")
- return
- }
- //Restart the FTP server if it is running now
- if m.option.FtpServer != nil && m.option.FtpServer.ServerRunning {
- m.StartFtpServer()
- }
- }
|