From: Sergey Matveev Date: Sat, 12 Aug 2023 12:06:45 +0000 (+0300) Subject: External netrc module X-Git-Tag: v0.4.0~5 X-Git-Url: http://www.git.stargrave.org/?p=tofuproxy.git;a=commitdiff_plain;h=a0940b3b7b5ea032a4812a39e24ef4358259ff18 External netrc module --- diff --git a/go.mod b/go.mod index d29cc78..49fdb6f 100644 --- a/go.mod +++ b/go.mod @@ -5,6 +5,7 @@ go 1.20 require ( github.com/dustin/go-humanize v1.0.1 github.com/miekg/dns v1.1.55 + go.cypherpunks.ru/netrc v0.1.0 go.cypherpunks.ru/tai64n/v2 v2.0.1 go.cypherpunks.ru/ucspi v0.0.0-20230808200029-ef2a022b68db ) diff --git a/go.sum b/go.sum index 8cd4f09..241c3db 100644 --- a/go.sum +++ b/go.sum @@ -2,6 +2,8 @@ github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkp github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto= github.com/miekg/dns v1.1.55 h1:GoQ4hpsj0nFLYe+bWiCToyrBEJXkQfOOIvFGFy0lEgo= github.com/miekg/dns v1.1.55/go.mod h1:uInx36IzPl7FYnDcMeVWxj9byh7DutNykX4G9Sj60FY= +go.cypherpunks.ru/netrc v0.1.0 h1:dzaSh4lgpPXvLzUME/hTSegg+Uw1aPEmC79fxbPLFGk= +go.cypherpunks.ru/netrc v0.1.0/go.mod h1:ZmQaL9ENEII++WQooelccr33XZcBhKd8VgtcICf4SIE= go.cypherpunks.ru/tai64n/v2 v2.0.1 h1:AnwUUgi0EixZcr6nzjUaOy2DFInFwbNRkBkgon4oJfU= go.cypherpunks.ru/tai64n/v2 v2.0.1/go.mod h1:Jlva0YVJBpaRFAJ4jfY4BXVPuav0GMyGXzYPSKCCCL0= go.cypherpunks.ru/ucspi v0.0.0-20230808200029-ef2a022b68db h1:Iwf6evW+CPPYMC0n6bikgreRLifuZQJaNNv24AIx0f4= diff --git a/httpauth.go b/httpauth.go index 92eff6e..96f23d4 100644 --- a/httpauth.go +++ b/httpauth.go @@ -25,12 +25,13 @@ import ( "os/exec" "strings" + "go.cypherpunks.ru/netrc" ttls "go.stargrave.org/tofuproxy/tls" ) func authDialog(host, realm string) (string, string, error) { var b bytes.Buffer - userInit, passInit := findInNetrc(host) + userInit, passInit := netrc.Find(host) fmt.Fprintf(&b, ` tk_setPalette grey wm title . "Unauthorized: %s" diff --git a/netrc.go b/netrc.go deleted file mode 100644 index bdc61bb..0000000 --- a/netrc.go +++ /dev/null @@ -1,68 +0,0 @@ -// Nearly all code is taken from src/cmd/go/internal/auth/netrc.go - -package tofuproxy - -import ( - "errors" - "io/fs" - "log" - "os" - "path/filepath" - "strings" -) - -func findInNetrc(host string) (string, string) { - netrcPath, ok := os.LookupEnv("NETRC") - if !ok { - homeDir, err := os.UserHomeDir() - if err != nil { - log.Fatalln(err) - } - netrcPath = filepath.Join(homeDir, ".netrc") - } - data, err := os.ReadFile(netrcPath) - if err != nil { - if errors.Is(err, fs.ErrNotExist) { - return "", "" - } - log.Fatalln(err) - } - inMacro := false - var machine, login, password string - for _, line := range strings.Split(string(data), "\n") { - if inMacro { - if line == "" { - inMacro = false - } - continue - } - fields := strings.Fields(line) - i := 0 - for ; i < len(fields)-1; i += 2 { - switch fields[i] { - case "machine": - machine = fields[i+1] - login = "" - password = "" - case "default": - break - case "login": - login = fields[i+1] - case "password": - password = fields[i+1] - case "macdef": - inMacro = true - } - if machine != "" && login != "" && password != "" { - if machine == host { - return login, password - } - machine, login, password = "", "", "" - } - } - if i < len(fields) && fields[i] == "default" { - break - } - } - return "", "" -}