// Nearly all code is taken from src/cmd/go/internal/auth/netrc.go package tofuproxy 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 "", "" }