Allow multiple cookie domains, domains and whitelists with environment variable (#98)
* comma env-delim for array flags * tests for env-delim flags
This commit is contained in:
		| @@ -25,17 +25,17 @@ type Config struct { | ||||
|  | ||||
| 	AuthHost        string               `long:"auth-host" env:"AUTH_HOST" description:"Single host to use when returning from 3rd party auth"` | ||||
| 	Config          func(s string) error `long:"config" env:"CONFIG" description:"Path to config file" json:"-"` | ||||
| 	CookieDomains   []CookieDomain       `long:"cookie-domain" env:"COOKIE_DOMAIN" description:"Domain to set auth cookie on, can be set multiple times"` | ||||
| 	CookieDomains   []CookieDomain       `long:"cookie-domain" env:"COOKIE_DOMAIN" env-delim:"," description:"Domain to set auth cookie on, can be set multiple times"` | ||||
| 	InsecureCookie  bool                 `long:"insecure-cookie" env:"INSECURE_COOKIE" description:"Use insecure cookies"` | ||||
| 	CookieName      string               `long:"cookie-name" env:"COOKIE_NAME" default:"_forward_auth" description:"Cookie Name"` | ||||
| 	CSRFCookieName  string               `long:"csrf-cookie-name" env:"CSRF_COOKIE_NAME" default:"_forward_auth_csrf" description:"CSRF Cookie Name"` | ||||
| 	DefaultAction   string               `long:"default-action" env:"DEFAULT_ACTION" default:"auth" choice:"auth" choice:"allow" description:"Default action"` | ||||
| 	DefaultProvider string               `long:"default-provider" env:"DEFAULT_PROVIDER" default:"google" choice:"google" choice:"oidc" description:"Default provider"` | ||||
| 	Domains         CommaSeparatedList   `long:"domain" env:"DOMAIN" description:"Only allow given email domains, can be set multiple times"` | ||||
| 	Domains         CommaSeparatedList   `long:"domain" env:"DOMAIN" env-delim:"," description:"Only allow given email domains, can be set multiple times"` | ||||
| 	LifetimeString  int                  `long:"lifetime" env:"LIFETIME" default:"43200" description:"Lifetime in seconds"` | ||||
| 	Path            string               `long:"url-path" env:"URL_PATH" default:"/_oauth" description:"Callback URL Path"` | ||||
| 	SecretString    string               `long:"secret" env:"SECRET" description:"Secret used for signing (required)" json:"-"` | ||||
| 	Whitelist       CommaSeparatedList   `long:"whitelist" env:"WHITELIST" description:"Only allow given email addresses, can be set multiple times"` | ||||
| 	Whitelist       CommaSeparatedList   `long:"whitelist" env:"WHITELIST" env-delim:"," description:"Only allow given email addresses, can be set multiple times"` | ||||
|  | ||||
| 	Providers provider.Providers `group:"providers" namespace:"providers" env-namespace:"PROVIDERS"` | ||||
| 	Rules     map[string]*Rule   `long:"rule.<name>.<param>" description:"Rule definitions, param can be: \"action\", \"rule\" or \"provider\""` | ||||
|   | ||||
| @@ -197,14 +197,27 @@ func TestConfigParseEnvironment(t *testing.T) { | ||||
| 	assert := assert.New(t) | ||||
| 	os.Setenv("COOKIE_NAME", "env_cookie_name") | ||||
| 	os.Setenv("PROVIDERS_GOOGLE_CLIENT_ID", "env_client_id") | ||||
| 	os.Setenv("COOKIE_DOMAIN", "test1.com,example.org") | ||||
| 	os.Setenv("DOMAIN", "test2.com,example.org") | ||||
| 	os.Setenv("WHITELIST", "test3.com,example.org") | ||||
|  | ||||
| 	c, err := NewConfig([]string{}) | ||||
| 	assert.Nil(err) | ||||
|  | ||||
| 	assert.Equal("env_cookie_name", c.CookieName, "variable should be read from environment") | ||||
| 	assert.Equal("env_client_id", c.Providers.Google.ClientID, "namespace variable should be read from environment") | ||||
| 	assert.Equal([]CookieDomain{ | ||||
| 		*NewCookieDomain("test1.com"), | ||||
| 		*NewCookieDomain("example.org"), | ||||
| 	}, c.CookieDomains, "array variable should be read from environment COOKIE_DOMAIN") | ||||
| 	assert.Equal(CommaSeparatedList{"test2.com", "example.org"}, c.Domains, "array variable should be read from environment DOMAIN") | ||||
| 	assert.Equal(CommaSeparatedList{"test3.com", "example.org"}, c.Whitelist, "array variable should be read from environment WHITELIST") | ||||
|  | ||||
| 	os.Unsetenv("COOKIE_NAME") | ||||
| 	os.Unsetenv("PROVIDERS_GOOGLE_CLIENT_ID") | ||||
| 	os.Unsetenv("COOKIE_DOMAIN") | ||||
| 	os.Unsetenv("DOMAIN") | ||||
| 	os.Unsetenv("WHITELIST") | ||||
| } | ||||
|  | ||||
| func TestConfigParseEnvironmentBackwardsCompatability(t *testing.T) { | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Pierre Kisters
					Pierre Kisters