github.com/wtfutil/wtf@v0.43.0/modules/ipaddresses/ipinfo/settings.go (about) 1 package ipinfo 2 3 import ( 4 "fmt" 5 "github.com/olebedev/config" 6 "github.com/wtfutil/wtf/cfg" 7 log "github.com/wtfutil/wtf/logger" 8 ) 9 10 const ( 11 defaultFocusable = false 12 defaultTitle = "IPInfo" 13 ipV4 protocolVersion = "v4" 14 ipV6 protocolVersion = "v6" 15 auto protocolVersion = "auto" 16 ) 17 18 type protocolVersion string 19 20 func (pv protocolVersion) String() string { 21 switch pv { 22 case ipV4: 23 return "v4" 24 case ipV6: 25 return "v6" 26 default: 27 return "auto" 28 } 29 } 30 31 func newProtocolVersion(str string) (protocolVersion, error) { 32 switch str { 33 case "v4": 34 return ipV4, nil 35 case "v6": 36 return ipV6, nil 37 case "auto": 38 return auto, nil 39 default: 40 return "", fmt.Errorf("%s module: Unsupported protocol version: '%s'", defaultTitle, str) 41 } 42 } 43 44 type Settings struct { 45 *cfg.Common 46 47 apiToken string `help:"An api token" optional:"true"` 48 protocolVersion protocolVersion `help:"IP protocol version to display. Possible options are: 'v4' to show only IpV4 address, 'v6' to show only IpV6 address and 'auto' (default) to show the address preferred by OS." optional:"true"` 49 } 50 51 func NewSettingsFromYAML(name string, ymlConfig *config.Config, globalConfig *config.Config) *Settings { 52 settings := Settings{ 53 Common: cfg.NewCommonSettingsFromModule(name, defaultTitle, defaultFocusable, ymlConfig, globalConfig), 54 55 apiToken: ymlConfig.UString("apiToken", ""), 56 protocolVersion: auto, 57 } 58 59 pv, err := newProtocolVersion(ymlConfig.UString("protocolVersion", auto.String())) 60 if err != nil { 61 log.Log(err.Error()) 62 log.Log(fmt.Sprintf("%s module: Use '%s' protocol version as a default", defaultTitle, auto)) 63 } else { 64 settings.protocolVersion = pv 65 } 66 67 settings.SetDocumentationPath("ipaddress/ipinfo") 68 69 return &settings 70 }