]> Sergey Matveev's repositories - mmfileget.git/blob - main.go
Do not overwrite existing file
[mmfileget.git] / main.go
1 package main
2
3 import (
4         "fmt"
5         "io/ioutil"
6         "log"
7         "os"
8         "strconv"
9         "strings"
10
11         "github.com/mattermost/mattermost-server/v6/model"
12 )
13
14 func main() {
15         log.SetFlags(0)
16         url := strings.TrimPrefix(os.Args[1], "-") // -?https://MACHINE/api/v4/files/FILE
17         s := strings.Split(url, "/")
18         machine, fileId := s[2], s[6]
19
20         login, password := findInNetrc(machine)
21         if login == "" || password == "" {
22                 log.Println("No credentials found for:", machine)
23                 os.Exit(1)
24         }
25
26         client := model.NewAPIv4Client("https://" + machine)
27         _, _, err := client.Login(login, password)
28         if err != nil {
29                 log.Fatalln(err)
30         }
31         info, resp, err := client.GetFileInfo(fileId)
32         if err != nil {
33                 log.Fatalln(err)
34         }
35         if info == nil {
36                 fmt.Println(resp)
37                 os.Exit(1)
38         }
39         filename := info.Name
40         if len(os.Args) > 2 {
41                 filename = os.Args[2]
42         } else {
43                 log.Println("Name:", info.Name)
44                 log.Println("Type:", info.MimeType)
45                 log.Println("Size:", info.Size)
46                 log.Println("Download? Ctrl-D/C")
47                 os.Stdin.Read(make([]byte, 1))
48         }
49         data, _, err := client.GetFile(fileId)
50         if err != nil {
51                 log.Fatalln(err)
52         }
53
54         dstCtr := 0
55         dst := filename
56         for {
57                 if _, err = os.Stat(dst); err != nil {
58                         break
59                 }
60                 dst = filename + strconv.Itoa(dstCtr)
61                 dstCtr++
62         }
63         if err := ioutil.WriteFile(dst, data, os.FileMode(0666)); err != nil {
64                 log.Fatalln(err)
65         }
66         fmt.Println(dst)
67 }