Skip to content

Commit 4616771

Browse files
committed
SAML-Toolkits#331 Allow options[:settings] to be an hash for Settings overrides in IdpMetadataParser#parse
1 parent 63e4b7a commit 4616771

File tree

2 files changed

+24
-3
lines changed

2 files changed

+24
-3
lines changed

lib/onelogin/ruby-saml/idp_metadata_parser.rb

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ class IdpMetadataParser
2727
# IdP values
2828
#
2929
# @param (see IdpMetadataParser#get_idp_metadata)
30-
# @param options [Hash] :settings to provide the OneLogin::RubySaml::Settings object
30+
# @param options [Hash] :settings to provide the OneLogin::RubySaml::Settings object or an hash for Settings overrides
3131
# @return (see IdpMetadataParser#get_idp_metadata)
3232
# @raise (see IdpMetadataParser#get_idp_metadata)
3333
def parse_remote(url, validate_cert = true, options = {})
@@ -37,12 +37,17 @@ def parse_remote(url, validate_cert = true, options = {})
3737

3838
# Parse the Identity Provider metadata and update the settings with the IdP values
3939
# @param idp_metadata [String]
40-
# @param options [Hash] :settings to provide the OneLogin::RubySaml::Settings object
40+
# @param options [Hash] :settings to provide the OneLogin::RubySaml::Settings object or an hash for Settings overrides
4141
#
4242
def parse(idp_metadata, options = {})
4343
@document = REXML::Document.new(idp_metadata)
4444

45-
(options[:settings] || OneLogin::RubySaml::Settings.new).tap do |settings|
45+
settings = options[:settings]
46+
if settings.nil? || settings.is_a?(Hash)
47+
settings = OneLogin::RubySaml::Settings.new(settings || {})
48+
end
49+
50+
settings.tap do |settings|
4651
settings.idp_entity_id = idp_entity_id
4752
settings.name_identifier_format = idp_name_id_format
4853
settings.idp_sso_target_url = single_signon_service_url(options)

test/idp_metadata_parser_test.rb

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,22 @@ def initialize; end
5656
assert_equal "F1:3C:6B:80:90:5A:03:0E:6C:91:3E:5D:15:FA:DD:B0:16:45:48:72", settings.idp_cert_fingerprint
5757
end
5858

59+
it "uses settings options as hash for overrides" do
60+
idp_metadata_parser = OneLogin::RubySaml::IdpMetadataParser.new
61+
idp_metadata = read_response("idp_descriptor.xml")
62+
settings = idp_metadata_parser.parse(idp_metadata, {
63+
:settings => {
64+
:security => {
65+
:digest_method => XMLSecurity::Document::SHA256,
66+
:signature_method => XMLSecurity::Document::RSA_SHA256
67+
}
68+
}
69+
})
70+
assert_equal "F1:3C:6B:80:90:5A:03:0E:6C:91:3E:5D:15:FA:DD:B0:16:45:48:72", settings.idp_cert_fingerprint
71+
assert_equal XMLSecurity::Document::SHA256, settings.security[:digest_method]
72+
assert_equal XMLSecurity::Document::RSA_SHA256, settings.security[:signature_method]
73+
end
74+
5975
end
6076

6177
describe "download and parse IdP descriptor file" do

0 commit comments

Comments
 (0)