forked from fbsobreira/gotron-sdk
/
config.go
128 lines (119 loc) · 2.85 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
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
package cmd
import (
"encoding/json"
"fmt"
"io/ioutil"
"os"
"strconv"
"strings"
"github.com/soyougame/gotron-sdk/pkg/common"
"github.com/spf13/cobra"
"gopkg.in/yaml.v2"
)
func init() {
cmdConfig := &cobra.Command{
Use: "config",
Short: "update default config",
RunE: func(cmd *cobra.Command, args []string) error {
cmd.Help()
return nil
},
}
cmdConfig.AddCommand([]*cobra.Command{{
Use: "set [param] [value]",
Short: "set default config",
RunE: func(cmd *cobra.Command, args []string) error {
var err error
switch args[0] {
case "node":
switch URLcomponents := strings.Split(args[1], ":"); len(URLcomponents) {
case 1:
args[1] = args[1] + ":50051"
}
config.Node = args[1]
case "ledger":
if config.Ledger, err = strconv.ParseBool(args[1]); err != nil {
return err
}
case "verbose":
if config.Verbose, err = strconv.ParseBool(args[1]); err != nil {
return err
}
case "nopretty":
if config.NoPretty, err = strconv.ParseBool(args[1]); err != nil {
return err
}
default:
return fmt.Errorf("parameter not found")
}
// save to config
return SaveConfig(config)
},
}, {
Use: "get [param]",
Short: "get default config",
Args: cobra.ExactArgs(1),
RunE: func(cmd *cobra.Command, args []string) error {
switch args[0] {
case "all":
asJSON, _ := json.Marshal(config)
fmt.Println(common.JSONPrettyFormat(string(asJSON)))
case "node":
fmt.Println(config.Node)
case "ledger":
fmt.Println(config.Ledger)
case "verbose":
fmt.Println(config.Verbose)
case "nopretty":
fmt.Println(config.NoPretty)
default:
return fmt.Errorf("parameter not found")
}
return nil
},
}}...)
RootCmd.AddCommand(cmdConfig)
}
func initConfig() {
ConfigDir = os.Getenv("HOME") + "/.config/tronctl"
if err := os.MkdirAll(ConfigDir, 0700); err != nil {
panic(err.Error())
}
DefaultConfigFile = ConfigDir + "/config.default"
var err error
config, err = LoadConfig()
if err != nil || config.Node == "" {
if !os.IsNotExist(err) || config.Node == "" {
config.Node = defaultNodeAddr
config.Ledger = false
config.Verbose = false
config.Timeout = defaultTimeout
config.NoPretty = false
SaveConfig(config)
} else {
panic(err.Error())
}
}
}
// LoadConfig loads config file in yaml format
func LoadConfig() (*Config, error) {
in, err := ioutil.ReadFile(DefaultConfigFile)
readConfig := &Config{}
if err == nil {
if err := yaml.Unmarshal(in, readConfig); err != nil {
return readConfig, err
}
}
return readConfig, err
}
// SaveConfig to yaml
func SaveConfig(conf *Config) error {
out, err := yaml.Marshal(conf)
if err != nil {
return err
}
if err := ioutil.WriteFile(DefaultConfigFile, out, 0600); err != nil {
panic(fmt.Sprintf("Failed to write to config file %s.", DefaultConfigFile))
}
return nil
}