Skip to content

Commit 983dadb

Browse files
committed
OCPBUGS-46513: Add ConsolePluginContentSecurityPolicy feature gate to console config
1 parent c9beaf1 commit 983dadb

File tree

7 files changed

+102
-79
lines changed

7 files changed

+102
-79
lines changed

pkg/console/operator/operator.go

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,9 @@ type consoleOperator struct {
8787
versionGetter status.VersionGetter
8888
// lister
8989
consolePluginLister listerv1.ConsolePluginLister
90-
// feature gate
90+
91+
// CSP feature gate enabled
92+
contentSecurityPolicyEnabled bool
9193

9294
resourceSyncer resourcesynccontroller.ResourceSyncer
9395

@@ -105,6 +107,7 @@ type trackables struct {
105107

106108
func NewConsoleOperator(
107109
ctx context.Context,
110+
contentSecurityPolicyEnabled bool,
108111
// top level config
109112
configClient configclientv1.ConfigV1Interface,
110113
configInformer configinformer.SharedInformerFactory,
@@ -185,7 +188,8 @@ func NewConsoleOperator(
185188
consolePluginLister: consolePluginInformer.Lister(),
186189
resourceSyncer: resourceSyncer,
187190

188-
monitoringDeploymentLister: monitoringDeploymentInformer.Lister(),
191+
monitoringDeploymentLister: monitoringDeploymentInformer.Lister(),
192+
contentSecurityPolicyEnabled: contentSecurityPolicyEnabled,
189193
}
190194

191195
informers := []factory.Informer{

pkg/console/operator/sync_v400.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -415,6 +415,7 @@ func (co *consoleOperator) SyncConfigMap(
415415
nodeArchitectures,
416416
nodeOperatingSystems,
417417
copiedCSVsDisabled,
418+
co.contentSecurityPolicyEnabled,
418419
telemetryConfig,
419420
consoleHost,
420421
)

pkg/console/starter/starter.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -220,9 +220,11 @@ func RunOperator(ctx context.Context, controllerContext *controllercmd.Controlle
220220
return err
221221
}
222222

223+
contentSecurityPolicyEnabled := featureGates.Enabled("ConsolePluginContentSecurityPolicy")
223224
// TODO: rearrange these into informer,client pairs, NOT separated.
224225
consoleOperator := consoleoperator.NewConsoleOperator(
225226
ctx,
227+
contentSecurityPolicyEnabled,
226228
// top level config
227229
configClient.ConfigV1(),
228230
configInformers,

pkg/console/subresource/configmap/configmap.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ func DefaultConfigMap(
4747
nodeArchitectures []string,
4848
nodeOperatingSystems []string,
4949
copiedCSVsDisabled bool,
50+
contentSecurityPolicyEnabled bool,
5051
telemeterConfig map[string]string,
5152
consoleHost string,
5253
) (consoleConfigMap *corev1.ConfigMap, unsupportedOverridesHaveMerged bool, err error) {
@@ -86,6 +87,7 @@ func DefaultConfigMap(
8687
Plugins(getPluginsEndpointMap(availablePlugins)).
8788
I18nNamespaces(pluginsWithI18nNamespace(availablePlugins)).
8889
ContentSecurityPolicies(aggregateCSPDirectives(availablePlugins)).
90+
ContentSecurityPolicyEnabled(contentSecurityPolicyEnabled).
8991
Proxy(getPluginsProxyServices(availablePlugins)).
9092
CustomLogoFile(operatorConfig.Spec.Customization.CustomLogoFile.Key).
9193
CustomProductName(operatorConfig.Spec.Customization.CustomProductName).

pkg/console/subresource/configmap/configmap_test.go

Lines changed: 16 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -51,20 +51,21 @@ nV5cXbp9W1bC12Tc8nnNXn4ypLE2JTQAvyp51zoZ8hQoSnRVx/VCY55Yu+br8gQZ
5151
// To manually run these tests: go test -v ./pkg/console/subresource/configmap/...
5252
func TestDefaultConfigMap(t *testing.T) {
5353
type args struct {
54-
operatorConfig *operatorv1.Console
55-
authConfig *configv1.Authentication
56-
consoleConfig *configv1.Console
57-
managedConfig *corev1.ConfigMap
58-
monitoringSharedConfig *corev1.ConfigMap
59-
authServerCAConfig *corev1.ConfigMap
60-
infrastructureConfig *configv1.Infrastructure
61-
rt *routev1.Route
62-
inactivityTimeoutSeconds int
63-
availablePlugins []*consolev1.ConsolePlugin
64-
nodeArchitectures []string
65-
nodeOperatingSystems []string
66-
copiedCSVsDisabled bool
67-
telemetryConfig map[string]string
54+
operatorConfig *operatorv1.Console
55+
authConfig *configv1.Authentication
56+
consoleConfig *configv1.Console
57+
managedConfig *corev1.ConfigMap
58+
monitoringSharedConfig *corev1.ConfigMap
59+
authServerCAConfig *corev1.ConfigMap
60+
infrastructureConfig *configv1.Infrastructure
61+
rt *routev1.Route
62+
inactivityTimeoutSeconds int
63+
availablePlugins []*consolev1.ConsolePlugin
64+
nodeArchitectures []string
65+
nodeOperatingSystems []string
66+
copiedCSVsDisabled bool
67+
contentSecurityPolicyEnabled bool
68+
telemetryConfig map[string]string
6869
}
6970
t.Setenv("OPERATOR_IMAGE_VERSION", testReleaseVersion)
7071
tests := []struct {
@@ -1069,6 +1070,7 @@ providers: {}
10691070
tt.args.nodeArchitectures,
10701071
tt.args.nodeOperatingSystems,
10711072
tt.args.copiedCSVsDisabled,
1073+
tt.args.contentSecurityPolicyEnabled,
10721074
tt.args.telemetryConfig,
10731075
tt.args.rt.Spec.Host,
10741076
)

pkg/console/subresource/consoleserver/config_builder.go

Lines changed: 60 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -42,41 +42,42 @@ const (
4242
//
4343
// b.Host().Brand("").Config()
4444
type ConsoleServerCLIConfigBuilder struct {
45-
host string
46-
logoutRedirectURL string
47-
brand operatorv1.Brand
48-
docURL string
49-
apiServerURL string
50-
controlPlaneToplogy configv1.TopologyMode
51-
statusPageID string
52-
customProductName string
53-
devCatalogCustomization operatorv1.DeveloperConsoleCatalogCustomization
54-
projectAccess operatorv1.ProjectAccess
55-
quickStarts operatorv1.QuickStarts
56-
addPage operatorv1.AddPage
57-
perspectives []operatorv1.Perspective
58-
customLogoFile string
59-
CAFile string
60-
monitoring map[string]string
61-
customHostnameRedirectPort int
62-
inactivityTimeoutSeconds int
63-
pluginsList map[string]string
64-
i18nNamespaceList []string
65-
proxyServices []ProxyService
66-
telemetry map[string]string
67-
releaseVersion string
68-
nodeArchitectures []string
69-
nodeOperatingSystems []string
70-
copiedCSVsDisabled bool
71-
oauthClientID string
72-
oidcExtraScopes []string
73-
oidcIssuerURL string
74-
oidcOCLoginCommand string
75-
authType string
76-
sessionEncryptionFile string
77-
sessionAuthenticationFile string
78-
capabilities []operatorv1.Capability
79-
contentSecurityPolicyList map[v1.DirectiveType][]string
45+
host string
46+
logoutRedirectURL string
47+
brand operatorv1.Brand
48+
docURL string
49+
apiServerURL string
50+
controlPlaneToplogy configv1.TopologyMode
51+
statusPageID string
52+
customProductName string
53+
devCatalogCustomization operatorv1.DeveloperConsoleCatalogCustomization
54+
projectAccess operatorv1.ProjectAccess
55+
quickStarts operatorv1.QuickStarts
56+
addPage operatorv1.AddPage
57+
perspectives []operatorv1.Perspective
58+
customLogoFile string
59+
CAFile string
60+
monitoring map[string]string
61+
customHostnameRedirectPort int
62+
inactivityTimeoutSeconds int
63+
pluginsList map[string]string
64+
i18nNamespaceList []string
65+
proxyServices []ProxyService
66+
telemetry map[string]string
67+
releaseVersion string
68+
nodeArchitectures []string
69+
nodeOperatingSystems []string
70+
copiedCSVsDisabled bool
71+
oauthClientID string
72+
oidcExtraScopes []string
73+
oidcIssuerURL string
74+
oidcOCLoginCommand string
75+
authType string
76+
sessionEncryptionFile string
77+
sessionAuthenticationFile string
78+
capabilities []operatorv1.Capability
79+
contentSecurityPolicyEnabled bool
80+
contentSecurityPolicyList map[v1.DirectiveType][]string
8081
}
8182

8283
func (b *ConsoleServerCLIConfigBuilder) Host(host string) *ConsoleServerCLIConfigBuilder {
@@ -211,6 +212,11 @@ func (b *ConsoleServerCLIConfigBuilder) ContentSecurityPolicies(cspList map[v1.D
211212
return b
212213
}
213214

215+
func (b *ConsoleServerCLIConfigBuilder) ContentSecurityPolicyEnabled(enabled bool) *ConsoleServerCLIConfigBuilder {
216+
b.contentSecurityPolicyEnabled = enabled
217+
return b
218+
}
219+
214220
func (b *ConsoleServerCLIConfigBuilder) I18nNamespaces(i18nNamespaces []string) *ConsoleServerCLIConfigBuilder {
215221
b.i18nNamespaceList = i18nNamespaces
216222
return b
@@ -248,20 +254,21 @@ func (b *ConsoleServerCLIConfigBuilder) CopiedCSVsDisabled(copiedCSVsDisabled bo
248254

249255
func (b *ConsoleServerCLIConfigBuilder) Config() Config {
250256
return Config{
251-
Kind: "ConsoleConfig",
252-
APIVersion: "console.openshift.io/v1",
253-
Auth: b.auth(),
254-
Session: b.session(),
255-
ClusterInfo: b.clusterInfo(),
256-
Customization: b.customization(),
257-
ServingInfo: b.servingInfo(),
258-
Providers: b.providers(),
259-
MonitoringInfo: b.monitoringInfo(),
260-
Plugins: b.plugins(),
261-
I18nNamespaces: b.i18nNamespaces(),
262-
Proxy: b.proxy(),
263-
ContentSecurityPolicy: b.contentSecurityPolicy(),
264-
Telemetry: b.telemetry,
257+
Kind: "ConsoleConfig",
258+
APIVersion: "console.openshift.io/v1",
259+
Auth: b.auth(),
260+
Session: b.session(),
261+
ClusterInfo: b.clusterInfo(),
262+
Customization: b.customization(),
263+
ServingInfo: b.servingInfo(),
264+
Providers: b.providers(),
265+
MonitoringInfo: b.monitoringInfo(),
266+
Plugins: b.plugins(),
267+
I18nNamespaces: b.i18nNamespaces(),
268+
Proxy: b.proxy(),
269+
ContentSecurityPolicy: b.contentSecurityPolicy(),
270+
ContentSecurityPolicyEnabled: b.getContentSecurityPolicyEnabled(),
271+
Telemetry: b.telemetry,
265272
}
266273
}
267274

@@ -529,6 +536,10 @@ func (b *ConsoleServerCLIConfigBuilder) contentSecurityPolicy() map[v1.Directive
529536
return b.contentSecurityPolicyList
530537
}
531538

539+
func (b *ConsoleServerCLIConfigBuilder) getContentSecurityPolicyEnabled() bool {
540+
return b.contentSecurityPolicyEnabled
541+
}
542+
532543
func (b *ConsoleServerCLIConfigBuilder) proxy() Proxy {
533544
return Proxy{
534545
Services: b.proxyServices,

pkg/console/subresource/consoleserver/types.go

Lines changed: 15 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -18,20 +18,21 @@ import (
1818

1919
// Config is the top-level console server cli configuration.
2020
type Config struct {
21-
APIVersion string `yaml:"apiVersion"`
22-
Kind string `yaml:"kind"`
23-
ServingInfo `yaml:"servingInfo"`
24-
ClusterInfo `yaml:"clusterInfo"`
25-
Auth `yaml:"auth"`
26-
Session `yaml:"session"`
27-
Customization `yaml:"customization"`
28-
Providers `yaml:"providers"`
29-
MonitoringInfo `yaml:"monitoringInfo,omitempty"`
30-
Plugins map[string]string `yaml:"plugins,omitempty"`
31-
I18nNamespaces []string `yaml:"i18nNamespaces,omitempty"`
32-
Proxy Proxy `yaml:"proxy,omitempty"`
33-
ContentSecurityPolicy map[v1.DirectiveType][]string `yaml:"contentSecurityPolicy,omitempty"`
34-
Telemetry map[string]string `yaml:"telemetry,omitempty"`
21+
APIVersion string `yaml:"apiVersion"`
22+
Kind string `yaml:"kind"`
23+
ServingInfo `yaml:"servingInfo"`
24+
ClusterInfo `yaml:"clusterInfo"`
25+
Auth `yaml:"auth"`
26+
Session `yaml:"session"`
27+
Customization `yaml:"customization"`
28+
Providers `yaml:"providers"`
29+
MonitoringInfo `yaml:"monitoringInfo,omitempty"`
30+
Plugins map[string]string `yaml:"plugins,omitempty"`
31+
I18nNamespaces []string `yaml:"i18nNamespaces,omitempty"`
32+
Proxy Proxy `yaml:"proxy,omitempty"`
33+
ContentSecurityPolicy map[v1.DirectiveType][]string `yaml:"contentSecurityPolicy,omitempty"`
34+
ContentSecurityPolicyEnabled bool `yaml:"contentSecurityPolicyEnabled,omitempty"`
35+
Telemetry map[string]string `yaml:"telemetry,omitempty"`
3536
}
3637

3738
type Proxy struct {

0 commit comments

Comments
 (0)