|
@@ -9,6 +9,7 @@ import (
|
|
|
"imuslab.com/arozos/mod/common"
|
|
|
"imuslab.com/arozos/mod/fileservers"
|
|
|
"imuslab.com/arozos/mod/fileservers/servers/ftpserv"
|
|
|
+ "imuslab.com/arozos/mod/fileservers/servers/sftpserv"
|
|
|
"imuslab.com/arozos/mod/fileservers/servers/webdavserv"
|
|
|
network "imuslab.com/arozos/mod/network"
|
|
|
mdns "imuslab.com/arozos/mod/network/mdns"
|
|
@@ -30,6 +31,7 @@ var (
|
|
|
//File Server Managers
|
|
|
FTPManager *ftpserv.Manager
|
|
|
WebDAVManager *webdavserv.Manager
|
|
|
+ SFTPManager *sftpserv.Manager
|
|
|
)
|
|
|
|
|
|
func NetworkServiceInit() {
|
|
@@ -238,7 +240,7 @@ func StopNetworkServices() {
|
|
|
|
|
|
*/
|
|
|
|
|
|
-var networkFileServerDaemon []fileservers.Server = []fileservers.Server{}
|
|
|
+var networkFileServerDaemon []*fileservers.Server = []*fileservers.Server{}
|
|
|
|
|
|
//Initiate all File Server services
|
|
|
func FileServerInit() {
|
|
@@ -272,6 +274,19 @@ func FileServerInit() {
|
|
|
})
|
|
|
|
|
|
//Create File Server Managers
|
|
|
+ webdavPort := *listen_port
|
|
|
+ if *use_tls {
|
|
|
+ webdavPort = *tls_listen_port
|
|
|
+ }
|
|
|
+ WebDAVManager = webdavserv.NewWebDAVManager(&webdavserv.ManagerOption{
|
|
|
+ Sysdb: sysdb,
|
|
|
+ Hostname: *host_name,
|
|
|
+ TmpDir: *tmp_directory,
|
|
|
+ Port: webdavPort,
|
|
|
+ UseTls: *use_tls,
|
|
|
+ UserHandler: userHandler,
|
|
|
+ })
|
|
|
+
|
|
|
FTPManager = ftpserv.NewFTPManager(&ftpserv.ManagerOption{
|
|
|
Hostname: *host_name,
|
|
|
TmpFolder: *tmp_directory,
|
|
@@ -283,67 +298,118 @@ func FileServerInit() {
|
|
|
AllowUpnp: *allow_upnp,
|
|
|
})
|
|
|
|
|
|
- webdavPort := *listen_port
|
|
|
- if *use_tls {
|
|
|
- webdavPort = *tls_listen_port
|
|
|
- }
|
|
|
- WebDAVManager = webdavserv.NewWebDAVManager(&webdavserv.ManagerOption{
|
|
|
+ SFTPManager = sftpserv.NewSFTPServer(&sftpserv.ManagerOption{
|
|
|
+ UserManager: userHandler,
|
|
|
+ KeyFile: "system/auth/id_rsa.key",
|
|
|
+ Logger: systemWideLogger,
|
|
|
Sysdb: sysdb,
|
|
|
- Hostname: *host_name,
|
|
|
- TmpDir: *tmp_directory,
|
|
|
- Port: webdavPort,
|
|
|
- UseTls: *use_tls,
|
|
|
- UserHandler: userHandler,
|
|
|
})
|
|
|
|
|
|
//Register Endpoints
|
|
|
+ //WebDAV
|
|
|
+ http.HandleFunc("/system/network/webdav/list", WebDAVManager.HandleConnectionList)
|
|
|
+ router.HandleFunc("/system/network/webdav/edit", WebDAVManager.HandlePermissionEdit)
|
|
|
+ router.HandleFunc("/system/network/webdav/clear", WebDAVManager.HandleClearAllPending)
|
|
|
+ router.HandleFunc("/system/network/webdav/status", WebDAVManager.HandleStatusChange)
|
|
|
+
|
|
|
//FTP
|
|
|
- adminRouter.HandleFunc("/system/storage/ftp/start", FTPManager.HandleFTPServerStart)
|
|
|
- adminRouter.HandleFunc("/system/storage/ftp/stop", FTPManager.HandleFTPServerStop)
|
|
|
+ //adminRouter.HandleFunc("/system/storage/ftp/start", FTPManager.HandleFTPServerStart)
|
|
|
+ //adminRouter.HandleFunc("/system/storage/ftp/stop", FTPManager.HandleFTPServerStop)
|
|
|
adminRouter.HandleFunc("/system/storage/ftp/upnp", FTPManager.HandleFTPUPnP)
|
|
|
adminRouter.HandleFunc("/system/storage/ftp/status", FTPManager.HandleFTPServerStatus)
|
|
|
adminRouter.HandleFunc("/system/storage/ftp/updateGroups", FTPManager.HandleFTPAccessUpdate)
|
|
|
adminRouter.HandleFunc("/system/storage/ftp/setPort", FTPManager.HandleFTPSetPort)
|
|
|
adminRouter.HandleFunc("/system/storage/ftp/passivemode", FTPManager.HandleFTPPassiveModeSettings)
|
|
|
|
|
|
- //WebDAV
|
|
|
- http.HandleFunc("/system/network/webdav/list", WebDAVManager.HandleConnectionList)
|
|
|
- router.HandleFunc("/system/network/webdav/edit", WebDAVManager.HandlePermissionEdit)
|
|
|
- router.HandleFunc("/system/network/webdav/clear", WebDAVManager.HandleClearAllPending)
|
|
|
- router.HandleFunc("/system/network/webdav/status", WebDAVManager.HandleStatusChange)
|
|
|
+ networkFileServerDaemon = append(networkFileServerDaemon, &fileservers.Server{
|
|
|
+ ID: "webdav",
|
|
|
+ Name: "WebDAV",
|
|
|
+ Desc: "WebDAV Server",
|
|
|
+ IconPath: "img/system/network-folder-blue.svg",
|
|
|
+ DefaultPorts: []int{},
|
|
|
+ Ports: []int{},
|
|
|
+ ForwardPortIfUpnp: false,
|
|
|
+ ConnInstrPage: "SystemAO/disk/instr/webdav.html",
|
|
|
+ ConfigPage: "SystemAO/disk/webdav.html",
|
|
|
+ EnableCheck: WebDAVManager.GetWebDavEnabled,
|
|
|
+ ToggleFunc: WebDAVManager.WebDavToogle,
|
|
|
+ GetEndpoints: WebDAVManager.WebDavGetEndpoints,
|
|
|
+ })
|
|
|
|
|
|
- networkFileServerDaemon = append(networkFileServerDaemon, fileservers.Server{
|
|
|
+ networkFileServerDaemon = append(networkFileServerDaemon, &fileservers.Server{
|
|
|
+ ID: "sftp",
|
|
|
+ Name: "SFTP",
|
|
|
+ Desc: "SSH File Transfer Protocol Server",
|
|
|
+ IconPath: "img/system/network-folder-sftp.svg",
|
|
|
+ DefaultPorts: []int{2022},
|
|
|
+ Ports: []int{},
|
|
|
+ ForwardPortIfUpnp: true,
|
|
|
+ ConnInstrPage: "SystemAO/disk/instr/sftp.html",
|
|
|
+ ConfigPage: "SystemAO/disk/sftp.html",
|
|
|
+ EnableCheck: SFTPManager.IsEnabled,
|
|
|
+ ToggleFunc: SFTPManager.ServerToggle,
|
|
|
+ GetEndpoints: SFTPManager.GetEndpoints,
|
|
|
+ })
|
|
|
+
|
|
|
+ networkFileServerDaemon = append(networkFileServerDaemon, &fileservers.Server{
|
|
|
ID: "ftp",
|
|
|
Name: "FTP",
|
|
|
Desc: "File Transfer Protocol Server",
|
|
|
IconPath: "img/system/network-folder.svg",
|
|
|
DefaultPorts: []int{21, 22, 23},
|
|
|
Ports: []int{},
|
|
|
- Enabled: false,
|
|
|
ForwardPortIfUpnp: true,
|
|
|
- ConnInstrPage: "SystemAO/disk/ftp.html",
|
|
|
+ ConnInstrPage: "SystemAO/disk/instr/ftp.html",
|
|
|
ConfigPage: "SystemAO/disk/ftp.html",
|
|
|
+ EnableCheck: FTPManager.IsFtpServerEnabled,
|
|
|
ToggleFunc: FTPManager.FTPServerToggle,
|
|
|
GetEndpoints: FTPManager.FTPGetEndpoints,
|
|
|
})
|
|
|
|
|
|
- networkFileServerDaemon = append(networkFileServerDaemon, fileservers.Server{
|
|
|
- ID: "webdav",
|
|
|
- Name: "WebDAV",
|
|
|
- Desc: "WebDAV Server",
|
|
|
- IconPath: "img/system/network-folder-blue.svg",
|
|
|
- DefaultPorts: []int{},
|
|
|
- Ports: []int{},
|
|
|
- Enabled: false,
|
|
|
- ForwardPortIfUpnp: false,
|
|
|
- ConnInstrPage: "SystemAO/disk/webdav.html",
|
|
|
- ConfigPage: "SystemAO/disk/webdav.html",
|
|
|
- ToggleFunc: WebDAVManager.WebDavToogle,
|
|
|
- GetEndpoints: WebDAVManager.WebDavGetEndpoints,
|
|
|
- })
|
|
|
-
|
|
|
router.HandleFunc("/system/network/server/list", NetworkHandleGetFileServerServiceList)
|
|
|
router.HandleFunc("/system/network/server/endpoints", NetworkHandleGetFileServerEndpoints)
|
|
|
+ router.HandleFunc("/system/network/server/status", NetworkHandleGetFileServerStatus)
|
|
|
+ adminRouter.HandleFunc("/system/network/server/toggle", NetworkHandleFileServerToggle)
|
|
|
+}
|
|
|
+
|
|
|
+//Toggle the target File Server Services
|
|
|
+func NetworkHandleFileServerToggle(w http.ResponseWriter, r *http.Request) {
|
|
|
+ servid, err := common.Mv(r, "id", true)
|
|
|
+ if err != nil {
|
|
|
+ common.SendErrorResponse(w, "invalid service id given")
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ newState, err := common.Mv(r, "enable", true)
|
|
|
+ if err != nil {
|
|
|
+ common.SendErrorResponse(w, "undefined enable state")
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ targetfserv := fileservers.GetFileServerById(networkFileServerDaemon, servid)
|
|
|
+ if targetfserv == nil {
|
|
|
+ common.SendErrorResponse(w, "target service not exists")
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ if newState == "true" {
|
|
|
+ //Start up the target service
|
|
|
+ err = targetfserv.ToggleFunc(true)
|
|
|
+ if err != nil {
|
|
|
+ common.SendErrorResponse(w, "startup failed: "+err.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+ } else if newState == "false" {
|
|
|
+ err = targetfserv.ToggleFunc(false)
|
|
|
+ if err != nil {
|
|
|
+ common.SendErrorResponse(w, "shutdown failed: "+err.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ common.SendErrorResponse(w, "unknown state keyword")
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
}
|
|
|
|
|
|
//Return a list of supported File Server Services
|
|
@@ -352,6 +418,32 @@ func NetworkHandleGetFileServerServiceList(w http.ResponseWriter, r *http.Reques
|
|
|
common.SendJSONResponse(w, string(js))
|
|
|
}
|
|
|
|
|
|
+//Get the status of a file server type.
|
|
|
+func NetworkHandleGetFileServerStatus(w http.ResponseWriter, r *http.Request) {
|
|
|
+ servid, _ := common.Mv(r, "id", false)
|
|
|
+ if servid == "" {
|
|
|
+ //List all state in map
|
|
|
+ result := map[string]bool{}
|
|
|
+ for _, fserv := range networkFileServerDaemon {
|
|
|
+ result[fserv.ID] = fserv.EnableCheck()
|
|
|
+ }
|
|
|
+
|
|
|
+ js, _ := json.Marshal(result)
|
|
|
+ common.SendJSONResponse(w, string(js))
|
|
|
+ } else {
|
|
|
+ //ID is defined. Get the target server and return its status
|
|
|
+ targetfserv := fileservers.GetFileServerById(networkFileServerDaemon, servid)
|
|
|
+ if targetfserv == nil {
|
|
|
+ common.SendErrorResponse(w, "target file server type not found")
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ js, _ := json.Marshal(targetfserv.EnableCheck())
|
|
|
+ common.SendJSONResponse(w, string(js))
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+//Get a list of endpoint usable by this service
|
|
|
func NetworkHandleGetFileServerEndpoints(w http.ResponseWriter, r *http.Request) {
|
|
|
userinfo, err := userHandler.GetUserInfoFromRequest(w, r)
|
|
|
if err != nil {
|