@@ -95,13 +95,17 @@ func (c *ContainerSecurityProviderFramework) Finalize() error {
9595 return fmt .Errorf ("failed to write security properties: %w" , err )
9696 }
9797
98+ config , err := c .loadConfig ()
99+ if err != nil {
100+ c .context .Log .Warning ("Failed to load container security provider config: %s" , err .Error ())
101+ }
98102 // Add key manager and trust manager configuration if specified
99- keyManagerEnabled := c .getKeyManagerEnabled ()
103+ keyManagerEnabled := config .getKeyManagerEnabled ()
100104 if keyManagerEnabled != "" {
101105 javaOpts += fmt .Sprintf (" -Dorg.cloudfoundry.security.keymanager.enabled=%s" , keyManagerEnabled )
102106 }
103107
104- trustManagerEnabled := c .getTrustManagerEnabled ()
108+ trustManagerEnabled := config .getTrustManagerEnabled ()
105109 if trustManagerEnabled != "" {
106110 javaOpts += fmt .Sprintf (" -Dorg.cloudfoundry.security.trustmanager.enabled=%s" , trustManagerEnabled )
107111 }
@@ -214,44 +218,38 @@ func (c *ContainerSecurityProviderFramework) getDefaultSecurityProviders() []str
214218 }
215219}
216220
217- // getKeyManagerEnabled returns the key_manager_enabled configuration value
218- func ( c * ContainerSecurityProviderFramework ) getKeyManagerEnabled () string {
219- config := os . Getenv ( "JBP_CONFIG_CONTAINER_SECURITY_PROVIDER" )
220- if config == "" {
221- return ""
221+ func ( c * ContainerSecurityProviderFramework ) loadConfig () ( * containerSecurityProviderConfig , error ) {
222+ // initialize default values
223+ secConfig := containerSecurityProviderConfig {
224+ KeyManagerEnabled : "" ,
225+ TrustManagerEnabled : "" ,
222226 }
223-
224- // Parse configuration for key_manager_enabled
225- // Format: {key_manager_enabled: true} or {'key_manager_enabled': 'true' }
226- if contains ( config , "key_manager_enabled" ) {
227- if contains ( config , "true" ) {
228- return "true"
227+ config := os . Getenv ( "JBP_CONFIG_CONTAINER_SECURITY_PROVIDER" )
228+ if config != "" {
229+ yamlHandler := common. YamlHandler { }
230+ err := yamlHandler . ValidateFields ([] byte ( config ), & secConfig )
231+ if err != nil {
232+ c . context . Log . Warning ( "Unknown user config values: %s" , err . Error ())
229233 }
230- if contains (config , "false" ) {
231- return "false"
234+ // overlay JBP_CONFIG_CONTAINER_SECURITY_PROVIDER over default values
235+ if err = yamlHandler .Unmarshal ([]byte (config ), & secConfig ); err != nil {
236+ return nil , fmt .Errorf ("failed to parse JBP_CONFIG_CONTAINER_SECURITY_PROVIDER: %w" , err )
232237 }
233238 }
239+ return & secConfig , nil
240+ }
234241
235- return ""
242+ // getKeyManagerEnabled returns the key_manager_enabled configuration value
243+ func (c * containerSecurityProviderConfig ) getKeyManagerEnabled () string {
244+ return c .KeyManagerEnabled
236245}
237246
238247// getTrustManagerEnabled returns the trust_manager_enabled configuration value
239- func (c * ContainerSecurityProviderFramework ) getTrustManagerEnabled () string {
240- config := os .Getenv ("JBP_CONFIG_CONTAINER_SECURITY_PROVIDER" )
241- if config == "" {
242- return ""
243- }
244-
245- // Parse configuration for trust_manager_enabled
246- // Format: {trust_manager_enabled: true} or {'trust_manager_enabled': 'true'}
247- if contains (config , "trust_manager_enabled" ) {
248- if contains (config , "true" ) {
249- return "true"
250- }
251- if contains (config , "false" ) {
252- return "false"
253- }
254- }
248+ func (c * containerSecurityProviderConfig ) getTrustManagerEnabled () string {
249+ return c .TrustManagerEnabled
250+ }
255251
256- return ""
252+ type containerSecurityProviderConfig struct {
253+ KeyManagerEnabled string `yaml:"key_manager_enabled"`
254+ TrustManagerEnabled string `yaml:"trust_manager_enabled"`
257255}
0 commit comments