From 9bd0c60e5007dc30808b7eef17a091fb248d54d6 Mon Sep 17 00:00:00 2001 From: René 'Necoro' Neumann Date: Fri, 1 May 2020 18:18:40 +0200 Subject: Print warning on deprecated options. Handle "disable-ssl-verification" --- pkg/config/deprecated.go | 57 ++++++++++++++++++++++++++++++++++++++++++++++++ pkg/config/yaml.go | 8 ++++--- 2 files changed, 62 insertions(+), 3 deletions(-) create mode 100644 pkg/config/deprecated.go (limited to 'pkg') diff --git a/pkg/config/deprecated.go b/pkg/config/deprecated.go new file mode 100644 index 0000000..c002085 --- /dev/null +++ b/pkg/config/deprecated.go @@ -0,0 +1,57 @@ +package config + +import ( + "fmt" + + "github.com/Necoro/feed2imap-go/pkg/log" +) + +type deprecated struct { + msg string + handle func(interface{}, *GlobalOptions, *Options) +} + +var unsupported = deprecated{ + "It won't be supported and is ignored!", + nil, +} + +var deprecatedOpts = map[string]deprecated{ + "dumpdir": unsupported, + "debug-updated": {"Use '-d' as option instead.", nil}, + "execurl": unsupported, + "filter": unsupported, + "disable-ssl-verification": {"Interpreted as 'tls-no-verify'.", func(i interface{}, global *GlobalOptions, opts *Options) { + val, ok := i.(bool) + if ok { + if val && !opts.NoTLS { + // do not overwrite the set NoTLS flag! + opts.NoTLS = val + } + } else { + log.Errorf("disable-ssl-verification: value '%v' cannot be interpreted as a boolean. Ignoring!", i) + } + }}, +} + +func handleDeprecated(option string, value interface{}, feed string, global *GlobalOptions, opts *Options) bool { + dep, ok := deprecatedOpts[option] + if !ok { + return false + } + + var prefix string + if feed != "" { + prefix = fmt.Sprintf("Feed '%s': ", feed) + } else { + prefix = "Global " + } + + log.Warnf("%sOption '%s' is deprecated: %s", prefix, option, dep.msg) + + if dep.handle != nil { + dep.handle(value, global, opts) + } + + return true +} diff --git a/pkg/config/yaml.go b/pkg/config/yaml.go index e8dc401..1afba0a 100644 --- a/pkg/config/yaml.go +++ b/pkg/config/yaml.go @@ -86,10 +86,10 @@ func (cfg *Config) fixGlobalOptions(unparsed Map) { newOpts, _ := buildOptions(&cfg.FeedOptions, unparsed) - for k := range origMap { + for k, v := range origMap { if _, ok := unparsed[k]; !ok { log.Warnf("Global option '%s' should be inside the 'options' map. It currently overwrites the same key there.", k) - } else { + } else if !handleDeprecated(k, v, "", &cfg.GlobalOptions, &newOpts) { log.Warnf("Unknown global option '%s'. Ignored!", k) } } @@ -199,7 +199,9 @@ func buildFeeds(cfg []configGroupFeed, target []string, feeds Feeds, globalFeedO opt, unknown := buildOptions(globalFeedOptions, f.Options) for _, optName := range unknown { - log.Warnf("Unknown option '%s' for feed '%s'. Ignored!", optName, name) + if !handleDeprecated(optName, f.Options[optName], name, nil, &opt) { + log.Warnf("Unknown option '%s' for feed '%s'. Ignored!", optName, name) + } } feedCopy.Options = opt -- cgit v1.2.3-54-g00ecf