-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathauthrc.go
153 lines (132 loc) · 2.79 KB
/
authrc.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
// authrc - The friendly authentication runcom library.
// The .authrc file contains login and initialization information used for auto login.
package authrc
import (
"io/ioutil"
"strings"
"os"
"path/filepath"
)
var (
FILE_AUTHRC string
database []*authrcLine
)
type authrcLine struct {
alias string
service string
username string
password string
command string
}
func SetFilePath(path string) (err error) {
if path == "" {
var dir_user_cfg string
if dir_user_cfg, err = os.UserConfigDir(); err != nil {
return err
}
FILE_AUTHRC = filepath.Join(dir_user_cfg, "authrc")
}else{
FILE_AUTHRC = path
}
var data []byte
if data, err = load(); err != nil {
return err
}
parse(string(data))
return
}
// Returns service, username, password and command
func GetAll(name string) (string, string, string, string) {
authrc := get(name)
if authrc != nil {
return authrc.service, authrc.username, authrc.password, authrc.command
}
return "", "", "", ""
}
// Returns both username and password
func Get(name string) (string, string) {
authrc := get(name)
if authrc != nil {
return authrc.username, authrc.password
}
return "", ""
}
func GetService(name string) string {
authrc := get(name)
if authrc != nil {
return authrc.service
}
return ""
}
func GetPassword(name string) string {
authrc := get(name)
if authrc != nil {
return authrc.password
}
return ""
}
func GetUsername(name string) string {
authrc := get(name)
if authrc != nil {
return authrc.username
}
return ""
}
func get(name string) (item *authrcLine) {
for _,item = range database {
if item.alias == name || item.service == name {
return
}
}
return nil
}
func List() string {
var sb strings.Builder
sb.WriteString("Alias\tService\n")
for _,item := range database {
sb.WriteString(item.alias)
sb.WriteString("\t")
sb.WriteString(item.service)
sb.WriteString("\n")
}
return sb.String()
}
func load() (data []byte, err error){
if data, err = ioutil.ReadFile(FILE_AUTHRC); err != nil {
if os.IsNotExist(err) {
//log.Fatalf("no netrc file found at %s: %v\n", file_user_authrc, err)
return
}
return
}
return
}
func parse(data string) () {
for _, line := range strings.Split(data, "\n") {
if len(line) == 0 {
continue
}
var authrc = new(authrcLine)
for _, fields := range strings.Split(line, ",") {
fields = strings.TrimSpace(fields)
field := strings.Fields(fields)
i := 0
for ; i < len(field)-1; i += 2 {
switch field[i] {
case "ALIAS:":
authrc.alias = field[i+1]
case "SERVICE:":
authrc.service = field[i+1]
case "USERNAME:":
authrc.username = field[i+1]
case "PASSWORD:":
authrc.password = field[i+1]
case "COMMAND:":
authrc.command = field[i+1]
}
}
}
database = append(database, authrc)
}
return
}