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