Skip to content

Commit a7c847f

Browse files
committed
Fix Rubocop
1 parent e3b1542 commit a7c847f

File tree

8 files changed

+51
-33
lines changed

8 files changed

+51
-33
lines changed

lib/ruby_saml/idp_metadata_parser.rb

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -161,7 +161,12 @@ def parse_to_array(idp_metadata, options = {})
161161
end
162162

163163
def parse_to_idp_metadata_array(idp_metadata, options = {})
164-
@document = RubySaml::XML.safe_load_xml(idp_metadata, check_malformed_doc: true)
164+
begin
165+
@document = RubySaml::XML.safe_load_xml(idp_metadata, check_malformed_doc: true)
166+
rescue StandardError => e
167+
raise ArgumentError.new("XML load failed: #{e.message}") if e.message != 'Empty document'
168+
end
169+
165170
@options = options
166171

167172
idpsso_descriptors = self.class.get_idps(@document, options[:entity_id])

lib/ruby_saml/logoutresponse.rb

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,8 @@ def initialize(response, settings = nil, options = {})
3333
raise ArgumentError.new("Logoutresponse cannot be nil") if response.nil?
3434
@settings = settings
3535

36+
raise ValidationError.new("Invalid settings type: expected RubySaml::Settings, got #{@settings.class.name}") if !@settings.is_a?(Settings) && !@settings.nil?
37+
3638
if settings.nil? || settings.soft.nil?
3739
@soft = true
3840
else
@@ -44,8 +46,8 @@ def initialize(response, settings = nil, options = {})
4446
begin
4547
@document = RubySaml::XML.safe_load_xml(@response, check_malformed_doc: @soft)
4648
rescue StandardError => e
47-
@errors << e.message if e.message != "Empty document"
48-
return false if @soft
49+
@errors << "XML load failed: #{e.message}" if e.message != "Empty document"
50+
return if @soft
4951
raise ValidationError.new("XML load failed: #{e.message}") if e.message != "Empty document"
5052
end
5153

lib/ruby_saml/response.rb

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
# frozen_string_literal: true
22

3-
43
require "ruby_saml/settings"
54
require "ruby_saml/xml"
65
require "ruby_saml/attributes"
@@ -58,25 +57,23 @@ def initialize(response, options = {})
5857
unless options[:settings].nil?
5958
@settings = options[:settings]
6059

61-
raise ValidationError.new("Invalid settings type: expected RubySaml::Settings, got #{@settings. class. name}") if !@settings.is_a?(Settings) && !@settings.nil?
60+
raise ValidationError.new("Invalid settings type: expected RubySaml::Settings, got #{@settings.class.name}") if !@settings.is_a?(Settings) && !@settings.nil?
6261

63-
@soft = @settings&.respond_to?(:soft) && !@settings.soft.nil? ? @settings.soft : true
62+
@soft = @settings.respond_to?(:soft) && !@settings.soft.nil? ? @settings.soft : true
6463
message_max_bytesize = @settings.message_max_bytesize if @settings.respond_to?(:message_max_bytesize)
6564
end
6665

6766
@response = RubySaml::XML::Decoder.decode_message(response, message_max_bytesize)
6867
begin
6968
@document = RubySaml::XML.safe_load_xml(@response, check_malformed_doc: @soft)
7069
rescue StandardError => e
71-
@errors << "XML load failed: #{e.message}" if e.message != "Empty document"
72-
return false if @soft
73-
raise ValidationError.new("XML load failed: #{e.message}") if e.message != "Empty document"
70+
@errors << "XML load failed: #{e.message}" if e.message != 'Empty document'
71+
return if @soft
72+
raise ValidationError.new("XML load failed: #{e.message}") if e.message != 'Empty document'
7473
end
7574

76-
unless @document.nil?
77-
if assertion_encrypted?
75+
if !@document.nil? && assertion_encrypted?
7876
@decrypted_document = generate_decrypted_document
79-
end
8077
end
8178

8279
super()

lib/ruby_saml/slo_logoutrequest.rb

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -36,16 +36,20 @@ def initialize(request, options = {})
3636
@soft = true
3737
unless options[:settings].nil?
3838
@settings = options[:settings]
39-
@soft = @settings.soft unless @settings.soft.nil?
39+
40+
raise ValidationError.new("Invalid settings type: expected RubySaml::Settings, got #{@settings.class.name}") if !@settings.is_a?(Settings) && !@settings.nil?
41+
42+
@soft = @settings.respond_to?(:soft) && !@settings.soft.nil? ? @settings.soft : true
43+
message_max_bytesize = @settings.message_max_bytesize if @settings.respond_to?(:message_max_bytesize)
4044
end
4145

42-
@request = RubySaml::XML::Decoder.decode_message(request, @settings&.message_max_bytesize)
46+
@request = RubySaml::XML::Decoder.decode_message(request, message_max_bytesize)
4347
begin
4448
@document = RubySaml::XML.safe_load_xml(@request, check_malformed_doc: @soft)
4549
rescue StandardError => e
46-
@errors << e.message if e.message != "Empty document"
47-
return false if @soft
48-
raise ValidationError.new("XML load failed: #{e.message}") if e.message != "Empty document"
50+
@errors << "XML load failed: #{e.message}" if e.message != 'Empty document'
51+
return if @soft
52+
raise ValidationError.new("XML load failed: #{e.message}") if e.message != 'Empty document'
4953
end
5054

5155
super()

lib/ruby_saml/xml.rb

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -59,21 +59,21 @@ def safe_load_xml(document, check_malformed_doc: true)
5959
raise StandardError.new('Dangerous XML detected. No Doctype nodes allowed') if doc_str.include?('<!DOCTYPE')
6060

6161
begin
62-
xml = Nokogiri::XML(doc_str) do |config|
62+
doc = Nokogiri::XML(doc_str) do |config|
6363
config.options = NOKOGIRI_OPTIONS
6464
end
6565
rescue StandardError => e
6666
raise StandardError.new(e.message)
6767
rescue SyntaxError => e
68-
raise StandardError.new(e.message) if check_malformed_doc && e.message != "Empty document"
68+
raise StandardError.new(e.message) if check_malformed_doc && e.message != 'Empty document'
6969
end
7070

71-
if xml && xml.is_a?(Nokogiri::XML::Document)
72-
StandardError.new('Dangerous XML detected. No Doctype nodes allowed') if xml.internal_subset
73-
StandardError.new("There were XML errors when parsing: #{xml.errors}") if check_malformed_doc && !xml.errors.empty?
71+
if doc.is_a?(Nokogiri::XML::Document)
72+
StandardError.new('Dangerous XML detected. No Doctype nodes allowed') if doc.internal_subset
73+
StandardError.new("There were XML errors when parsing: #{doc.errors}") if check_malformed_doc && !doc.errors.empty?
7474
end
7575

76-
xml
76+
doc
7777
end
7878

7979
def copy_xml(noko)

lib/ruby_saml/xml/decryptor.rb

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,13 @@ module Decryptor
1111
# @param decryption_keys [Array] Array of private keys for decryption
1212
# @return [Nokogiri::XML::Document] The SAML document with assertions decrypted
1313
def decrypt_document(document, decryption_keys)
14-
# Copy the document
15-
document = RubySaml::XML.safe_load_xml(document.to_s, check_malformed_doc: true)
14+
# Copy the document to avoid modifying the original one
15+
begin
16+
document = RubySaml::XML.safe_load_xml(document.to_s, check_malformed_doc: true)
17+
rescue StandardError => e
18+
raise ValidationError.new("XML load failed: #{e.message}") if e.message != 'Empty document'
19+
end
20+
1621
validate_decryption_keys!(decryption_keys)
1722

1823
response_node = document.at_xpath(

lib/ruby_saml/xml/document_signer.rb

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,11 @@ module DocumentSigner
2727
# <Object />
2828
# </Signature>
2929
def sign_document(document, private_key, certificate, signature_method = RubySaml::XML::RSA_SHA256, digest_method = RubySaml::XML::SHA256)
30-
noko = RubySaml::XML.safe_load_xml(document.to_s, check_malformed_doc: true)
30+
begin
31+
noko = RubySaml::XML.safe_load_xml(document.to_s, check_malformed_doc: true)
32+
rescue StandardError => e
33+
raise ValidationError.new("XML load failed: #{e.message}") if e.message != 'Empty document'
34+
end
3135

3236
sign_document!(noko, private_key, certificate, signature_method, digest_method)
3337
end

lib/ruby_saml/xml/signed_document_info.rb

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -13,16 +13,17 @@ class SignedDocumentInfo
1313
# @param noko [Nokogiri::XML] The XML document to validate
1414
# @param check_malformed_doc [Boolean] Whether to check for malformed documents
1515
def initialize(noko, check_malformed_doc: true)
16-
noko = if noko.is_a?(Nokogiri::XML::Document)
17-
RubySaml::XML.copy_xml(noko)
18-
else
16+
@noko = if noko.is_a?(Nokogiri::XML::Document)
17+
RubySaml::XML.copy_xml(noko)
18+
else
1919
begin
20-
@document = RubySaml::XML.safe_load_xml(noko, check_malformed_doc: check_malformed_doc)
20+
RubySaml::XML.safe_load_xml(noko, check_malformed_doc: check_malformed_doc)
2121
rescue StandardError => e
22-
raise ValidationError.new("XML load failed: #{e.message}") if e.message != "Empty document"
22+
raise ValidationError.new("XML load failed: #{e.message}") if e.message != 'Empty document'
23+
24+
nil
2325
end
24-
end
25-
@noko = noko
26+
end
2627
@check_malformed_doc = check_malformed_doc
2728
end
2829

0 commit comments

Comments
 (0)