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  }