Guest User

Untitled

a guest
Sep 13th, 2018
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.40 KB | None | 0 0
  1. package main
  2.  
  3. import (
  4. "bufio"
  5. "fmt"
  6. "gopkg.in/yaml.v2"
  7. "net/url"
  8. "os"
  9. )
  10.  
  11. type ParsedUrl struct {
  12. Url string `yaml:",omitempty"`
  13. Scheme string `yaml:",omitempty"`
  14. Host string `yaml:",omitempty"`
  15. Username string `yaml:",omitempty"`
  16. Password string `yaml:",omitempty"`
  17. Path string `yaml:",omitempty"`
  18. Query map[string][]string `yaml:",flow,omitempty"`
  19. Hash string `yaml:",omitempty"`
  20. }
  21.  
  22. func main() {
  23. var err error
  24. var u *url.URL
  25. var out []byte
  26. var parsedUrls []ParsedUrl
  27.  
  28. scanner := bufio.NewScanner(os.Stdin)
  29.  
  30. for {
  31. if ok := scanner.Scan(); !ok {
  32. goto print
  33. }
  34.  
  35. in := scanner.Text()
  36.  
  37. if in == "" {
  38. continue
  39. }
  40.  
  41. u, err = url.Parse(in)
  42.  
  43. if err != nil {
  44. goto die
  45. }
  46.  
  47. parsedUrl := ParsedUrl{}
  48.  
  49. parsedUrl.Url = in
  50. parsedUrl.Scheme = u.Scheme
  51. parsedUrl.Host = u.Host
  52. parsedUrl.Path = u.Path
  53. parsedUrl.Username = u.User.Username()
  54.  
  55. if pass, ok := u.User.Password(); ok {
  56. parsedUrl.Password = pass
  57. }
  58.  
  59. parsedUrl.Query = make(map[string][]string)
  60.  
  61. for k, v := range u.Query() {
  62. parsedUrl.Query[k] = append(parsedUrl.Query[k], v...)
  63. }
  64.  
  65. parsedUrls = append(parsedUrls, parsedUrl)
  66. }
  67.  
  68. print:
  69. out, err = yaml.Marshal(parsedUrls)
  70.  
  71. if err != nil {
  72. goto die
  73. }
  74.  
  75. fmt.Printf("%s\n", string(out))
  76. os.Exit(0)
  77.  
  78. die:
  79. fmt.Fprintf(os.Stderr, "%s\n", err)
  80. os.Exit(1)
  81. }
Add Comment
Please, Sign In to add comment