ftp

package
v1.0.10 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 21, 2019 License: MIT Imports: 13 Imported by: 0

Documentation

Overview

Package ftp is the entry for tfp service

Index

Constants

This section is empty.

Variables

View Source
var (

	// Commands represent the ftp service start command
	Commands = []*cli.Command{
		{
			Name:      "ftp:start",
			Category:  category,
			Usage:     "start ftp service",
			UsageText: "ftp:start [command options]",
			Flags: []cli.Flag{
				&cli.StringFlag{
					Name:    "host",
					Aliases: []string{"H"},
					Usage:   "ftp server host",
					Value:   "::",
				},
				&cli.UintFlag{
					Name:    "port",
					Aliases: []string{"P"},
					Usage:   "ftp server port",
					Value:   2121,
				},
				&cli.StringFlag{
					Name:  "passive-ip",
					Usage: "ftp client connect to ftp server to transfer data in passive mode",
					Value: "",
				},
				&cli.StringFlag{
					Name:  "passive-port-range",
					Usage: "ftp server will pick a port random in the range, open the data connection tunnel in passive mode",
					Value: "52013-52114",
				},
				&cli.StringFlag{
					Name:  "welcome-message",
					Usage: "ftp server welcome message",
					Value: "welcome to bigfile ftp server",
				},
				&cli.BoolFlag{
					Name:  "tls-enable",
					Usage: "determine whether enable tls",
					Value: false,
				},
				&cli.StringFlag{
					Name:  "cert-file",
					Usage: "tls certificate file",
					Value: "",
				},
				&cli.StringFlag{
					Name:  "key-file",
					Usage: "tls certificate key file",
					Value: "",
				},
			},
			Action: func(ctx *cli.Context) error {
				logger := &loggerAdapter{log.MustNewLogger(nil)}
				passivePortRange := ctx.String("passive-port-range")
				if len(passivePortRange) > 0 {
					portRange := strings.Split(passivePortRange, "-")
					if len(portRange) != 2 {
						return errors.New("wrong passive-port-range format, eg: 52013-52114")
					}
					if _, err := strconv.Atoi(portRange[0]); err != nil {
						return err
					}
					if _, err := strconv.Atoi(portRange[1]); err != nil {
						return err
					}
					if portRange[0] >= portRange[1] {
						return errors.New("port start should be less than port end")
					}
				}
				host := ctx.String("host")
				port := int(ctx.Uint("port"))
				options := &server.ServerOpts{
					TLS:            ctx.Bool("tls-enable"),
					Auth:           &ftp.Auth{},
					Port:           port,
					Logger:         logger,
					Factory:        &ftp.Factory{},
					KeyFile:        ctx.String("key-file"),
					Hostname:       host,
					CertFile:       ctx.String("cert-file"),
					PublicIp:       ctx.String("passive-ip"),
					PassivePorts:   passivePortRange,
					ExplicitFTPS:   ctx.Bool("tls-enable"),
					WelcomeMessage: ctx.String("welcome-message"),
				}
				return server.NewServer(options).ListenAndServe()
			},
			Before: func(context *cli.Context) (err error) {
				db := databases.MustNewConnection(&config.DefaultConfig.Database)
				if err = db.Exec(fmt.Sprintf("CREATE DATABASE IF NOT EXISTS %s", config.DefaultConfig.Database.DBName)).Error; err != nil {
					return
				}
				migrate.DefaultMC.SetConnection(db)
				migrate.DefaultMC.Upgrade()
				return nil
			},
		},
	}
)

Functions

This section is empty.

Types

This section is empty.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL