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
|
package config
import (
"errors"
"os"
"os/user"
"path/filepath"
"strings"
"go.wit.com/log"
)
// loads your applications config file from
// ~/.config/<appname>/config.text
func (pb *Config) Load() error {
filename, err := getConfigFilenameTEXT()
if err != nil {
return err
}
_, err = SetFilename(pb, filename)
if err != nil {
return err
}
saveMu.Lock()
defer saveMu.Unlock()
err = loadTEXT(pb, filename)
return err
}
func loadENV() error {
if configPB != nil {
log.Info("configPB already loaded")
return errors.New("configPB already loaded")
}
filename, err := getConfigFilenameENV()
if err != nil {
return err
}
log.Info("loadENV()", filename)
stuff, err := os.ReadFile(filename)
if err != nil {
return err
}
saveMu.Lock()
defer saveMu.Unlock()
configPB = NewConfigs()
for i, line := range strings.Split(string(stuff), "\n") {
line = strings.TrimSpace(line)
if line == "" {
continue
}
parts := strings.Split(line, "=")
if len(parts) != 2 {
log.Info("INVALID LINE:", i, line)
continue
}
c := new(Config)
c.Key = parts[0]
c.Value = parts[1]
configPB.Append(c)
log.Printf("ENV LINE: (%v)\n", c)
}
return err
}
func getConfigFilenameENV() (string, error) {
appname, err := GetAppname() // already configured by your application
if err != nil {
return "", err
}
configdir, err := getConfigDir()
if err != nil {
return "", err
}
filename := filepath.Join(configdir, appname+".ENV")
return filename, nil
}
func getConfigFilenameTEXT() (string, error) {
appname, err := GetAppname() // already configured by your application
if err != nil {
return "", err
}
configdir, err := getConfigDir()
if err != nil {
return "", err
}
filename := filepath.Join(configdir, appname+".text")
return filename, nil
}
func GetAppname() (string, error) {
if APPNAME != "" {
return APPNAME, nil
}
return "", errors.New("your application must setup config.Init()")
}
func GetUsername() string {
if Get("username") != "" {
return Get("username")
}
usr, _ := user.Current()
if usr.Username != "" {
return usr.Username
}
return "notsure" // OS Idiocracy
}
func getCacheDir() (string, error) {
if Get("cacheDir") != "" {
return Get("cacheDir"), nil
}
cacheDir, _ := os.UserCacheDir()
appname, err := GetAppname() // application should have already configured this
if err != nil {
return cacheDir, err
}
return filepath.Join(cacheDir, appname), nil
}
func getConfigDir() (string, error) {
if Get("configDir") != "" {
return Get("configDir"), nil
}
configDir, _ := os.UserConfigDir()
appname, err := GetAppname() // application should have already configured this
if err != nil {
return configDir, err
}
return filepath.Join(configDir, appname), nil
}
|