add ability to read login / pw from ~/.netrc
This commit is contained in:
parent
fbcb29d33e
commit
a33240e4ab
14
README.md
14
README.md
@ -33,12 +33,14 @@ Usage of gowebdav
|
|||||||
|
|
||||||
DEL <PATH>
|
DEL <PATH>
|
||||||
|
|
||||||
|
-netrc-file string
|
||||||
|
read login from netrc file (default "~/.netrc")
|
||||||
-pw string
|
-pw string
|
||||||
Password [ENV.PASSWORD]
|
Password [ENV.PASSWORD]
|
||||||
-root string
|
-root string
|
||||||
WebDAV Endpoint [ENV.ROOT]
|
WebDAV Endpoint [ENV.ROOT]
|
||||||
-user string
|
-user string
|
||||||
User [ENV.USER]
|
User [ENV.USER] (default "$USER")
|
||||||
```
|
```
|
||||||
|
|
||||||
*gowebdav wrapper script*
|
*gowebdav wrapper script*
|
||||||
@ -98,6 +100,7 @@ included.
|
|||||||
* [func FixSlashes(s string) string](#FixSlashes)
|
* [func FixSlashes(s string) string](#FixSlashes)
|
||||||
* [func Join(path0 string, path1 string) string](#Join)
|
* [func Join(path0 string, path1 string) string](#Join)
|
||||||
* [func PathEscape(path string) string](#PathEscape)
|
* [func PathEscape(path string) string](#PathEscape)
|
||||||
|
* [func ReadConfig(uri, netrc string) (string, string)](#ReadConfig)
|
||||||
* [func String(r io.Reader) string](#String)
|
* [func String(r io.Reader) string](#String)
|
||||||
* [type Authenticator](#Authenticator)
|
* [type Authenticator](#Authenticator)
|
||||||
* [type BasicAuth](#BasicAuth)
|
* [type BasicAuth](#BasicAuth)
|
||||||
@ -148,7 +151,7 @@ included.
|
|||||||
* [PathEscape](#example_PathEscape)
|
* [PathEscape](#example_PathEscape)
|
||||||
|
|
||||||
##### <a name="pkg-files">Package files</a>
|
##### <a name="pkg-files">Package files</a>
|
||||||
[basicAuth.go](https://github.com/studio-b12/gowebdav/blob/master/basicAuth.go) [client.go](https://github.com/studio-b12/gowebdav/blob/master/client.go) [digestAuth.go](https://github.com/studio-b12/gowebdav/blob/master/digestAuth.go) [doc.go](https://github.com/studio-b12/gowebdav/blob/master/doc.go) [file.go](https://github.com/studio-b12/gowebdav/blob/master/file.go) [requests.go](https://github.com/studio-b12/gowebdav/blob/master/requests.go) [utils.go](https://github.com/studio-b12/gowebdav/blob/master/utils.go)
|
[basicAuth.go](https://github.com/studio-b12/gowebdav/blob/master/basicAuth.go) [client.go](https://github.com/studio-b12/gowebdav/blob/master/client.go) [digestAuth.go](https://github.com/studio-b12/gowebdav/blob/master/digestAuth.go) [doc.go](https://github.com/studio-b12/gowebdav/blob/master/doc.go) [file.go](https://github.com/studio-b12/gowebdav/blob/master/file.go) [netrc.go](https://github.com/studio-b12/gowebdav/blob/master/netrc.go) [requests.go](https://github.com/studio-b12/gowebdav/blob/master/requests.go) [utils.go](https://github.com/studio-b12/gowebdav/blob/master/utils.go)
|
||||||
|
|
||||||
### <a name="FixSlash">func</a> [FixSlash](https://github.com/studio-b12/gowebdav/blob/master/utils.go?s=707:737#L45)
|
### <a name="FixSlash">func</a> [FixSlash](https://github.com/studio-b12/gowebdav/blob/master/utils.go?s=707:737#L45)
|
||||||
``` go
|
``` go
|
||||||
@ -174,6 +177,13 @@ func PathEscape(path string) string
|
|||||||
```
|
```
|
||||||
PathEscape escapes all segemnts of a given path
|
PathEscape escapes all segemnts of a given path
|
||||||
|
|
||||||
|
### <a name="ReadConfig">func</a> [ReadConfig](https://github.com/studio-b12/gowebdav/blob/master/netrc.go?s=428:479#L27)
|
||||||
|
``` go
|
||||||
|
func ReadConfig(uri, netrc string) (string, string)
|
||||||
|
```
|
||||||
|
ReadConfig reads login and password configuration from ~/.netrc
|
||||||
|
machine foo.com login username password 123456
|
||||||
|
|
||||||
### <a name="String">func</a> [String](https://github.com/studio-b12/gowebdav/blob/master/utils.go?s=1150:1181#L66)
|
### <a name="String">func</a> [String](https://github.com/studio-b12/gowebdav/blob/master/utils.go?s=1150:1181#L66)
|
||||||
``` go
|
``` go
|
||||||
func String(r io.Reader) string
|
func String(r io.Reader) string
|
||||||
|
@ -7,6 +7,7 @@ import (
|
|||||||
d "github.com/studio-b12/gowebdav"
|
d "github.com/studio-b12/gowebdav"
|
||||||
"io"
|
"io"
|
||||||
"os"
|
"os"
|
||||||
|
"os/user"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"strings"
|
"strings"
|
||||||
)
|
)
|
||||||
@ -15,6 +16,7 @@ func main() {
|
|||||||
root := flag.String("root", os.Getenv("ROOT"), "WebDAV Endpoint [ENV.ROOT]")
|
root := flag.String("root", os.Getenv("ROOT"), "WebDAV Endpoint [ENV.ROOT]")
|
||||||
usr := flag.String("user", os.Getenv("USER"), "User [ENV.USER]")
|
usr := flag.String("user", os.Getenv("USER"), "User [ENV.USER]")
|
||||||
pw := flag.String("pw", os.Getenv("PASSWORD"), "Password [ENV.PASSWORD]")
|
pw := flag.String("pw", os.Getenv("PASSWORD"), "Password [ENV.PASSWORD]")
|
||||||
|
netrc := flag.String("netrc-file", filepath.Join(getHome(), ".netrc"), "read login from netrc file")
|
||||||
method := flag.String("X", "", `Method:
|
method := flag.String("X", "", `Method:
|
||||||
LS <PATH>
|
LS <PATH>
|
||||||
STAT <PATH>
|
STAT <PATH>
|
||||||
@ -40,6 +42,13 @@ func main() {
|
|||||||
fail("Unsupported arguments")
|
fail("Unsupported arguments")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if *pw == "" {
|
||||||
|
if u, p := d.ReadConfig(*root, *netrc); u != "" && p != "" {
|
||||||
|
usr = &u
|
||||||
|
pw = &p
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
c := d.NewClient(*root, *usr, *pw)
|
c := d.NewClient(*root, *usr, *pw)
|
||||||
if err := c.Connect(); err != nil {
|
if err := c.Connect(); err != nil {
|
||||||
fail(fmt.Sprintf("Failed to connect due to: %s", err.Error()))
|
fail(fmt.Sprintf("Failed to connect due to: %s", err.Error()))
|
||||||
@ -59,6 +68,13 @@ func fail(err interface{}) {
|
|||||||
os.Exit(-1)
|
os.Exit(-1)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func getHome() string {
|
||||||
|
if u, e := user.Current(); e != nil {
|
||||||
|
return u.HomeDir
|
||||||
|
}
|
||||||
|
return os.Getenv("HOME")
|
||||||
|
}
|
||||||
|
|
||||||
func getCmd(method string) func(c *d.Client, p0, p1 string) error {
|
func getCmd(method string) func(c *d.Client, p0, p1 string) error {
|
||||||
switch strings.ToUpper(method) {
|
switch strings.ToUpper(method) {
|
||||||
case "LS", "LIST", "PROPFIND":
|
case "LS", "LIST", "PROPFIND":
|
||||||
|
54
netrc.go
Normal file
54
netrc.go
Normal file
@ -0,0 +1,54 @@
|
|||||||
|
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 "", ""
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user