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 "", "" | |
} | |