addAuthFromNetrc adds auth information to the URL from the user's netrc file if it can be found. This will only add the auth info if the URL doesn't already have auth info specified and the the username is blank.
(u *url.URL)
| 15 | // if the URL doesn't already have auth info specified and the |
| 16 | // the username is blank. |
| 17 | func addAuthFromNetrc(u *url.URL) error { |
| 18 | // If the URL already has auth information, do nothing |
| 19 | if u.User != nil && u.User.Username() != "" { |
| 20 | return nil |
| 21 | } |
| 22 | |
| 23 | // Get the netrc file path |
| 24 | path := os.Getenv("NETRC") |
| 25 | if path == "" { |
| 26 | filename := ".netrc" |
| 27 | if runtime.GOOS == "windows" { |
| 28 | filename = "_netrc" |
| 29 | } |
| 30 | |
| 31 | var err error |
| 32 | path, err = homedir.Expand("~/" + filename) |
| 33 | if err != nil { |
| 34 | return err |
| 35 | } |
| 36 | } |
| 37 | |
| 38 | // If the file is not a file, then do nothing |
| 39 | if fi, err := os.Stat(path); err != nil { |
| 40 | // File doesn't exist, do nothing |
| 41 | if os.IsNotExist(err) { |
| 42 | return nil |
| 43 | } |
| 44 | |
| 45 | // Some other error! |
| 46 | return err |
| 47 | } else if fi.IsDir() { |
| 48 | // File is directory, ignore |
| 49 | return nil |
| 50 | } |
| 51 | |
| 52 | // Load up the netrc file |
| 53 | net, err := netrc.ParseFile(path) |
| 54 | if err != nil { |
| 55 | return fmt.Errorf("Error parsing netrc file at %q: %s", path, err) |
| 56 | } |
| 57 | |
| 58 | machine := net.FindMachine(u.Host) |
| 59 | if machine == nil { |
| 60 | // Machine not found, no problem |
| 61 | return nil |
| 62 | } |
| 63 | |
| 64 | // Set the user info |
| 65 | u.User = url.UserPassword(machine.Login, machine.Password) |
| 66 | return nil |
| 67 | } |
no outgoing calls