Skip to content

Commit 926b149

Browse files
authored
Merge pull request SAML-Toolkits#468 from davidlibrera/master
same code as authnrequest for logoutrequest
2 parents da2fb2b + 571e280 commit 926b149

File tree

2 files changed

+35
-8
lines changed

2 files changed

+35
-8
lines changed

lib/onelogin/ruby-saml/logoutrequest.rb

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,11 @@ def create_params(settings, params={})
8989
# @return [String] The SAMLRequest String.
9090
#
9191
def create_logout_request_xml_doc(settings)
92+
document = create_xml_document(settings)
93+
sign_document(document, settings)
94+
end
95+
96+
def create_xml_document(settings)
9297
time = Time.now.utc.strftime("%Y-%m-%dT%H:%M:%SZ")
9398

9499
request_doc = XMLSecurity::Document.new
@@ -122,14 +127,18 @@ def create_logout_request_xml_doc(settings)
122127
sessionindex.text = settings.sessionindex
123128
end
124129

130+
request_doc
131+
end
132+
133+
def sign_document(document, settings)
125134
# embed signature
126135
if settings.security[:logout_requests_signed] && settings.private_key && settings.certificate && settings.security[:embed_sign]
127136
private_key = settings.get_sp_key
128137
cert = settings.get_sp_cert
129-
request_doc.sign_document(private_key, cert, settings.security[:signature_method], settings.security[:digest_method])
138+
document.sign_document(private_key, cert, settings.security[:signature_method], settings.security[:digest_method])
130139
end
131140

132-
request_doc
141+
document
133142
end
134143
end
135144
end

test/logoutrequest_test.rb

Lines changed: 24 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,24 @@ class RequestTest < Minitest::Test
104104
settings.private_key = ruby_saml_key_text
105105
end
106106

107+
it "doens't sign through create_xml_document" do
108+
unauth_req = OneLogin::RubySaml::Logoutrequest.new
109+
inflated = unauth_req.create_xml_document(settings).to_s
110+
111+
refute_match %r[<ds:SignatureValue>([a-zA-Z0-9/+=]+)</ds:SignatureValue>], inflated
112+
refute_match %r[<ds:SignatureMethod Algorithm='http://www.w3.org/2000/09/xmldsig#rsa-sha1'/>], inflated
113+
refute_match %r[<ds:DigestMethod Algorithm='http://www.w3.org/2000/09/xmldsig#sha1'/>], inflated
114+
end
115+
116+
it "signs through create_logout_request_xml_doc" do
117+
unauth_req = OneLogin::RubySaml::Logoutrequest.new
118+
inflated = unauth_req.create_logout_request_xml_doc(settings).to_s
119+
120+
assert_match %r[<ds:SignatureValue>([a-zA-Z0-9/+=]+)</ds:SignatureValue>], inflated
121+
assert_match %r[<ds:SignatureMethod Algorithm='http://www.w3.org/2000/09/xmldsig#rsa-sha1'/>], inflated
122+
assert_match %r[<ds:DigestMethod Algorithm='http://www.w3.org/2000/09/xmldsig#sha1'/>], inflated
123+
end
124+
107125
it "created a signed logout request" do
108126
settings.compress_request = true
109127

@@ -185,8 +203,8 @@ class RequestTest < Minitest::Test
185203
query_string << "&SigAlg=#{CGI.escape(params['SigAlg'])}"
186204

187205
signature_algorithm = XMLSecurity::BaseDocument.new.algorithm(params['SigAlg'])
188-
assert_equal signature_algorithm, OpenSSL::Digest::SHA256
189-
assert cert.public_key.verify(signature_algorithm.new, Base64.decode64(params['Signature']), query_string)
206+
assert_equal signature_algorithm, OpenSSL::Digest::SHA256
207+
assert cert.public_key.verify(signature_algorithm.new, Base64.decode64(params['Signature']), query_string)
190208
end
191209

192210
it "create a signature parameter with RSA_SHA384 / SHA384 and validate it" do
@@ -201,8 +219,8 @@ class RequestTest < Minitest::Test
201219
query_string << "&SigAlg=#{CGI.escape(params['SigAlg'])}"
202220

203221
signature_algorithm = XMLSecurity::BaseDocument.new.algorithm(params['SigAlg'])
204-
assert_equal signature_algorithm, OpenSSL::Digest::SHA384
205-
assert cert.public_key.verify(signature_algorithm.new, Base64.decode64(params['Signature']), query_string)
222+
assert_equal signature_algorithm, OpenSSL::Digest::SHA384
223+
assert cert.public_key.verify(signature_algorithm.new, Base64.decode64(params['Signature']), query_string)
206224
end
207225

208226
it "create a signature parameter with RSA_SHA512 / SHA512 and validate it" do
@@ -217,8 +235,8 @@ class RequestTest < Minitest::Test
217235
query_string << "&SigAlg=#{CGI.escape(params['SigAlg'])}"
218236

219237
signature_algorithm = XMLSecurity::BaseDocument.new.algorithm(params['SigAlg'])
220-
assert_equal signature_algorithm, OpenSSL::Digest::SHA512
221-
assert cert.public_key.verify(signature_algorithm.new, Base64.decode64(params['Signature']), query_string)
238+
assert_equal signature_algorithm, OpenSSL::Digest::SHA512
239+
assert cert.public_key.verify(signature_algorithm.new, Base64.decode64(params['Signature']), query_string)
222240
end
223241

224242
end

0 commit comments

Comments
 (0)