first commit
This commit is contained in:
commit
14569a0cdc
19
README.md
Normal file
19
README.md
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
# ftp-http-forwarder
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
```
|
||||||
|
-host string
|
||||||
|
Host (default "localhost")
|
||||||
|
-pass string
|
||||||
|
Password for login (default "123456")
|
||||||
|
-port int
|
||||||
|
Port (default 2121)
|
||||||
|
-target string
|
||||||
|
target url
|
||||||
|
-user string
|
||||||
|
Username for login (default "admin")
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
|
124
main.go
Normal file
124
main.go
Normal file
@ -0,0 +1,124 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"errors"
|
||||||
|
"io"
|
||||||
|
"os"
|
||||||
|
//"strings"
|
||||||
|
"net/url"
|
||||||
|
"net/http"
|
||||||
|
"flag"
|
||||||
|
"log"
|
||||||
|
"goftp.io/server"
|
||||||
|
)
|
||||||
|
|
||||||
|
type ForwarderDriver struct {
|
||||||
|
TargetURL string
|
||||||
|
server.Perm
|
||||||
|
}
|
||||||
|
|
||||||
|
type FileInfo struct {
|
||||||
|
os.FileInfo
|
||||||
|
|
||||||
|
mode os.FileMode
|
||||||
|
owner string
|
||||||
|
group string
|
||||||
|
}
|
||||||
|
|
||||||
|
func (f *FileInfo) Mode() os.FileMode {
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
func (f *FileInfo) Owner() string {
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
|
||||||
|
func (f *FileInfo) Group() string {
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
|
||||||
|
func (driver *ForwarderDriver) Init(conn *server.Conn) {
|
||||||
|
//driver.conn = conn
|
||||||
|
}
|
||||||
|
|
||||||
|
func (driver *ForwarderDriver) ChangeDir(path string) error {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (driver *ForwarderDriver) Stat(path string) (server.FileInfo, error) {
|
||||||
|
return nil, errors.New("Not Implemented")
|
||||||
|
}
|
||||||
|
|
||||||
|
func (driver *ForwarderDriver) ListDir(path string, callback func(server.FileInfo) error) error {
|
||||||
|
return errors.New("Not Implemented")
|
||||||
|
}
|
||||||
|
|
||||||
|
func (driver *ForwarderDriver) DeleteDir(path string) error {
|
||||||
|
return errors.New("Not Implemented")
|
||||||
|
}
|
||||||
|
|
||||||
|
func (driver *ForwarderDriver) DeleteFile(path string) error {
|
||||||
|
return errors.New("Not Implemented")
|
||||||
|
}
|
||||||
|
|
||||||
|
func (driver *ForwarderDriver) Rename(fromPath string, toPath string) error {
|
||||||
|
return errors.New("Not Implemented")
|
||||||
|
}
|
||||||
|
|
||||||
|
func (driver *ForwarderDriver) MakeDir(path string) error {
|
||||||
|
return errors.New("Not Implemented")
|
||||||
|
}
|
||||||
|
|
||||||
|
func (driver *ForwarderDriver) GetFile(path string, offset int64) (int64, io.ReadCloser, error) {
|
||||||
|
return 0, nil, errors.New("Not Implemented")
|
||||||
|
}
|
||||||
|
|
||||||
|
func (driver *ForwarderDriver) PutFile(destPath string, data io.Reader, appendData bool) (int64, error) {
|
||||||
|
log.Printf("Forwarding %v", destPath)
|
||||||
|
client := &http.Client{}
|
||||||
|
req, err := http.NewRequest("PUT", driver.TargetURL + url.QueryEscape(destPath), data)
|
||||||
|
resp, err := client.Do(req)
|
||||||
|
return resp.Request.ContentLength, err
|
||||||
|
}
|
||||||
|
|
||||||
|
type ForwarderDriverFactory struct {
|
||||||
|
TargetURL string
|
||||||
|
server.Perm
|
||||||
|
}
|
||||||
|
|
||||||
|
func (factory *ForwarderDriverFactory) NewDriver() (server.Driver, error) {
|
||||||
|
return &ForwarderDriver{factory.TargetURL, factory.Perm}, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
|
||||||
|
var (
|
||||||
|
target = flag.String("target", "", "target url")
|
||||||
|
user = flag.String("user", "admin", "Username for login")
|
||||||
|
pass = flag.String("pass", "123456", "Password for login")
|
||||||
|
port = flag.Int("port", 2121, "Port")
|
||||||
|
host = flag.String("host", "localhost", "Host")
|
||||||
|
)
|
||||||
|
flag.Parse()
|
||||||
|
if *target == "" {
|
||||||
|
log.Fatalf("Please set a target url with -target")
|
||||||
|
}
|
||||||
|
factory := &ForwarderDriverFactory{TargetURL: *target, Perm: server.NewSimplePerm("user","group")}
|
||||||
|
|
||||||
|
opts := &server.ServerOpts{
|
||||||
|
Factory: factory,
|
||||||
|
Port: *port,
|
||||||
|
Hostname: *host,
|
||||||
|
Auth: &server.SimpleAuth{Name: *user, Password: *pass},
|
||||||
|
}
|
||||||
|
|
||||||
|
log.Printf("Starting ftp server on %v:%v", opts.Hostname, opts.Port)
|
||||||
|
log.Printf("Username %v, Password %v", *user, *pass)
|
||||||
|
server := server.NewServer(opts)
|
||||||
|
err := server.ListenAndServe()
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal("Error starting server:", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
x
Reference in New Issue
Block a user