package gowebdav import ( "bufio" "fmt" "net/url" "os" "regexp" "strings" ) func parseLine(s string) (login, pass string) { fields := strings.Fields(s) for i, f := range fields { if f == "login" { login = fields[i+1] } if f == "password" { pass = fields[i+1] } } return login, pass } // ReadConfig reads login and password configuration from ~/.netrc // machine foo.com login username password 123456 func ReadConfig(uri, netrc string) (string, string) { u, err := url.Parse(uri) if err != nil { return "", "" } file, err := os.Open(netrc) if err != nil { return "", "" } defer file.Close() re := fmt.Sprintf(`^.*machine %s.*$`, u.Host) scanner := bufio.NewScanner(file) for scanner.Scan() { s := scanner.Text() matched, err := regexp.MatchString(re, s) if err != nil { return "", "" } if matched { return parseLine(s) } } return "", "" }