mirror of
https://gitee.com/lauix/HFish
synced 2025-05-11 12:28:02 +08:00
107 lines
2.1 KiB
Go
107 lines
2.1 KiB
Go
package ftp
|
|
|
|
import (
|
|
"io"
|
|
"fmt"
|
|
"time"
|
|
"os"
|
|
"strings"
|
|
"strconv"
|
|
"HFish/core/protocol/ftp/graval"
|
|
)
|
|
|
|
const (
|
|
fileOne = "This is the first file available for download.\n\nBy Jàmes"
|
|
fileTwo = "This is file number two.\n\n2012-12-04"
|
|
)
|
|
|
|
type MemDriver struct{}
|
|
|
|
func (driver *MemDriver) Authenticate(user string, pass string) bool {
|
|
//return user == "test" && pass == "1234"
|
|
return false
|
|
}
|
|
|
|
func (driver *MemDriver) Bytes(path string) (bytes int) {
|
|
switch path {
|
|
case "/one.txt":
|
|
bytes = len(fileOne)
|
|
break
|
|
case "/files/two.txt":
|
|
bytes = len(fileTwo)
|
|
break
|
|
default:
|
|
bytes = -1
|
|
}
|
|
return
|
|
}
|
|
|
|
func (driver *MemDriver) ModifiedTime(path string) (time.Time, error) {
|
|
return time.Now(), nil
|
|
}
|
|
|
|
func (driver *MemDriver) ChangeDir(path string) bool {
|
|
return path == "/" || path == "/files"
|
|
}
|
|
|
|
func (driver *MemDriver) DirContents(path string) (files []os.FileInfo) {
|
|
files = []os.FileInfo{}
|
|
switch path {
|
|
case "/":
|
|
files = append(files, graval.NewDirItem("files"))
|
|
files = append(files, graval.NewFileItem("one.txt", len(fileOne)))
|
|
case "/files":
|
|
files = append(files, graval.NewFileItem("two.txt", len(fileOne)))
|
|
}
|
|
return files
|
|
}
|
|
|
|
func (driver *MemDriver) DeleteDir(path string) bool {
|
|
return false
|
|
}
|
|
|
|
func (driver *MemDriver) DeleteFile(path string) bool {
|
|
return false
|
|
}
|
|
|
|
func (driver *MemDriver) Rename(fromPath string, toPath string) bool {
|
|
return false
|
|
}
|
|
|
|
func (driver *MemDriver) MakeDir(path string) bool {
|
|
return false
|
|
}
|
|
|
|
func (driver *MemDriver) GetFile(path string) (data string, err error) {
|
|
switch path {
|
|
case "/one.txt":
|
|
data = fileOne
|
|
case "/files/two.txt":
|
|
data = fileTwo
|
|
}
|
|
return
|
|
}
|
|
|
|
func (driver *MemDriver) PutFile(destPath string, data io.Reader) bool {
|
|
return false
|
|
}
|
|
|
|
type MemDriverFactory struct{}
|
|
|
|
func (factory *MemDriverFactory) NewDriver() (graval.FTPDriver, error) {
|
|
return &MemDriver{}, nil
|
|
}
|
|
|
|
func Start(addr string) {
|
|
arr := strings.Split(addr, ":")
|
|
port, _ := strconv.Atoi(arr[1])
|
|
|
|
factory := &MemDriverFactory{}
|
|
ftpServer := graval.NewFTPServer(&graval.FTPServerOpts{Factory: factory, Hostname: arr[0], Port: port})
|
|
|
|
err := ftpServer.ListenAndServe()
|
|
if err != nil {
|
|
fmt.Print(err)
|
|
}
|
|
}
|