123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 |
- package sftpserv
- import (
- "strconv"
- "imuslab.com/arozos/mod/database"
- "imuslab.com/arozos/mod/fileservers"
- "imuslab.com/arozos/mod/info/logger"
- "imuslab.com/arozos/mod/storage/sftpserver"
- user "imuslab.com/arozos/mod/user"
- )
- type ManagerOption struct {
- UserManager *user.UserHandler
- KeyFile string
- Logger *logger.Logger
- Sysdb *database.Database
- }
- type Manager struct {
- Enabled bool
- listeningPort int
- instance *sftpserver.Instance
- option *ManagerOption
- config *sftpserver.SFTPConfig
- }
- func NewSFTPServer(option *ManagerOption) *Manager {
- option.Sysdb.NewTable("sftp")
- i, lp, err := newSFTPServerInstance(option.KeyFile, option.Sysdb, option.UserManager)
- return &Manager{
- Enabled: err != nil,
- listeningPort: lp,
- instance: i,
- option: option,
- }
- }
- func newSFTPServerInstance(keyfile string, sysdb *database.Database, userManager *user.UserHandler) (*sftpserver.Instance, int, error) {
- //Load default port from database
- defaultListeningPort := 2022
- if sysdb.KeyExists("sftp", "port") {
- sysdb.Read("sftp", "port", &defaultListeningPort)
- }
- //Create an SFTP Server
- var currentConfig = sftpserver.SFTPConfig{
- ListeningIP: "0.0.0.0:" + strconv.Itoa(defaultListeningPort),
- KeyFile: keyfile,
- UserManager: userManager,
- }
- i, err := sftpserver.NewSFTPServer(¤tConfig)
- return i, defaultListeningPort, err
- }
- /*
- Handlers for handling config change
- */
- //Get or Set listening port for SFTP
- func (m *Manager) HandleListeningPort() {
- }
- /*
- Functions requested by the file server service router
- */
- func (m *Manager) ServerToggle(enabled bool) error {
- if m.instance != nil && !enabled {
- //Shutdown the running instances
- m.instance.Close()
- m.instance = nil
- } else if m.instance == nil && enabled {
- //Startup a new instance
- i, lp, err := newSFTPServerInstance(m.option.KeyFile, m.option.Sysdb, m.option.UserManager)
- if err != nil {
- return err
- }
- m.listeningPort = lp
- m.instance = i
- }
- return nil
- }
- func (m *Manager) IsEnabled() bool {
- return m.instance != nil && !m.instance.Closed
- }
- func (m *Manager) GetEndpoints(userinfo *user.User) []*fileservers.Endpoint {
- eps := []*fileservers.Endpoint{}
- eps = append(eps, &fileservers.Endpoint{
- ProtocolName: "sftp://",
- Port: m.listeningPort,
- Subpath: "",
- })
- return eps
- }
|