/
config.go
85 lines (71 loc) · 2.05 KB
/
config.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
package config
import (
"encoding/json"
"fmt"
"io/ioutil"
"os"
"path/filepath"
zenchaincfg "github.com/cosmos/cosmos-sdk/server/config"
)
// nolint
var (
DefaultMaintainConfile = "maintain.conf"
DefaultNodeHome = zenchaincfg.GetNodeHome()
DefaultNodeCofig = filepath.Join(DefaultNodeHome, "config")
DefaultTestConfig = filepath.Join(DefaultNodeHome, "test_config")
DefaultTestDataHome = filepath.Join(DefaultNodeHome, "test_data")
DefaultConfig = zenchaincfg.DefaultBackendConfig
)
// nolint
type Config = zenchaincfg.BackendConfig
func loadMaintainConf(confDir string, fileName string) (*Config, error) {
fPath := confDir + string(os.PathSeparator) + fileName
if _, err := os.Stat(fPath); err != nil {
return nil, err
}
bytes := mustReadFile(fPath)
m := Config{}
err := json.Unmarshal(bytes, &m)
return &m, err
}
func dumpMaintainConf(maintainConf *Config, confDir string, fileName string) (err error) {
fPath := confDir + string(os.PathSeparator) + fileName
if _, err := os.Stat(confDir); err != nil {
if err = os.MkdirAll(confDir, os.ModePerm); err != nil {
return err
}
}
bs, err := json.MarshalIndent(maintainConf, "", " ")
if err != nil {
return err
}
mustWriteFile(fPath, bs, os.ModePerm)
return nil
}
// nolint
func SafeLoadMaintainConfig(configDir string) (conf *Config, err error) {
maintainConf, err := loadMaintainConf(configDir, DefaultMaintainConfile)
if maintainConf == nil || err != nil {
maintainConf = DefaultConfig()
if err = dumpMaintainConf(maintainConf, configDir, DefaultMaintainConfile); err != nil {
return nil, err
}
}
return maintainConf, nil
}
func mustReadFile(filePath string) []byte {
fileBytes, err := ioutil.ReadFile(filePath)
if err != nil {
fmt.Printf(fmt.Sprintf("mustReadFile failed: %v\n", err))
os.Exit(1)
return nil
}
return fileBytes
}
func mustWriteFile(filePath string, contents []byte, mode os.FileMode) {
err := ioutil.WriteFile(filePath, contents, mode)
if err != nil {
fmt.Printf(fmt.Sprintf("mustWriteFile failed: %v\n", err))
os.Exit(1)
}
}