Skip to content

Commit 14769e4

Browse files
author
Merlyn Albery-Speyer
committed
Added settings.compress_request to permit uncompressed authrequests (which play well with diagnostic tools like Firefox SAMLTracer)
1 parent 7e48d8f commit 14769e4

File tree

3 files changed

+21
-3
lines changed

3 files changed

+21
-3
lines changed

lib/onelogin/ruby-saml/authrequest.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,8 @@ def create(settings, params = {})
1919

2020
Logging.debug "Created AuthnRequest: #{request}"
2121

22-
deflated_request = Zlib::Deflate.deflate(request, 9)[2..-5]
23-
base64_request = Base64.encode64(deflated_request)
22+
request = Zlib::Deflate.deflate(request, 9)[2..-5] if settings.compress_request
23+
base64_request = Base64.encode64(request)
2424
encoded_request = CGI.escape(base64_request)
2525
params_prefix = (settings.idp_sso_target_url =~ /\?/) ? '&' : '?'
2626
request_params = "#{params_prefix}SAMLRequest=#{encoded_request}"

lib/onelogin/ruby-saml/settings.rb

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
module Onelogin
22
module Saml
33
class Settings
4-
def initialize(config = {})
4+
def initialize(overrides = {})
5+
config = DEFAULTS.merge(overrides)
56
config.each do |k,v|
67
acc = "#{k.to_s}=".to_sym
78
self.send(acc, v) if self.respond_to? acc
@@ -14,6 +15,11 @@ def initialize(config = {})
1415
attr_accessor :name_identifier_value
1516
attr_accessor :sessionindex
1617
attr_accessor :assertion_consumer_logout_service_url
18+
attr_accessor :compress_request
19+
20+
private
21+
22+
DEFAULTS = {:compress_request => true}
1723
end
1824
end
1925
end

test/request_test.rb

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,18 @@ class RequestTest < Test::Unit::TestCase
1919
assert_match /^<samlp:AuthnRequest/, inflated
2020
end
2121

22+
should "create the SAMLRequest URL parameter without deflating" do
23+
settings = Onelogin::Saml::Settings.new
24+
settings.compress_request = false
25+
settings.idp_sso_target_url = "http://example.com"
26+
auth_url = Onelogin::Saml::Authrequest.new.create(settings)
27+
assert auth_url =~ /^http:\/\/example\.com\?SAMLRequest=/
28+
payload = CGI.unescape(auth_url.split("=").last)
29+
decoded = Base64.decode64(payload)
30+
31+
assert_match /^<samlp:AuthnRequest/, decoded
32+
end
33+
2234
should "accept extra parameters" do
2335
settings = Onelogin::Saml::Settings.new
2436
settings.idp_sso_target_url = "http://example.com"

0 commit comments

Comments
 (0)