aboutsummaryrefslogtreecommitdiff
path: root/weed/ftpd/ftp_server.go
diff options
context:
space:
mode:
authorhilimd <68371223+hilimd@users.noreply.github.com>2020-11-05 12:02:47 +0800
committerGitHub <noreply@github.com>2020-11-05 12:02:47 +0800
commit546f1bcb903dd26ba447cdbedb972736fdb31b42 (patch)
tree09b8119faa7162acaa7240de5af6fd0bebe96c2f /weed/ftpd/ftp_server.go
parent843865f2ca534bb6286b7a3d79c436384d875608 (diff)
parent75887ba2a20b9f3f7ff9c4b8998cf3af0c0f48c2 (diff)
downloadseaweedfs-546f1bcb903dd26ba447cdbedb972736fdb31b42.tar.xz
seaweedfs-546f1bcb903dd26ba447cdbedb972736fdb31b42.zip
Merge pull request #34 from chrislusf/master
sync
Diffstat (limited to 'weed/ftpd/ftp_server.go')
-rw-r--r--weed/ftpd/ftp_server.go81
1 files changed, 81 insertions, 0 deletions
diff --git a/weed/ftpd/ftp_server.go b/weed/ftpd/ftp_server.go
new file mode 100644
index 000000000..4a0dca2c3
--- /dev/null
+++ b/weed/ftpd/ftp_server.go
@@ -0,0 +1,81 @@
+package ftpd
+
+import (
+ "crypto/tls"
+ "errors"
+ "fmt"
+ "net"
+
+ ftpserver "github.com/fclairamb/ftpserverlib"
+ "google.golang.org/grpc"
+)
+
+type FtpServerOption struct {
+ Filer string
+ IP string
+ IpBind string
+ Port int
+ FilerGrpcAddress string
+ FtpRoot string
+ GrpcDialOption grpc.DialOption
+ PassivePortStart int
+ PassivePortStop int
+}
+
+type SftpServer struct {
+ option *FtpServerOption
+ ftpListener net.Listener
+}
+
+var _ = ftpserver.MainDriver(&SftpServer{})
+
+// NewServer returns a new FTP server driver
+func NewFtpServer(ftpListener net.Listener, option *FtpServerOption) (*SftpServer, error) {
+ var err error
+ server := &SftpServer{
+ option: option,
+ ftpListener: ftpListener,
+ }
+ return server, err
+}
+
+// GetSettings returns some general settings around the server setup
+func (s *SftpServer) GetSettings() (*ftpserver.Settings, error) {
+ var portRange *ftpserver.PortRange
+ if s.option.PassivePortStart > 0 && s.option.PassivePortStop > s.option.PassivePortStart {
+ portRange = &ftpserver.PortRange{
+ Start: s.option.PassivePortStart,
+ End: s.option.PassivePortStop,
+ }
+ }
+
+ return &ftpserver.Settings{
+ Listener: s.ftpListener,
+ ListenAddr: fmt.Sprintf("%s:%d", s.option.IpBind, s.option.Port),
+ PublicHost: s.option.IP,
+ PassiveTransferPortRange: portRange,
+ ActiveTransferPortNon20: true,
+ IdleTimeout: -1,
+ ConnectionTimeout: 20,
+ }, nil
+}
+
+// ClientConnected is called to send the very first welcome message
+func (s *SftpServer) ClientConnected(cc ftpserver.ClientContext) (string, error) {
+ return "Welcome to SeaweedFS FTP Server", nil
+}
+
+// ClientDisconnected is called when the user disconnects, even if he never authenticated
+func (s *SftpServer) ClientDisconnected(cc ftpserver.ClientContext) {
+}
+
+// AuthUser authenticates the user and selects an handling driver
+func (s *SftpServer) AuthUser(cc ftpserver.ClientContext, username, password string) (ftpserver.ClientDriver, error) {
+ return nil, nil
+}
+
+// GetTLSConfig returns a TLS Certificate to use
+// The certificate could frequently change if we use something like "let's encrypt"
+func (s *SftpServer) GetTLSConfig() (*tls.Config, error) {
+ return nil, errors.New("no TLS certificate configured")
+}