/
env.go
109 lines (94 loc) · 2.06 KB
/
env.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
package main
import (
"net/http"
"net/url"
"os"
"os/user"
"path"
"github.com/bgentry/go-netrc/netrc"
"github.com/meplato/store2-go-client/catalogs"
"github.com/meplato/store2-go-client/products"
)
func GetBaseURL() string {
if url := os.Getenv("STORE2_URL"); url != "" {
return url
}
return "https://store2.meplato.com/api/v2"
}
func getUsername() string {
if s := os.Getenv("STORE2_USER"); s != "" {
return s
}
// Retrieve from .netrc
username, _ := getLoginAndPasswordFromNetrc(GetBaseURL())
return username
}
func getPassword() string {
if s := os.Getenv("STORE2_PASSWORD"); s != "" {
return s
}
// Retrieve from .netrc
_, password := getLoginAndPasswordFromNetrc(GetBaseURL())
return password
}
func getLoginAndPasswordFromNetrc(serviceEndpoint string) (username, password string) {
username = ""
password = ""
// Get hostname from BaseURL
u, err := url.Parse(serviceEndpoint)
if err != nil {
return
}
machine := u.Host
// Get user's home directory to find ~/.netrc
user, err := user.Current()
if err != nil {
return
}
netrcfile := path.Join(user.HomeDir, ".netrc")
// Find entry in .netrc for the given machine
m, err := netrc.FindMachine(netrcfile, machine)
if err != nil {
return
}
if m != nil {
username = m.Login
password = m.Password
}
return
}
func GetHttpClient() (*http.Client, error) {
return http.DefaultClient, nil
}
func GetCatalogsService() (*catalogs.Service, error) {
client, err := GetHttpClient()
if err != nil {
return nil, err
}
service, err := catalogs.New(client)
if err != nil {
return nil, err
}
if url := GetBaseURL(); url != "" {
service.BaseURL = url
}
service.User = getUsername()
service.Password = getPassword()
return service, nil
}
func GetProductsService() (*products.Service, error) {
client, err := GetHttpClient()
if err != nil {
return nil, err
}
service, err := products.New(client)
if err != nil {
return nil, err
}
if url := GetBaseURL(); url != "" {
service.BaseURL = url
}
service.User = getUsername()
service.Password = getPassword()
return service, nil
}