func GetFolders(ftp *goftp.FTP, path string) []string { var err error var filesAndFolders []string if filesAndFolders, err = ftp.List(path); err != nil { panic(err) } var folders = make([]string, 0) for i := 0; i < len(filesAndFolders); i++ { var file string = filesAndFolders[i] if strings.ContainsAny(file, "type=dir") { folders = append(folders, file) } } return folders }
func main() { configPath := os.Args[1] fmt.Println(configPath) var config Configuration = getConfig(configPath) var ftpConnection *goftp.FTP var builds []os.FileInfo = GetAllBuilds(config.BuildsPath) var lastBuild os.FileInfo = builds[len(builds)-1] fmt.Println("Last build is", lastBuild.Name()) ftpConnection = ftp.GetFtpConnection(config.FtpHost, config.FtpUser, config.FtpPassword) var currentPath string = ftp.GetCurrentPath(ftpConnection) fmt.Println("Connection to ftp", config.FtpHost, "successfully established") fmt.Println("Current Path is", currentPath) fmt.Println(config.FtpBuildPaths) for i := 0; i < len(config.FtpBuildPaths); i++ { ftp.MakeBuildDir(ftpConnection, config.FtpBuildPaths[i]+"/"+lastBuild.Name()) var path = config.FtpBuildPaths[i] CopyBuildToFTP(config, lastBuild, ftpConnection, config.BuildsPath, path) } fmt.Println("Builds transfered successfully. Exit.") ftpConnection.Quit() }
func GetCurrentPath(ftp *goftp.FTP) string { var err error var curPath string if curPath, err = ftp.Pwd(); err != nil { panic(err) } return curPath }
func main() { var err error var ftp *goftp.FTP if !handleArgs() { panic("Usage: ./logdl <host> <user> <password> <directory>") } args := os.Args[1:] host := args[0] user := args[1] pass := args[2] dir := golib.GetFinalArgs(args, 3) if ftp, err = goftp.Connect(host + ":21"); err != nil { panic(err) } defer ftp.Close() if err = ftp.Login(user, pass); err != nil { panic(err) } if err = ftp.Cwd(dir); err != nil { panic(err) } var curpath string if curpath, err = ftp.Pwd(); err != nil { panic(err) } downloadDirectory(curpath, ftp) }
func (s FtpTarget) Send(newItems []feeds.RssResult, prices []feeds.GoldMoney) { conf := config.GetConfig() var perm os.FileMode = 0777 var err error var ftp *goftp.FTP log.Printf("...saving newData (%v) file to ftp to %v\n", len(newItems), conf.Propagate.Ftp.Url) var newData = []byte("var data = \n") jsave, _ := json.Marshal(newItems) for _, e := range jsave { newData = append(newData, e) } ioutil.WriteFile(conf.General.DataDir+"newData.json", newData, perm) var file *os.File if file, err = os.Open(conf.General.DataDir + "newData.json"); err != nil { panic(err) } defer file.Close() addr := fmt.Sprintf("%v:%v", conf.Propagate.Ftp.Url, conf.Propagate.Ftp.Port) if ftp, err = goftp.Connect(addr); err != nil { panic(err) } defer ftp.Close() if err = ftp.Login(conf.Propagate.Ftp.Usr, conf.Propagate.Ftp.Pw); err != nil { panic(err) } // This is failing for some reason???? // One line curl seems to do it.... curl -T newData.json ftp://blarblar.net --user fred:donttell // if err := ftp.Stor("newData.json", file); err != nil { // panic(err) // } log.Printf("saving prices (%v) file to ftp to webserver\n\n\n", len(prices)) var data3 = []byte("var prices = \n") jsave2, _ := json.Marshal(prices) for _, e := range jsave2 { data3 = append(data3, e) } ioutil.WriteFile(conf.General.DataDir+"prices.json", data3, perm) var pricesFile *os.File if pricesFile, err = os.Open(conf.General.DataDir + "prices.json"); err != nil { panic(err) } defer pricesFile.Close() // This is failing for some reason???? // One line curl seems to do it.... curl -T price.json ftp://blarblar.net --user fred:donttell // if err := ftp.Stor("prices.json", pricesFile); err != nil { // panic(err) // } }
func GetFtpConnection(host, user, password string) *goftp.FTP { var err error var ftp *goftp.FTP if ftp, err = goftp.Connect(host); err != nil { panic(err) } if err = ftp.Login(user, password); err != nil { panic(err) } return ftp }
func prepareFTPConn(port int, host, login, password string) (*goftp.FTP, error) { var ftp *goftp.FTP var err error if ftp, err = goftp.Connect(fmt.Sprintf("%s:%d", host, port)); err != nil { return nil, err } if err = ftp.Login(login, password); err != nil { return nil, err } return ftp, nil }
func CopyBuildToFTP(config Configuration, lastBuild os.FileInfo, ftpConnection *goftp.FTP, buildsPath string, ftpBuildPaths string) { var buildFiles []os.FileInfo = GetBuildFiles(buildsPath + "/" + lastBuild.Name()) for i := 0; i < len(buildFiles); i++ { var fileInfo os.FileInfo = buildFiles[i] var file *os.File var err error if file, err = os.Open(buildsPath + "/" + lastBuild.Name() + "/" + fileInfo.Name()); err != nil { panic(err) } var reader io.Reader = (*os.File)(file) if err := ftpConnection.Stor(ftpBuildPaths+"/"+lastBuild.Name()+"/"+fileInfo.Name(), reader); err != nil { panic(err) } fmt.Println(file.Name(), "copied to", ftpBuildPaths, "/", lastBuild.Name()) } }
func downloadDirectory(directory string, ftp *goftp.FTP) { var files []string var err error if files, err = ftp.List(""); err != nil { panic(err) } directory = strings.Replace(directory, "\r\n", "", -1) for f := range files { filename := strings.Split(files[f], "; ") newPath := directory + "/" + filename[1] if !strings.Contains(filename[0], "type=dir;") { downloadFile(newPath, ftp) } else { ftp.Cwd(newPath) downloadDirectory(newPath, ftp) } } }
func main() { var err error var ftp *goftp.FTP // For debug messages: goftp.ConnectDbg("ftp.server.com:21") if ftp, err = goftp.Connect("172.8.4.101:21"); err != nil { panic(err) } defer ftp.Close() // config := tls.Config{ // InsecureSkipVerify: true, // ClientAuth: tls.RequestClientCert, // } // // if err = ftp.AuthTLS(config); err != nil { // panic(err) // } if err = ftp.Login("bob", "p@ssw0rd"); err != nil { panic(err) } if err = ftp.Cwd("/home/bob"); err != nil { panic(err) } var curpath string if curpath, err = ftp.Pwd(); err != nil { panic(err) } fmt.Printf("Current path: %s\n", curpath) var files []string if files, err = ftp.List(""); err != nil { panic(err) } fmt.Println(files) // var file *os.File // if file, err = os.Open("/tmp/test.txt"); err != nil { // panic(err) // } // // if err := ftp.Stor("/test.txt", file); err != nil { // panic(err) // } err = ftp.Walk("/home/bob", func(path string, info os.FileMode, err error) error { _, err = ftp.Retr(path, func(r io.Reader) error { var hasher = sha256.New() if _, err = io.Copy(hasher, r); err != nil { return err } hash := fmt.Sprintf("%s %x", path, sha256.Sum256(nil)) fmt.Println(hash) return err }) return nil }) fmt.Println(err) }
func (f *FTP) SendFile(remoteDir, remoteFile, localFile string) (err error) { var ( file *os.File ftp *goftp.FTP ) if ftp, err = goftp.Connect(f.host); err != nil { return } defer ftp.Close() if err = ftp.Login(f.user, f.pass); err != nil { return } if file, err = os.Open(localFile); err != nil { return } defer file.Close() if f.testMode { return } if err = ftp.Mkd(remoteDir); err != nil { return } if err = ftp.Cwd(remoteDir); err != nil { return } ftp.Stor(remoteFile, file) return }
func MakeBuildDir(ftp *goftp.FTP, dir string) { var err error if err = ftp.Mkd(dir); err != nil { panic(err) } }