package main import ( "fmt" "io/ioutil" "log" "os" "strconv" "strings" "github.com/mattermost/mattermost-server/v6/model" ) func main() { log.SetFlags(0) url := strings.TrimPrefix(os.Args[1], "-") // -?https://MACHINE/api/v4/files/FILE s := strings.Split(url, "/") machine, fileId := s[2], s[6] login, password := findInNetrc(machine) if login == "" || password == "" { log.Println("No credentials found for:", machine) os.Exit(1) } client := model.NewAPIv4Client("https://" + machine) _, _, err := client.Login(login, password) if err != nil { log.Fatalln(err) } info, resp, err := client.GetFileInfo(fileId) if err != nil { log.Fatalln(err) } if info == nil { fmt.Println(resp) os.Exit(1) } filename := info.Name if len(os.Args) > 2 { filename = os.Args[2] } else { log.Println("Name:", info.Name) log.Println("Type:", info.MimeType) log.Println("Size:", info.Size) log.Println("Download? Ctrl-D/C") os.Stdin.Read(make([]byte, 1)) } data, _, err := client.GetFile(fileId) if err != nil { log.Fatalln(err) } dstCtr := 0 dst := filename for { if _, err = os.Stat(dst); err != nil { break } dst = filename + strconv.Itoa(dstCtr) dstCtr++ } if err := ioutil.WriteFile(dst, data, os.FileMode(0666)); err != nil { log.Fatalln(err) } fmt.Println(dst) }