Skip to content

Instantly share code, notes, and snippets.

@discobean
Created September 6, 2018 04:29
Show Gist options
  • Save discobean/814bf2ffacca61355072fea2a6b9eedd to your computer and use it in GitHub Desktop.
Save discobean/814bf2ffacca61355072fea2a6b9eedd to your computer and use it in GitHub Desktop.
package main
import (
"errors"
"io"
"log"
"os"
"time"
"github.com/goftp/server"
)
func main() {
factory := TestDriverFactory{}
opts := &server.ServerOpts{
Factory: factory,
Port: 2022,
Hostname: "127.0.0.1",
Auth: &server.SimpleAuth{Name: "root", Password: "root"},
}
server := server.NewServer(opts)
err := server.ListenAndServe()
if err != nil {
log.Fatal("Error starting server:", err)
}
}
type TestDriver struct {
}
func (test TestDriver) Init(*server.Conn) {
}
func (test TestDriver) Stat(path string) (server.FileInfo, error) {
return &FileInfo{isDir: true}, nil
}
func (test TestDriver) ChangeDir(dir string) error {
return nil
}
func (test TestDriver) ListDir(path string, callback func(server.FileInfo) error) error {
return nil
}
func (test TestDriver) DeleteDir(path string) error {
return nil
}
func (test TestDriver) DeleteFile(path string) error {
return nil
}
func (test TestDriver) Rename(srcPath string, dstPath string) error {
return errors.New("Rename not implemented")
}
func (TestDriver) MakeDir(string) error {
return nil
}
func (test TestDriver) GetFile(path string, offset int64) (int64, io.ReadCloser, error) {
return 0, nil, errors.New("Get not available")
}
func (test TestDriver) PutFile(destPath string, data io.Reader, appendData bool) (int64, error) {
return 0, errors.New("Put not available")
}
type TestDriverFactory struct {
}
func (factory TestDriverFactory) NewDriver() (server.Driver, error) {
return &TestDriver{}, nil
}
type FileInfo struct {
path string
name string
size int64
modTime time.Time
isDir bool
sys interface{}
owner string
group string
}
func (fi FileInfo) Name() string {
return fi.name
}
func (fi FileInfo) Size() int64 {
return fi.size
}
func (fi FileInfo) Mode() os.FileMode {
return os.FileMode(int(0777))
}
func (fi FileInfo) ModTime() time.Time {
return time.Now()
}
func (fi FileInfo) IsDir() bool {
return fi.isDir
}
func (fi FileInfo) Sys() interface{} {
return nil
}
func (fi FileInfo) Owner() string {
return fi.owner
}
func (fi FileInfo) Group() string {
return fi.group
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment