-
Notifications
You must be signed in to change notification settings - Fork 524
/
configuration.go
114 lines (88 loc) 路 2.62 KB
/
configuration.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
package config
import (
"os"
"path"
"strings"
"github.com/pkg/errors"
"gopkg.in/yaml.v2"
"github.com/infracost/infracost/internal/logging"
)
var configurationVersion = "0.1"
type Configuration struct {
Version string `yaml:"version"`
Currency string `yaml:"currency,omitempty"`
EnableDashboard *bool `yaml:"enable_dashboard,omitempty"`
DisableHCLParsing *bool `yaml:"disable_hcl_parsing,omitempty"`
TLSInsecureSkipVerify *bool `yaml:"tls_insecure_skip_verify,omitempty"`
TLSCACertFile string `yaml:"tls_ca_cert_file,omitempty"`
EnableCloud *bool `yaml:"enable_cloud"`
EnableCloudUpload *bool `yaml:"enable_cloud_upload"`
}
func loadConfiguration(cfg *Config) error {
var err error
err = cfg.migrateConfiguration()
if err != nil {
logging.Logger.Debug().Err(err).Msg("error migrating configuration")
}
cfg.Configuration, err = readConfigurationFileIfExists()
if err != nil {
return errors.New("Error parsing configuration YAML: " + strings.TrimPrefix(err.Error(), "yaml: "))
}
if cfg.Currency == "" {
cfg.Currency = cfg.Configuration.Currency
}
if cfg.Currency == "" {
cfg.Currency = "USD"
}
if cfg.Configuration.EnableDashboard != nil {
cfg.EnableDashboard = *cfg.Configuration.EnableDashboard
}
if cfg.Configuration.EnableCloud != nil {
cfg.EnableCloud = cfg.Configuration.EnableCloud
}
if cfg.Configuration.EnableCloudUpload != nil {
cfg.EnableCloudUpload = cfg.Configuration.EnableCloudUpload
}
if cfg.Configuration.DisableHCLParsing != nil {
cfg.DisableHCLParsing = *cfg.Configuration.DisableHCLParsing
}
if cfg.Configuration.TLSInsecureSkipVerify != nil {
cfg.TLSInsecureSkipVerify = cfg.Configuration.TLSInsecureSkipVerify
}
if cfg.TLSCACertFile == "" {
cfg.TLSCACertFile = cfg.Configuration.TLSCACertFile
}
return nil
}
func (c Configuration) Save() error {
if c.Version == "" {
c.Version = configurationVersion
}
return writeConfigurationFile(c)
}
func readConfigurationFileIfExists() (Configuration, error) {
if !FileExists(ConfigurationFilePath()) {
return Configuration{}, nil
}
data, err := os.ReadFile(ConfigurationFilePath())
if err != nil {
return Configuration{}, err
}
var c Configuration
err = yaml.Unmarshal(data, &c)
return c, err
}
func writeConfigurationFile(c Configuration) error {
data, err := yaml.Marshal(c)
if err != nil {
return err
}
err = os.MkdirAll(path.Dir(ConfigurationFilePath()), 0700)
if err != nil {
return err
}
return os.WriteFile(ConfigurationFilePath(), data, 0600)
}
func ConfigurationFilePath() string {
return path.Join(userConfigDir(), "configuration.yml")
}