Initial commit
[bloat] / mastodon / helper.go
1 package mastodon
2
3 import (
4         "encoding/base64"
5         "encoding/json"
6         "errors"
7         "fmt"
8         "net/http"
9         "os"
10 )
11
12 // Base64EncodeFileName returns the base64 data URI format string of the file with the file name.
13 func Base64EncodeFileName(filename string) (string, error) {
14         file, err := os.Open(filename)
15         if err != nil {
16                 return "", err
17         }
18         defer file.Close()
19
20         return Base64Encode(file)
21 }
22
23 // Base64Encode returns the base64 data URI format string of the file.
24 func Base64Encode(file *os.File) (string, error) {
25         fi, err := file.Stat()
26         if err != nil {
27                 return "", err
28         }
29
30         d := make([]byte, fi.Size())
31         _, err = file.Read(d)
32         if err != nil {
33                 return "", err
34         }
35
36         return "data:" + http.DetectContentType(d) +
37                 ";base64," + base64.StdEncoding.EncodeToString(d), nil
38 }
39
40 // String is a helper function to get the pointer value of a string.
41 func String(v string) *string { return &v }
42
43 func parseAPIError(prefix string, resp *http.Response) error {
44         errMsg := fmt.Sprintf("%s: %s", prefix, resp.Status)
45         var e struct {
46                 Error string `json:"error"`
47         }
48
49         json.NewDecoder(resp.Body).Decode(&e)
50         if e.Error != "" {
51                 errMsg = fmt.Sprintf("%s: %s", errMsg, e.Error)
52         }
53
54         return errors.New(errMsg)
55 }