Skip to content

Commit b0301c9

Browse files
authored
Merge pull request SAML-Toolkits#465 from davidlibrera/bug/security-attributes-override
Partial attributes to security settings doesn't nullify missing ones
2 parents 1c43f2e + b37366e commit b0301c9

File tree

2 files changed

+39
-4
lines changed

2 files changed

+39
-4
lines changed

lib/onelogin/ruby-saml/settings.rb

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,15 @@ module RubySaml
99
# SAML2 Toolkit Settings
1010
#
1111
class Settings
12-
def initialize(overrides = {})
13-
config = DEFAULTS.merge(overrides)
12+
def initialize(overrides = {}, keep_security_attributes = false)
13+
if keep_security_attributes
14+
security_attributes = overrides.delete(:security) || {}
15+
config = DEFAULTS.merge(overrides)
16+
config[:security] = DEFAULTS[:security].merge(security_attributes)
17+
else
18+
config = DEFAULTS.merge(overrides)
19+
end
20+
1421
config.each do |k,v|
1522
acc = "#{k.to_s}=".to_sym
1623
if respond_to? acc

test/settings_test.rb

Lines changed: 30 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,34 @@ class SettingsTest < Minitest::Test
7777
assert_equal new_settings.security[:signature_method], XMLSecurity::Document::RSA_SHA1
7878
end
7979

80+
it "overrides only provided security attributes passing a second parameter" do
81+
config = {
82+
:security => {
83+
:metadata_signed => true
84+
}
85+
}
86+
87+
@default_attributes = OneLogin::RubySaml::Settings::DEFAULTS
88+
89+
@settings = OneLogin::RubySaml::Settings.new(config, true)
90+
assert_equal @settings.security[:metadata_signed], true
91+
assert_equal @settings.security[:digest_method], @default_attributes[:security][:digest_method]
92+
end
93+
94+
it "doesn't override only provided security attributes without passing a second parameter" do
95+
config = {
96+
:security => {
97+
:metadata_signed => true
98+
}
99+
}
100+
101+
@default_attributes = OneLogin::RubySaml::Settings::DEFAULTS
102+
103+
@settings = OneLogin::RubySaml::Settings.new(config)
104+
assert_equal @settings.security[:metadata_signed], true
105+
assert_equal @settings.security[:digest_method], nil
106+
end
107+
80108
describe "#single_logout_service_url" do
81109
it "when single_logout_service_url is nil but assertion_consumer_logout_service_url returns its value" do
82110
@settings.single_logout_service_url = nil
@@ -93,7 +121,7 @@ class SettingsTest < Minitest::Test
93121

94122
assert_equal "urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect", @settings.single_logout_service_binding
95123
end
96-
end
124+
end
97125

98126
describe "#get_idp_cert" do
99127
it "returns nil when the cert is an empty string" do
@@ -169,7 +197,7 @@ class SettingsTest < Minitest::Test
169197

170198
assert @settings.get_idp_cert_multi.kind_of? Hash
171199
assert @settings.get_idp_cert_multi[:signing].kind_of? Array
172-
assert @settings.get_idp_cert_multi[:encryption].kind_of? Array
200+
assert @settings.get_idp_cert_multi[:encryption].kind_of? Array
173201
assert @settings.get_idp_cert_multi[:signing][0].kind_of? OpenSSL::X509::Certificate
174202
assert @settings.get_idp_cert_multi[:encryption][0].kind_of? OpenSSL::X509::Certificate
175203
end

0 commit comments

Comments
 (0)