Skip to content

Commit 44f21f8

Browse files
Merge pull request #15064 from jhadvig/OCPBUGS-csp
OCPBUGS-49291: Set proper type for the CSP field for the serverconfig
2 parents fc8ec86 + f15bff8 commit 44f21f8

File tree

3 files changed

+21
-12
lines changed

3 files changed

+21
-12
lines changed

pkg/serverconfig/config.go

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -419,15 +419,21 @@ func isAlreadySet(fs *flag.FlagSet, name string) bool {
419419
return alreadySet
420420
}
421421

422-
func addContentSecurityPolicy(fs *flag.FlagSet, csp MultiKeyValue) {
422+
func addContentSecurityPolicy(fs *flag.FlagSet, csp map[consolev1.DirectiveType][]string) error {
423+
var directives []string
423424
for cspDirectiveName, cspDirectiveValue := range csp {
424-
directiveName := getDirectiveName(cspDirectiveName)
425+
directiveName := getDirectiveName(string(cspDirectiveName))
425426
if directiveName == "" {
426427
klog.Fatalf("invalid CSP directive: %s", cspDirectiveName)
427428
}
428429

429-
fs.Set("content-security-policy", fmt.Sprintf("%s=%s", directiveName, cspDirectiveValue))
430+
directives = append(directives, fmt.Sprintf("%s=%s", directiveName, strings.Join(cspDirectiveValue, " ")))
430431
}
432+
433+
if len(directives) > 0 {
434+
fs.Set("content-security-policy", strings.Join(directives, ", "))
435+
}
436+
return nil
431437
}
432438

433439
func getDirectiveName(directive string) string {

pkg/serverconfig/config_test.go

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ import (
88
"os"
99
"reflect"
1010
"testing"
11+
12+
consolev1 "github.com/openshift/api/console/v1"
1113
)
1214

1315
func TestMultiKeyValueSetter(t *testing.T) {
@@ -294,9 +296,9 @@ func TestSetFlagsFromConfig(t *testing.T) {
294296
config: Config{
295297
APIVersion: "console.openshift.io/v1",
296298
Kind: "ConsoleConfig",
297-
ContentSecurityPolicy: MultiKeyValue{
298-
"FontSrc": "value2 value3",
299-
"ScriptSrc": "value1",
299+
ContentSecurityPolicy: map[consolev1.DirectiveType][]string{
300+
"FontSrc": {"value2", "value3"},
301+
"ScriptSrc": {"value1"},
300302
},
301303
},
302304
expectedFlagValues: map[string]string{

pkg/serverconfig/types.go

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package serverconfig
22

33
import (
44
configv1 "github.com/openshift/api/config/v1"
5+
consolev1 "github.com/openshift/api/console/v1"
56
operatorv1 "github.com/openshift/api/operator/v1"
67
authorizationv1 "k8s.io/api/authorization/v1"
78
)
@@ -22,12 +23,12 @@ type Config struct {
2223
Providers `yaml:"providers"`
2324
Helm `yaml:"helm"`
2425
MonitoringInfo `yaml:"monitoringInfo,omitempty"`
25-
Plugins MultiKeyValue `yaml:"plugins,omitempty"`
26-
I18nNamespaces []string `yaml:"i18nNamespaces,omitempty"`
27-
Proxy Proxy `yaml:"proxy,omitempty"`
28-
ContentSecurityPolicyEnabled bool `yaml:"contentSecurityPolicyEnabled,omitempty"`
29-
ContentSecurityPolicy MultiKeyValue `yaml:"contentSecurityPolicy,omitempty"`
30-
Telemetry MultiKeyValue `yaml:"telemetry,omitempty"`
26+
Plugins MultiKeyValue `yaml:"plugins,omitempty"`
27+
I18nNamespaces []string `yaml:"i18nNamespaces,omitempty"`
28+
Proxy Proxy `yaml:"proxy,omitempty"`
29+
ContentSecurityPolicyEnabled bool `yaml:"contentSecurityPolicyEnabled,omitempty"`
30+
ContentSecurityPolicy map[consolev1.DirectiveType][]string `yaml:"contentSecurityPolicy,omitempty"`
31+
Telemetry MultiKeyValue `yaml:"telemetry,omitempty"`
3132
}
3233

3334
type Proxy struct {

0 commit comments

Comments
 (0)