helper.go 1.2 KB

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