From fe4a93b39429fb812d3288885361fa7d16ec41bc Mon Sep 17 00:00:00 2001 From: Aykhan Shahsuvarov Date: Wed, 27 Nov 2024 00:46:14 +0400 Subject: [PATCH] =?UTF-8?q?=F0=9F=94=A8=20Add=20constructors=20to=20config?= =?UTF-8?q?=20structs?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config/config.go | 65 ++++++++++++++++++++++++++++++++++++++++-------- main.go | 12 +++++---- readers/cli.go | 8 ++---- readers/json.go | 10 +++----- 4 files changed, 68 insertions(+), 27 deletions(-) diff --git a/config/config.go b/config/config.go index 99dae75..c5f71bc 100644 --- a/config/config.go +++ b/config/config.go @@ -21,10 +21,6 @@ const ( MaxDodosCountForProxies uint = 20 // Max dodos count for proxy check ) -type IConfig interface { - MergeConfigs(newConfig IConfig) IConfig -} - type RequestConfig struct { Method string URL *url.URL @@ -48,6 +44,12 @@ func (config *RequestConfig) Print() { {Number: 2, WidthMax: 50}, }) + newHeaders := make(map[string][]string) + newHeaders["User-Agent"] = []string{DefaultUserAgent} + for k, v := range config.Headers { + newHeaders[k] = v + } + t.AppendHeader(table.Row{"Request Configuration"}) t.AppendRow(table.Row{"Method", config.Method}) t.AppendSeparator() @@ -57,11 +59,11 @@ func (config *RequestConfig) Print() { t.AppendSeparator() t.AppendRow(table.Row{"Dodos", config.DodosCount}) t.AppendSeparator() - t.AppendRow(table.Row{"Request", config.RequestCount}) + t.AppendRow(table.Row{"Requests", config.RequestCount}) t.AppendSeparator() t.AppendRow(table.Row{"Params", utils.MarshalJSON(config.Params, 3)}) t.AppendSeparator() - t.AppendRow(table.Row{"Headers", utils.MarshalJSON(config.Headers, 3)}) + t.AppendRow(table.Row{"Headers", utils.MarshalJSON(newHeaders, 3)}) t.AppendSeparator() t.AppendRow(table.Row{"Cookies", utils.MarshalJSON(config.Cookies, 3)}) t.AppendSeparator() @@ -98,6 +100,26 @@ type Config struct { NoProxyCheck utils.Option[bool] `json:"no_proxy_check"` } +func NewConfig( + method string, + timeout uint32, + dodosCount uint, + requestCount uint, + noProxyCheck utils.Option[bool], +) *Config { + if noProxyCheck == nil { + noProxyCheck = utils.NewNoneOption[bool]() + } + + return &Config{ + Method: method, + Timeout: timeout, + DodosCount: dodosCount, + RequestCount: requestCount, + NoProxyCheck: noProxyCheck, + } +} + func (config *Config) MergeConfigs(newConfig *Config) { if newConfig.Method != "" { config.Method = newConfig.Method @@ -144,7 +166,7 @@ type Proxy struct { } type JSONConfig struct { - Config + *Config Params map[string][]string `json:"params"` Headers map[string][]string `json:"headers"` Cookies map[string][]string `json:"cookies"` @@ -152,8 +174,21 @@ type JSONConfig struct { Body []string `json:"body"` } +func NewJSONConfig( + config *Config, + params map[string][]string, + headers map[string][]string, + cookies map[string][]string, + proxies []Proxy, + body []string, +) *JSONConfig { + return &JSONConfig{ + config, params, headers, cookies, proxies, body, + } +} + func (config *JSONConfig) MergeConfigs(newConfig *JSONConfig) { - config.Config.MergeConfigs(&newConfig.Config) + config.Config.MergeConfigs(newConfig.Config) if len(newConfig.Params) != 0 { config.Params = newConfig.Params } @@ -172,13 +207,23 @@ func (config *JSONConfig) MergeConfigs(newConfig *JSONConfig) { } type CLIConfig struct { - Config + *Config Yes bool `json:"yes" validate:"omitempty"` ConfigFile string `validation_name:"config-file" validate:"omitempty,filepath"` } +func NewCLIConfig( + config *Config, + yes bool, + configFile string, +) *CLIConfig { + return &CLIConfig{ + config, yes, configFile, + } +} + func (config *CLIConfig) MergeConfigs(newConfig *CLIConfig) { - config.Config.MergeConfigs(&newConfig.Config) + config.Config.MergeConfigs(newConfig.Config) if newConfig.ConfigFile != "" { config.ConfigFile = newConfig.ConfigFile } diff --git a/main.go b/main.go index 4bffae7..a03cd3b 100644 --- a/main.go +++ b/main.go @@ -21,8 +21,10 @@ import ( func main() { validator := validation.NewValidator() - conf := config.Config{} - jsonConf := config.JSONConfig{} + conf := config.NewConfig("", 0, 0, 0, nil) + jsonConf := config.NewJSONConfig( + config.NewConfig("", 0, 0, 0, nil), nil, nil, nil, nil, nil, + ) cliConf, err := readers.CLIConfigReader() if err != nil || cliConf == nil { @@ -51,11 +53,11 @@ func main() { ), ) } - jsonConf = *jsonConfNew - conf.MergeConfigs(&jsonConf.Config) + jsonConf = jsonConfNew + conf.MergeConfigs(jsonConf.Config) } - conf.MergeConfigs(&cliConf.Config) + conf.MergeConfigs(cliConf.Config) conf.SetDefaults() if err := validator.Struct(conf); err != nil { utils.PrintErrAndExit( diff --git a/readers/cli.go b/readers/cli.go index 2dfe975..b16b556 100644 --- a/readers/cli.go +++ b/readers/cli.go @@ -12,12 +12,8 @@ import ( func CLIConfigReader() (*config.CLIConfig, error) { var ( - returnNil = false - cliConfig = &config.CLIConfig{ - Config: config.Config{ - NoProxyCheck: utils.NewNoneOption[bool](), - }, - } + returnNil = false + cliConfig = config.NewCLIConfig(config.NewConfig("", 0, 0, 0, nil), false, "") dodosCount uint requestCount uint timeout uint32 diff --git a/readers/json.go b/readers/json.go index f88aca5..fe65b7e 100644 --- a/readers/json.go +++ b/readers/json.go @@ -6,7 +6,6 @@ import ( "github.com/aykhans/dodo/config" customerrors "github.com/aykhans/dodo/custom_errors" - "github.com/aykhans/dodo/utils" ) func JSONConfigReader(filePath string) (*config.JSONConfig, error) { @@ -14,11 +13,10 @@ func JSONConfigReader(filePath string) (*config.JSONConfig, error) { if err != nil { return nil, customerrors.OSErrorFormater(err) } - jsonConf := &config.JSONConfig{ - Config: config.Config{ - NoProxyCheck: utils.NewNoneOption[bool](), - }, - } + jsonConf := config.NewJSONConfig( + config.NewConfig("", 0, 0, 0, nil), + nil, nil, nil, nil, nil, + ) err = json.Unmarshal(data, &jsonConf) if err != nil {