diff --git a/main.go b/main.go index 9b7400a..430cdac 100755 --- a/main.go +++ b/main.go @@ -9,6 +9,7 @@ package main import ( "flag" "log" + "os/exec" filedriver "github.com/goftp/file-driver" "github.com/goftp/server" @@ -16,7 +17,7 @@ import ( func main() { var ( - root = flag.String("root", "", "Root directory to serve") + root = flag.String("root", "./tmp", "Root directory to serve") user = flag.String("user", "admin", "Username for login") pass = flag.String("pass", "123456", "Password for login") port = flag.Int("port", 2121, "Port") @@ -36,7 +37,15 @@ func main() { Factory: factory, Port: *port, Hostname: *host, - Auth: &server.SimpleAuth{Name: *user, Password: *pass}, + Auth: &callbackAuth{ + realAuth: &server.SimpleAuth{ + Name: *user, + Password: *pass, + }, + callback: func() { + log.Printf("callback: %v", exec.Command("sh", "-c", "cd /wiki; git add -A :/; git commit -m \"ftp upload\"").Run()) + }, + }, } log.Printf("Starting ftp server on %v:%v", opts.Hostname, opts.Port) @@ -47,3 +56,19 @@ func main() { log.Fatal("Error starting server:", err) } } + +type callbackAuth struct { + realAuth server.Auth + callback func() +} + +func (ca *callbackAuth) CheckPasswd(u, p string) (bool, error) { + ok, err := ca.realAuth.CheckPasswd(u, p) + if !ok || err != nil { + return ok, err + } + if ca.callback != nil { + ca.callback() + } + return ok, err +} diff --git a/test.sh b/test.sh new file mode 100644 index 0000000..a785ff1 --- /dev/null +++ b/test.sh @@ -0,0 +1,6 @@ +echo " + user admin 123456 + ascii + put Dockerfile + bye +" | ftp -n 127.0.0.1 2121