list.go 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. package cli
  2. import (
  3. "encoding/json"
  4. "errors"
  5. "fmt"
  6. "io"
  7. "net/http"
  8. "strings"
  9. "github.com/annybs/shorty/internal/types"
  10. )
  11. type ListCmd struct {
  12. AllPath string `help:"All-path (SHORTY_ALL_PATH)" default:"${all_path}"`
  13. Token string `short:"t" help:"Bearer token (SHORTY_TOKEN)" default:"${token}"`
  14. URL string `short:"u" help:"Shorty URL (SHORTY_URL)" default:"${url}"`
  15. }
  16. func (c *ListCmd) Run(ctx *Context) error {
  17. url := strings.Join([]string{c.URL, c.AllPath}, "")
  18. req, err := http.NewRequest(http.MethodGet, url, nil)
  19. if err != nil {
  20. return err
  21. }
  22. if c.Token != "" {
  23. req.Header.Add("authorization", fmt.Sprintf("bearer %s", c.Token))
  24. }
  25. res, err := http.DefaultClient.Do(req)
  26. if err != nil {
  27. return err
  28. }
  29. if res.StatusCode != http.StatusOK {
  30. body, err := io.ReadAll(res.Body)
  31. if err != nil {
  32. return err
  33. }
  34. if len(body) > 0 {
  35. return errors.New(string(body))
  36. }
  37. return errors.New(res.Status)
  38. }
  39. body, err := io.ReadAll(res.Body)
  40. if err != nil {
  41. return err
  42. }
  43. data := map[string]*types.Redirect{}
  44. if err := json.Unmarshal(body, &data); err != nil {
  45. return err
  46. }
  47. for from, redirect := range data {
  48. fmt.Printf("%s %d %s\n", from, redirect.StatusCode, redirect.Destination)
  49. }
  50. return nil
  51. }