X-Git-Url: http://www.git.stargrave.org/?a=blobdiff_plain;f=netrc.go;fp=netrc.go;h=65fca7e8a6c2557e2dae14c619371b7aaa1dee69;hb=9c0dca60b83668053c20d5589272fbf1439f7834;hp=0000000000000000000000000000000000000000;hpb=4a1c37540658a82e4c5f697d46f7c63ef8dc05e8;p=mmfileget.git diff --git a/netrc.go b/netrc.go new file mode 100644 index 0000000..65fca7e --- /dev/null +++ b/netrc.go @@ -0,0 +1,67 @@ +// Nearly all code is taken from src/cmd/go/internal/auth/netrc.go + +package main + +import ( + "io/ioutil" + "log" + "os" + "path/filepath" + "strings" +) + +func findInNetrc(host string) (string, string) { + netrcPath, ok := os.LookupEnv("NETRC") + if !ok { + homeDir, err := os.UserHomeDir() + if err != nil { + log.Fatalln(err) + } + netrcPath = filepath.Join(homeDir, ".netrc") + } + data, err := ioutil.ReadFile(netrcPath) + if err != nil { + if os.IsNotExist(err) { + return "", "" + } + log.Fatalln(err) + } + inMacro := false + var machine, login, password string + for _, line := range strings.Split(string(data), "\n") { + if inMacro { + if line == "" { + inMacro = false + } + continue + } + fields := strings.Fields(line) + i := 0 + for ; i < len(fields)-1; i += 2 { + switch fields[i] { + case "machine": + machine = fields[i+1] + login = "" + password = "" + case "default": + break + case "login": + login = fields[i+1] + case "password": + password = fields[i+1] + case "macdef": + inMacro = true + } + if machine != "" && login != "" && password != "" { + if machine == host { + return login, password + } + machine, login, password = "", "", "" + } + } + if i < len(fields) && fields[i] == "default" { + break + } + } + return "", "" +}