Skip to content

Commit 95450f9

Browse files
committed
Updated invalid audience error, and tests to match.
1 parent 414d144 commit 95450f9

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
@@ -597,7 +597,8 @@ def validate_audience
597597
return true if audiences.empty? || settings.issuer.nil? || settings.issuer.empty?
598598

599599
unless audiences.include? settings.issuer
600-
error_msg = "#{settings.issuer} is not a valid audience for this Response - Valid audiences: #{audiences.join(',')}"
600+
s = audiences.count > 1 ? 's' : '';
601+
error_msg = "Invalid Audience#{s}. The audience#{s} #{audiences.join(',')}, did not match the expected audience #{settings.issuer}"
601602
return append_error(error_msg)
602603
end
603604

test/response_test.rb

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

56+
def generate_audience_error(expected, actual)
57+
s = actual.count > 1 ? 's' : '';
58+
return "Invalid Audience#{s}. The audience#{s} #{actual.join(',')}, did not match the expected audience #{expected}"
59+
end
60+
5661
it "raise an exception when response is initialized with nil" do
5762
assert_raises(ArgumentError) { OneLogin::RubySaml::Response.new(nil) }
5863
end
@@ -207,7 +212,7 @@ class RubySamlTest < Minitest::Test
207212
settings.issuer = 'invalid'
208213
response_valid_signed.settings = settings
209214
response_valid_signed.soft = false
210-
error_msg = "#{response_valid_signed.settings.issuer} is not a valid audience for this Response - Valid audiences: https://someone.example.com/audience"
215+
error_msg = generate_audience_error(response_valid_signed.settings.issuer, ['https://someone.example.com/audience'])
211216
assert_raises(OneLogin::RubySaml::ValidationError, error_msg) do
212217
response_valid_signed.is_valid?
213218
end
@@ -363,7 +368,8 @@ class RubySamlTest < Minitest::Test
363368
settings.issuer = 'invalid'
364369
response_valid_signed.settings = settings
365370
response_valid_signed.is_valid?
366-
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"
371+
372+
assert_includes response_valid_signed.errors, generate_audience_error(response_valid_signed.settings.issuer, ['https://someone.example.com/audience'])
367373
end
368374

369375
it "return false when no ID present in the SAML Response" do
@@ -399,7 +405,7 @@ class RubySamlTest < Minitest::Test
399405
response_invalid_subjectconfirmation_recipient.settings = settings
400406
collect_errors = true
401407
response_invalid_subjectconfirmation_recipient.is_valid?(collect_errors)
402-
assert_includes response_invalid_subjectconfirmation_recipient.errors, "invalid is not a valid audience for this Response - Valid audiences: http://stuff.com/endpoints/metadata.php"
408+
assert_includes response_invalid_subjectconfirmation_recipient.errors, generate_audience_error('invalid', ['http://stuff.com/endpoints/metadata.php'])
403409
assert_includes response_invalid_subjectconfirmation_recipient.errors, "Invalid Signature on SAML Response"
404410
end
405411
end
@@ -417,7 +423,7 @@ class RubySamlTest < Minitest::Test
417423
response.settings = settings
418424
response.settings.issuer = 'invalid_audience'
419425
assert !response.send(:validate_audience)
420-
assert_includes response.errors, "#{response.settings.issuer} is not a valid audience for this Response - Valid audiences: {audience}"
426+
assert_includes response.errors, generate_audience_error(response.settings.issuer, ['{audience}'])
421427
end
422428
end
423429

@@ -603,7 +609,7 @@ class RubySamlTest < Minitest::Test
603609
response_invalid_audience.settings = settings
604610
response_invalid_audience.settings.issuer = "https://invalid.example.com/audience"
605611
assert !response_invalid_audience.send(:validate_audience)
606-
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"
612+
assert_includes response_invalid_audience.errors, generate_audience_error(response_invalid_audience.settings.issuer, ['http://invalid.audience.com'])
607613
end
608614
end
609615

0 commit comments

Comments
 (0)