mirror of https://github.com/Xhofe/alist
				
				
				
			
		
			
				
	
	
		
			55 lines
		
	
	
		
			904 B
		
	
	
	
		
			Go
		
	
	
			
		
		
	
	
			55 lines
		
	
	
		
			904 B
		
	
	
	
		
			Go
		
	
	
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 "", ""
 | 
						|
}
 |