github.com/safing/portbase@v0.19.5/api/config.go (about)

     1  package api
     2  
     3  import (
     4  	"flag"
     5  
     6  	"github.com/safing/portbase/config"
     7  )
     8  
     9  // Config Keys.
    10  const (
    11  	CfgDefaultListenAddressKey = "core/listenAddress"
    12  	CfgAPIKeys                 = "core/apiKeys"
    13  )
    14  
    15  var (
    16  	listenAddressFlag    string
    17  	listenAddressConfig  config.StringOption
    18  	defaultListenAddress string
    19  
    20  	configuredAPIKeys config.StringArrayOption
    21  
    22  	devMode config.BoolOption
    23  )
    24  
    25  func init() {
    26  	flag.StringVar(
    27  		&listenAddressFlag,
    28  		"api-address",
    29  		"",
    30  		"set api listen address; configuration is stronger",
    31  	)
    32  }
    33  
    34  func getDefaultListenAddress() string {
    35  	// check if overridden
    36  	if listenAddressFlag != "" {
    37  		return listenAddressFlag
    38  	}
    39  	// return internal default
    40  	return defaultListenAddress
    41  }
    42  
    43  func registerConfig() error {
    44  	err := config.Register(&config.Option{
    45  		Name:            "API Listen Address",
    46  		Key:             CfgDefaultListenAddressKey,
    47  		Description:     "Defines the IP address and port on which the internal API listens.",
    48  		OptType:         config.OptTypeString,
    49  		ExpertiseLevel:  config.ExpertiseLevelDeveloper,
    50  		ReleaseLevel:    config.ReleaseLevelStable,
    51  		DefaultValue:    getDefaultListenAddress(),
    52  		ValidationRegex: "^([0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}:[0-9]{1,5}|\\[[:0-9A-Fa-f]+\\]:[0-9]{1,5})$",
    53  		RequiresRestart: true,
    54  		Annotations: config.Annotations{
    55  			config.DisplayOrderAnnotation: 513,
    56  			config.CategoryAnnotation:     "Development",
    57  		},
    58  	})
    59  	if err != nil {
    60  		return err
    61  	}
    62  	listenAddressConfig = config.GetAsString(CfgDefaultListenAddressKey, getDefaultListenAddress())
    63  
    64  	err = config.Register(&config.Option{
    65  		Name:           "API Keys",
    66  		Key:            CfgAPIKeys,
    67  		Description:    "Define API keys for privileged access to the API. Every entry is a separate API key with respective permissions. Format is `<key>?read=<perm>&write=<perm>`. Permissions are `anyone`, `user` and `admin`, and may be omitted.",
    68  		Sensitive:      true,
    69  		OptType:        config.OptTypeStringArray,
    70  		ExpertiseLevel: config.ExpertiseLevelDeveloper,
    71  		ReleaseLevel:   config.ReleaseLevelStable,
    72  		DefaultValue:   []string{},
    73  		Annotations: config.Annotations{
    74  			config.DisplayOrderAnnotation: 514,
    75  			config.CategoryAnnotation:     "Development",
    76  		},
    77  	})
    78  	if err != nil {
    79  		return err
    80  	}
    81  	configuredAPIKeys = config.GetAsStringArray(CfgAPIKeys, []string{})
    82  
    83  	devMode = config.Concurrent.GetAsBool(config.CfgDevModeKey, false)
    84  
    85  	return nil
    86  }
    87  
    88  // SetDefaultAPIListenAddress sets the default listen address for the API.
    89  func SetDefaultAPIListenAddress(address string) {
    90  	defaultListenAddress = address
    91  }