Skip to content

Commit 25be1b9

Browse files
authored
Merge pull request #441 from capybaras/fix-invalid-audience-error
Updated invalid audience error, and tests to match.
2 parents fd95ce7 + 95450f9 commit 25be1b9

2 files changed

Lines changed: 13 additions & 6 deletions

File tree

lib/onelogin/ruby-saml/response.rb

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -592,7 +592,8 @@ def validate_audience
592592
return true if audiences.empty? || settings.issuer.nil? || settings.issuer.empty?
593593

594594
unless audiences.include? settings.issuer
595-
error_msg = "#{settings.issuer} is not a valid audience for this Response - Valid audiences: #{audiences.join(',')}"
595+
s = audiences.count > 1 ? 's' : '';
596+
error_msg = "Invalid Audience#{s}. The audience#{s} #{audiences.join(',')}, did not match the expected audience #{settings.issuer}"
596597
return append_error(error_msg)
597598
end
598599

test/response_test.rb

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,11 @@ class RubySamlTest < Minitest::Test
5656
let(:response_invalid_signature_position) { OneLogin::RubySaml::Response.new(read_invalid_response("invalid_signature_position.xml.base64")) }
5757
let(:response_encrypted_nameid) { OneLogin::RubySaml::Response.new(response_document_encrypted_nameid) }
5858

59+
def generate_audience_error(expected, actual)
60+
s = actual.count > 1 ? 's' : '';
61+
return "Invalid Audience#{s}. The audience#{s} #{actual.join(',')}, did not match the expected audience #{expected}"
62+
end
63+
5964
it "raise an exception when response is initialized with nil" do
6065
assert_raises(ArgumentError) { OneLogin::RubySaml::Response.new(nil) }
6166
end
@@ -257,7 +262,7 @@ class RubySamlTest < Minitest::Test
257262
settings.issuer = 'invalid'
258263
response_valid_signed.settings = settings
259264
response_valid_signed.soft = false
260-
error_msg = "#{response_valid_signed.settings.issuer} is not a valid audience for this Response - Valid audiences: https://someone.example.com/audience"
265+
error_msg = generate_audience_error(response_valid_signed.settings.issuer, ['https://someone.example.com/audience'])
261266
assert_raises(OneLogin::RubySaml::ValidationError, error_msg) do
262267
response_valid_signed.is_valid?
263268
end
@@ -413,7 +418,8 @@ class RubySamlTest < Minitest::Test
413418
settings.issuer = 'invalid'
414419
response_valid_signed.settings = settings
415420
response_valid_signed.is_valid?
416-
assert_includes response_valid_signed.errors, "#{response_valid_signed.settings.issuer} is not a valid audience for this Response - Valid audiences: https://someone.example.com/audience"
421+
422+
assert_includes response_valid_signed.errors, generate_audience_error(response_valid_signed.settings.issuer, ['https://someone.example.com/audience'])
417423
end
418424

419425
it "return false when no ID present in the SAML Response" do
@@ -449,7 +455,7 @@ class RubySamlTest < Minitest::Test
449455
response_invalid_subjectconfirmation_recipient.settings = settings
450456
collect_errors = true
451457
response_invalid_subjectconfirmation_recipient.is_valid?(collect_errors)
452-
assert_includes response_invalid_subjectconfirmation_recipient.errors, "invalid is not a valid audience for this Response - Valid audiences: http://stuff.com/endpoints/metadata.php"
458+
assert_includes response_invalid_subjectconfirmation_recipient.errors, generate_audience_error('invalid', ['http://stuff.com/endpoints/metadata.php'])
453459
assert_includes response_invalid_subjectconfirmation_recipient.errors, "Invalid Signature on SAML Response"
454460
end
455461
end
@@ -474,7 +480,7 @@ class RubySamlTest < Minitest::Test
474480
response.settings = settings
475481
response.settings.issuer = 'invalid_audience'
476482
assert !response.send(:validate_audience)
477-
assert_includes response.errors, "#{response.settings.issuer} is not a valid audience for this Response - Valid audiences: {audience}"
483+
assert_includes response.errors, generate_audience_error(response.settings.issuer, ['{audience}'])
478484
end
479485
end
480486

@@ -660,7 +666,7 @@ class RubySamlTest < Minitest::Test
660666
response_invalid_audience.settings = settings
661667
response_invalid_audience.settings.issuer = "https://invalid.example.com/audience"
662668
assert !response_invalid_audience.send(:validate_audience)
663-
assert_includes response_invalid_audience.errors, "#{response_invalid_audience.settings.issuer} is not a valid audience for this Response - Valid audiences: http://invalid.audience.com"
669+
assert_includes response_invalid_audience.errors, generate_audience_error(response_invalid_audience.settings.issuer, ['http://invalid.audience.com'])
664670
end
665671
end
666672

0 commit comments

Comments
 (0)