Documentation ¶
Index ¶
- Variables
- func Version() string
- type Auth
- type Command
- type Conn
- type DataSocket
- type DiscardLogger
- func (logger *DiscardLogger) Print(sessionId string, message interface{})
- func (logger *DiscardLogger) PrintCommand(sessionId string, command string, params string)
- func (logger *DiscardLogger) PrintResponse(sessionId string, code int, message string)
- func (logger *DiscardLogger) Printf(sessionId string, format string, v ...interface{})
- type Driver
- type DriverFactory
- type FileInfo
- type Logger
- type Perm
- type Server
- type ServerOpts
- type SimpleAuth
- type SimplePerm
- func (s *SimplePerm) ChGroup(string, string) error
- func (s *SimplePerm) ChMode(string, os.FileMode) error
- func (s *SimplePerm) ChOwner(string, string) error
- func (s *SimplePerm) GetGroup(string) (string, error)
- func (s *SimplePerm) GetMode(string) (os.FileMode, error)
- func (s *SimplePerm) GetOwner(string) (string, error)
- type StdLogger
- func (logger *StdLogger) Print(sessionId string, message interface{})
- func (logger *StdLogger) PrintCommand(sessionId string, command string, params string)
- func (logger *StdLogger) PrintResponse(sessionId string, code int, message string)
- func (logger *StdLogger) Printf(sessionId string, format string, v ...interface{})
Constants ¶
This section is empty.
Variables ¶
var ErrServerClosed = errors.New("ftp: Server closed")
ErrServerClosed is returned by ListenAndServe() or Serve() when a shutdown was requested.
Functions ¶
Types ¶
type Conn ¶
type Conn struct {
// contains filtered or unexported fields
}
func (*Conn) Close ¶
func (conn *Conn) Close()
Close will manually close this connection, even if the client isn't ready.
func (*Conn) PassivePort ¶
func (*Conn) Serve ¶
func (conn *Conn) Serve()
Serve starts an endless loop that reads FTP commands from the client and responds appropriately. terminated is a channel that will receive a true message when the connection closes. This loop will be running inside a goroutine, so use this channel to be notified when the connection can be cleaned up.
type DataSocket ¶
type DataSocket interface { Host() string Port() int // the standard io.Reader interface Read(p []byte) (n int, err error) // the standard io.ReaderFrom interface ReadFrom(r io.Reader) (int64, error) // the standard io.Writer interface Write(p []byte) (n int, err error) // the standard io.Closer interface Close() error }
DataSocket describes a data socket is used to send non-control data between the client and server.
type DiscardLogger ¶
type DiscardLogger struct{}
Silent logger, produces no output
func (*DiscardLogger) Print ¶
func (logger *DiscardLogger) Print(sessionId string, message interface{})
func (*DiscardLogger) PrintCommand ¶
func (logger *DiscardLogger) PrintCommand(sessionId string, command string, params string)
func (*DiscardLogger) PrintResponse ¶
func (logger *DiscardLogger) PrintResponse(sessionId string, code int, message string)
func (*DiscardLogger) Printf ¶
func (logger *DiscardLogger) Printf(sessionId string, format string, v ...interface{})
type Driver ¶
type Driver interface { // Init init Init(*Conn) // params - a file path // returns - a time indicating when the requested path was last modified // - an error if the file doesn't exist or the user lacks // permissions Stat(string) (FileInfo, error) // params - path // returns - true if the current user is permitted to change to the // requested path ChangeDir(string) error // params - path, function on file or subdir found // returns - error // path ListDir(string, func(FileInfo) error) error // params - path // returns - nil if the directory was deleted or any error encountered DeleteDir(string) error // params - path // returns - nil if the file was deleted or any error encountered DeleteFile(string) error // params - from_path, to_path // returns - nil if the file was renamed or any error encountered Rename(string, string) error // params - path // returns - nil if the new directory was created or any error encountered MakeDir(string) error // params - path // returns - a string containing the file data to send to the client GetFile(string, int64) (int64, io.ReadCloser, error) // params - destination path, an io.Reader containing the file data // returns - the number of bytes writen and the first error encountered while writing, if any. PutFile(string, io.Reader, bool) (int64, error) }
Driver is an interface that you will create an implementation that speaks to your chosen persistence layer. graval will create a new instance of your driver for each client that connects and delegate to it as required.
type DriverFactory ¶
DriverFactory is a driver factory to create driver. For each client that connects to the server, a new FTPDriver is required. Create an implementation if this interface and provide it to FTPServer.
type Server ¶
type Server struct { *ServerOpts // contains filtered or unexported fields }
Server is the root of your FTP application. You should instantiate one of these and call ListenAndServe() to start accepting client connections.
Always use the NewServer() method to create a new Server.
func NewServer ¶
func NewServer(opts *ServerOpts) *Server
NewServer initialises a new FTP server. Configuration options are provided via an instance of ServerOpts. Calling this function in your code will probably look something like this:
factory := &MyDriverFactory{} server := server.NewServer(&server.ServerOpts{ Factory: factory })
or:
factory := &MyDriverFactory{} opts := &server.ServerOpts{ Factory: factory, Port: 2000, Hostname: "127.0.0.1", } server := server.NewServer(opts)
func (*Server) ListenAndServe ¶
ListenAndServe asks a new Server to begin accepting client connections. It accepts no arguments - all configuration is provided via the NewServer function.
If the server fails to start for any reason, an error will be returned. Common errors are trying to bind to a privileged port or something else is already listening on the same port.
type ServerOpts ¶
type ServerOpts struct { // The factory that will be used to create a new FTPDriver instance for // each client connection. This is a mandatory option. Factory DriverFactory `json:"-"` Auth Auth `json:"-"` // Server Name, Default is Go Ftp Server Name string `json:"name"` // The hostname that the FTP server should listen on. Optional, defaults to // "::", which means all hostnames on ipv4 and ipv6. Hostname string `json:"hostName"` // Public IP of the server PublicIp string `json:"publicIP"` // Passive ports PassivePorts string `json:"passivePorts"` // The port that the FTP should listen on. Optional, defaults to 3000. In // a production environment you will probably want to change this to 21. Port int `json:"port"` // use tls, default is false TLS bool `json:"tls"` // if tls used, cert file is required CertFile string `json:"certFile"` // if tls used, key file is required KeyFile string `json:"keyFile"` // If ture TLS is used in RFC4217 mode ExplicitFTPS bool `json:"explicitFTPS"` WelcomeMessage string `json:"welcomeMessage"` // A logger implementation, if nil the StdLogger is used Logger Logger }
ServerOpts contains parameters for server.NewServer()
type SimpleAuth ¶
SimpleAuth implements Auth interface to provide a memory user login auth
func (*SimpleAuth) CheckPasswd ¶
func (a *SimpleAuth) CheckPasswd(name, pass string) (bool, error)
CheckPasswd will check user's password
type SimplePerm ¶
type SimplePerm struct {
// contains filtered or unexported fields
}
func NewSimplePerm ¶
func NewSimplePerm(owner, group string) *SimplePerm
type StdLogger ¶
type StdLogger struct{}
Use an instance of this to log in a standard format
func (*StdLogger) PrintCommand ¶
func (*StdLogger) PrintResponse ¶
Source Files ¶
Directories ¶
Path | Synopsis |
---|---|
This is a very simple ftpd server using this library as an example and as something to run tests against.
|
This is a very simple ftpd server using this library as an example and as something to run tests against. |