Skip to content

Commit bda2864

Browse files
committed
Raise SettingError if invoking an action with no endpoint defined on the settings
1 parent 41efb02 commit bda2864

File tree

5 files changed

+17
-5
lines changed

5 files changed

+17
-5
lines changed

lib/onelogin/ruby-saml/authrequest.rb

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
require "onelogin/ruby-saml/logging"
44
require "onelogin/ruby-saml/saml_message"
55
require "onelogin/ruby-saml/utils"
6+
require "onelogin/ruby-saml/setting_error"
67

78
# Only supports SAML 2.0
89
module OneLogin
@@ -36,7 +37,7 @@ def create(settings, params = {})
3637
params.each_pair do |key, value|
3738
request_params << "&#{key.to_s}=#{CGI.escape(value.to_s)}"
3839
end
39-
raise "Invalid settings, idp_sso_target_url is not set!" if settings.idp_sso_target_url.nil?
40+
raise SettingError.new "Invalid settings, idp_sso_target_url is not set!" if settings.idp_sso_target_url.nil? or settings.idp_sso_target_url.empty?
4041
@login_url = settings.idp_sso_target_url + request_params
4142
end
4243

@@ -107,7 +108,7 @@ def create_xml_document(settings)
107108
root.attributes['ID'] = uuid
108109
root.attributes['IssueInstant'] = time
109110
root.attributes['Version'] = "2.0"
110-
root.attributes['Destination'] = settings.idp_sso_target_url unless settings.idp_sso_target_url.nil?
111+
root.attributes['Destination'] = settings.idp_sso_target_url unless settings.idp_sso_target_url.nil? or settings.idp_sso_target_url.empty?
111112
root.attributes['IsPassive'] = settings.passive unless settings.passive.nil?
112113
root.attributes['ProtocolBinding'] = settings.protocol_binding unless settings.protocol_binding.nil?
113114
root.attributes["AttributeConsumingServiceIndex"] = settings.attributes_index unless settings.attributes_index.nil?

lib/onelogin/ruby-saml/logoutrequest.rb

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
require "onelogin/ruby-saml/logging"
22
require "onelogin/ruby-saml/saml_message"
33
require "onelogin/ruby-saml/utils"
4+
require "onelogin/ruby-saml/setting_error"
45

56
# Only supports SAML 2.0
67
module OneLogin
@@ -33,6 +34,7 @@ def create(settings, params={})
3334
params.each_pair do |key, value|
3435
request_params << "&#{key.to_s}=#{CGI.escape(value.to_s)}"
3536
end
37+
raise SettingError.new "Invalid settings, idp_slo_target_url is not set!" if settings.idp_slo_target_url.nil? or settings.idp_slo_target_url.empty?
3638
@logout_url = settings.idp_slo_target_url + request_params
3739
end
3840

@@ -103,7 +105,7 @@ def create_xml_document(settings)
103105
root.attributes['ID'] = uuid
104106
root.attributes['IssueInstant'] = time
105107
root.attributes['Version'] = "2.0"
106-
root.attributes['Destination'] = settings.idp_slo_target_url unless settings.idp_slo_target_url.nil?
108+
root.attributes['Destination'] = settings.idp_slo_target_url unless settings.idp_slo_target_url.nil? or settings.idp_slo_target_url.empty?
107109

108110
if settings.sp_entity_id
109111
issuer = root.add_element "saml:Issuer"
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
module OneLogin
2+
module RubySaml
3+
class SettingError < StandardError
4+
end
5+
end
6+
end

lib/onelogin/ruby-saml/slo_logoutresponse.rb

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
require "onelogin/ruby-saml/saml_message"
44
require "onelogin/ruby-saml/utils"
5+
require "onelogin/ruby-saml/setting_error"
56

67
# Only supports SAML 2.0
78
module OneLogin
@@ -37,6 +38,7 @@ def create(settings, request_id = nil, logout_message = nil, params = {})
3738
response_params << "&#{key.to_s}=#{CGI.escape(value.to_s)}"
3839
end
3940

41+
raise SettingError.new "Invalid settings, idp_slo_target_url is not set!" if settings.idp_slo_target_url.nil? or settings.idp_slo_target_url.empty?
4042
@logout_url = settings.idp_slo_target_url + response_params
4143
end
4244

@@ -112,7 +114,7 @@ def create_xml_document(settings, request_id = nil, logout_message = nil)
112114
root.attributes['IssueInstant'] = time
113115
root.attributes['Version'] = '2.0'
114116
root.attributes['InResponseTo'] = request_id unless request_id.nil?
115-
root.attributes['Destination'] = settings.idp_slo_target_url unless settings.idp_slo_target_url.nil?
117+
root.attributes['Destination'] = settings.idp_slo_target_url unless settings.idp_slo_target_url.nil? or settings.idp_slo_target_url.empty?
116118

117119
if settings.sp_entity_id != nil
118120
issuer = root.add_element "saml:Issuer"

test/request_test.rb

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
require File.expand_path(File.join(File.dirname(__FILE__), "test_helper"))
22

33
require 'onelogin/ruby-saml/authrequest'
4+
require 'onelogin/ruby-saml/setting_error'
45

56
class RequestTest < Minitest::Test
67

@@ -166,7 +167,7 @@ class RequestTest < Minitest::Test
166167
end
167168

168169
it "raises an error with a descriptive message" do
169-
err = assert_raises RuntimeError do
170+
err = assert_raises OneLogin::RubySaml::SettingError do
170171
OneLogin::RubySaml::Authrequest.new.create(settings)
171172
end
172173
assert_match /idp_sso_target_url is not set/, err.message

0 commit comments

Comments
 (0)