Skip to content

Commit f5b988f

Browse files
committed
Review feedback
1 parent a7fc0fc commit f5b988f

File tree

4 files changed

+48
-3
lines changed

4 files changed

+48
-3
lines changed

internal/mode/static/nginx/config/servers_template.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ server {
5151
proxy_set_header {{ $h.Name }} "{{ $h.Value }}";
5252
{{- end }}
5353
proxy_set_header Host $gw_api_compliant_host;
54+
proxy_http_version 1.1;
5455
proxy_set_header Upgrade $http_upgrade;
5556
proxy_set_header Connection $connection_upgrade;
5657
proxy_pass {{ $l.ProxyPass }}$request_uri;

internal/mode/static/nginx/config/validation/common.go

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -52,19 +52,25 @@ func validateEscapedStringNoVarExpansion(value string, examples []string) error
5252
}
5353

5454
const (
55-
invalidHeadersErrMsg string = "redefining the Host, Connection, or Upgrade request headers is not supported"
55+
invalidHeadersErrMsg string = "unsupported header name configured, unsupported names are: "
5656
maxHeaderLength int = 256
5757
)
5858

59+
var invalidHeaders = map[string]struct{}{
60+
"host": {},
61+
"connection": {},
62+
"upgrade": {},
63+
}
64+
5965
func validateHeaderName(name string) error {
6066
if len(name) > maxHeaderLength {
6167
return errors.New(k8svalidation.MaxLenError(maxHeaderLength))
6268
}
6369
if msg := k8svalidation.IsHTTPHeaderName(name); msg != nil {
6470
return errors.New(msg[0])
6571
}
66-
if strings.ToLower(name) == "host" || strings.ToLower(name) == "connection" || strings.ToLower(name) == "upgrade" {
67-
return errors.New(invalidHeadersErrMsg)
72+
if valid, invalidHeadersAsStrings := validateNoUnsupportedValues(strings.ToLower(name), invalidHeaders); !valid {
73+
return errors.New(invalidHeadersErrMsg + strings.Join(invalidHeadersAsStrings, ", "))
6874
}
6975
return nil
7076
}

internal/mode/static/nginx/config/validation/framework.go

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,16 @@ func validateInSupportedValues[T configValue](
2020
return false, getSortedKeysAsString(supportedValues)
2121
}
2222

23+
func validateNoUnsupportedValues[T configValue](
24+
value T,
25+
unsupportedValues map[T]struct{},
26+
) (valid bool, unsupportedValuesAsStrings []string) {
27+
if _, exist := unsupportedValues[value]; exist {
28+
return false, getSortedKeysAsString(unsupportedValues)
29+
}
30+
return true, nil
31+
}
32+
2333
func getSortedKeysAsString[T configValue](m map[T]struct{}) []string {
2434
keysAsString := make([]string, 0, len(m))
2535

internal/mode/static/nginx/config/validation/framework_test.go

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,34 @@ func TestValidateInSupportedValues(t *testing.T) {
9999
)
100100
}
101101

102+
func TestValidateNoUnsupportedValues(t *testing.T) {
103+
unsupportedValues := map[string]struct{}{
104+
"badvalue1": {},
105+
"badvalue2": {},
106+
"badvalue3": {},
107+
}
108+
109+
validator := func(value string) (bool, []string) {
110+
return validateNoUnsupportedValues(value, unsupportedValues)
111+
}
112+
113+
testValidValuesForSupportedValuesValidator(
114+
t,
115+
validator,
116+
"value1",
117+
"value2",
118+
"value3",
119+
)
120+
testInvalidValuesForSupportedValuesValidator(
121+
t,
122+
validator,
123+
unsupportedValues,
124+
"badvalue1",
125+
"badvalue2",
126+
"badvalue3",
127+
)
128+
}
129+
102130
func TestGetSortedKeysAsString(t *testing.T) {
103131
values := map[string]struct{}{
104132
"value3": {},

0 commit comments

Comments
 (0)