]> Sergey Matveev's repositories - tofuproxy.git/blob - netrc.go
io/ioutil is deprecated since Go 1.16
[tofuproxy.git] / netrc.go
1 // Nearly all code is taken from src/cmd/go/internal/auth/netrc.go
2
3 package tofuproxy
4
5 import (
6         "log"
7         "os"
8         "path/filepath"
9         "strings"
10 )
11
12 func findInNetrc(host string) (string, string) {
13         netrcPath, ok := os.LookupEnv("NETRC")
14         if !ok {
15                 homeDir, err := os.UserHomeDir()
16                 if err != nil {
17                         log.Fatalln(err)
18                 }
19                 netrcPath = filepath.Join(homeDir, ".netrc")
20         }
21         data, err := os.ReadFile(netrcPath)
22         if err != nil {
23                 if os.IsNotExist(err) {
24                         return "", ""
25                 }
26                 log.Fatalln(err)
27         }
28         inMacro := false
29         var machine, login, password string
30         for _, line := range strings.Split(string(data), "\n") {
31                 if inMacro {
32                         if line == "" {
33                                 inMacro = false
34                         }
35                         continue
36                 }
37                 fields := strings.Fields(line)
38                 i := 0
39                 for ; i < len(fields)-1; i += 2 {
40                         switch fields[i] {
41                         case "machine":
42                                 machine = fields[i+1]
43                                 login = ""
44                                 password = ""
45                         case "default":
46                                 break
47                         case "login":
48                                 login = fields[i+1]
49                         case "password":
50                                 password = fields[i+1]
51                         case "macdef":
52                                 inMacro = true
53                         }
54                         if machine != "" && login != "" && password != "" {
55                                 if machine == host {
56                                         return login, password
57                                 }
58                                 machine, login, password = "", "", ""
59                         }
60                 }
61                 if i < len(fields) && fields[i] == "default" {
62                         break
63                 }
64         }
65         return "", ""
66 }