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 }