Add cors bits into configutil listener (#9054)
* Add cors config to configutil listener parsing * Set purposeraw to nil after parsing like other params * Use canonical mime headers
This commit is contained in:
parent
34cae3f4e5
commit
0b3923c289
|
@ -3,6 +3,7 @@ package configutil
|
||||||
import (
|
import (
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"net/textproto"
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
@ -11,6 +12,7 @@ import (
|
||||||
"github.com/hashicorp/hcl"
|
"github.com/hashicorp/hcl"
|
||||||
"github.com/hashicorp/hcl/hcl/ast"
|
"github.com/hashicorp/hcl/hcl/ast"
|
||||||
"github.com/hashicorp/vault/sdk/helper/parseutil"
|
"github.com/hashicorp/vault/sdk/helper/parseutil"
|
||||||
|
"github.com/hashicorp/vault/sdk/helper/strutil"
|
||||||
"github.com/hashicorp/vault/sdk/helper/tlsutil"
|
"github.com/hashicorp/vault/sdk/helper/tlsutil"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -81,6 +83,12 @@ type Listener struct {
|
||||||
|
|
||||||
// RandomPort is used only for some testing purposes
|
// RandomPort is used only for some testing purposes
|
||||||
RandomPort bool `hcl:"-"`
|
RandomPort bool `hcl:"-"`
|
||||||
|
|
||||||
|
CorsEnabledRaw interface{} `hcl:"cors_enabled"`
|
||||||
|
CorsEnabled bool `hcl:"-"`
|
||||||
|
CorsAllowedOrigins []string `hcl:"cors_allowed_origins"`
|
||||||
|
CorsAllowedHeaders []string `hcl:"-"`
|
||||||
|
CorsAllowedHeadersRaw []string `hcl:"cors_allowed_headers"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (l *Listener) GoString() string {
|
func (l *Listener) GoString() string {
|
||||||
|
@ -127,6 +135,8 @@ func ParseListeners(result *SharedConfig, list *ast.ObjectList) error {
|
||||||
for i, v := range l.Purpose {
|
for i, v := range l.Purpose {
|
||||||
l.Purpose[i] = strings.ToLower(v)
|
l.Purpose[i] = strings.ToLower(v)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
l.PurposeRaw = nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -308,6 +318,27 @@ func ParseListeners(result *SharedConfig, list *ast.ObjectList) error {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// CORS
|
||||||
|
{
|
||||||
|
if l.CorsEnabledRaw != nil {
|
||||||
|
if l.CorsEnabled, err = parseutil.ParseBool(l.CorsEnabledRaw); err != nil {
|
||||||
|
return multierror.Prefix(fmt.Errorf("invalid value for cors_enabled: %w", err), fmt.Sprintf("listeners.%d", i))
|
||||||
|
}
|
||||||
|
|
||||||
|
l.CorsEnabledRaw = nil
|
||||||
|
}
|
||||||
|
|
||||||
|
if strutil.StrListContains(l.CorsAllowedOrigins, "*") && len(l.CorsAllowedOrigins) > 1 {
|
||||||
|
return multierror.Prefix(errors.New("cors_allowed_origins must only contain a wildcard or only non-wildcard values"), fmt.Sprintf("listeners.%d", i))
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(l.CorsAllowedHeadersRaw) > 0 {
|
||||||
|
for _, header := range l.CorsAllowedHeadersRaw {
|
||||||
|
l.CorsAllowedHeaders = append(l.CorsAllowedHeaders, textproto.CanonicalMIMEHeaderKey(header))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
result.Listeners = append(result.Listeners, &l)
|
result.Listeners = append(result.Listeners, &l)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue