Commit 5c0a65a
Changed files (8)
lib
spec
saml
lib/saml/kit/authentication_request.rb
@@ -75,7 +75,7 @@ module Saml
end
def serialize
- Saml::Kit::Content.encode_raw_saml(to_xml)
+ Saml::Kit::Content.serialize(to_xml)
end
def response_for(user)
lib/saml/kit/content.rb
@@ -1,15 +1,11 @@
module Saml
module Kit
class Content
- BASE64_FORMAT = %r(\A([A-Za-z0-9+/]{4})*([A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?\Z)
-
- def self.encode_raw_saml(xml)
+ def self.serialize(xml)
encode(deflate(xml))
end
- def self.decode_raw_saml(xml)
- return xml unless base64_encoded?(xml)
-
+ def self.deserialize(xml)
decoded = decode(xml)
begin
inflate(decoded)
@@ -27,10 +23,6 @@ module Saml
Base64.strict_encode64(value)
end
- def self.base64_encoded?(value)
- !!value.gsub(/[\r\n]|\\r|\\n|\s/, "").match(BASE64_FORMAT)
- end
-
def self.inflate(value)
inflater = Zlib::Inflate.new(-Zlib::MAX_WBITS)
inflater.inflate(value)
lib/saml/kit/logout_request.rb
@@ -90,7 +90,7 @@ module Saml
end
def serialize
- Saml::Kit::Content.encode_raw_saml(to_xml)
+ Saml::Kit::Content.serialize(to_xml)
end
def response_for(user)
lib/saml/kit/logout_response.rb
@@ -46,7 +46,7 @@ module Saml
end
def serialize
- Saml::Kit::Content.encode_raw_saml(to_xml)
+ Saml::Kit::Content.serialize(to_xml)
end
def to_xml
lib/saml/kit/request.rb
@@ -2,7 +2,7 @@ module Saml
module Kit
class Request
def self.deserialize(raw_request)
- xml = Saml::Kit::Content.decode_raw_saml(raw_request)
+ xml = Saml::Kit::Content.deserialize(raw_request)
hash = Hash.from_xml(xml)
if hash['AuthnRequest'].present?
AuthenticationRequest.new(xml)
@@ -11,6 +11,7 @@ module Saml
end
rescue => error
Saml::Kit.logger.error(error)
+ Saml::Kit.logger.error(error.backtrace.join("\n"))
InvalidRequest.new(raw_request)
end
end
lib/saml/kit/response.rb
@@ -77,7 +77,7 @@ module Saml
end
def serialize
- Saml::Kit::Content.encode_raw_saml(to_xml)
+ Saml::Kit::Content.serialize(to_xml)
end
def certificate
@@ -122,7 +122,7 @@ module Saml
class << self
def deserialize(saml_response)
- new(Saml::Kit::Content.decode_raw_saml(saml_response))
+ new(Saml::Kit::Content.deserialize(saml_response))
end
end
lib/saml/kit/url_builder.rb
@@ -20,7 +20,7 @@ module Saml
def build_payload(saml_document, relay_state)
payload = {
- saml_document.query_string_parameter => Content.encode_raw_saml(saml_document.to_xml),
+ saml_document.query_string_parameter => Content.serialize(saml_document.to_xml),
'RelayState' => relay_state,
'SigAlg' => Saml::Kit::Namespaces::SHA256,
}.map do |(key, value)|
spec/saml/request_spec.rb
@@ -38,5 +38,15 @@ RSpec.describe Saml::Kit::Request do
expect(result).to be_instance_of(Saml::Kit::LogoutRequest)
expect(result.name_id).to eql(user.name_id_for)
end
+
+ [
+ 'fZFPa4QwEMW/iuTumqymroMKC1IQ2lLa0kMvJXUjCjGxmbF/vn2je9le9jpvfm/mzZSoJjPDcaHBPunPRSNFP5OxCJtQscVbcApHBKsmjUAdPB/v72C/4zB7R65zhl0g1wmFqD2NzrKobSr2ngmlpS7yuJc8jbPikMfFjRDxh5SqF7w/5DJl0av2GJiKBYsAIi66tUjKUihxkceBEPJlnwLPgBdvLGpCjtEq2qiBaIYkMa5TZnBIIDnnCWpcTROrv1ldrqvD5uxrNfrZedqd9FeZXArl+VgPIVbbPDozdr/RrfOTouup18p4ivutFeY1DZK2xJL6POD/A+o/&RelayState=%7B"redirect_to":"/"%7D&SigAlg=http://www.w3.org/2001/04/xmlenc%23sha256&Signature=dcM/kfdrERjZ+Q+WpzBTvk3RLVeEM5qGEM5ONJ/r4fxvEtMQyk6nT7PNZGsox0XYv+myi2yPBsqYUNC2kVii/uc34dn9l7Voyu6dGsNQPNTOpEwRHHILdjJUqhxEDBpd49vVbgdlF++pQZ7l74bUw8FdIbJ7W4EcOBQ1ffNtWTQNLv9n/D/jYKeGtJtaf61x8zDOlCyBwNi861bKXNFScyOwEFNcpVsgBIYhqZqKUWQVAcgYiGH5r16mtWFcT8NdnIvtICrN5VBpepK/ARnawhM6KhacQYllMpnXgbtsJcyQrRf1s9hqrkos1mRwgKLawZ5NjmF66dw3mKKs22b9NQ==',
+ 'fZFNb4MwDIb/CsqdJtBSWguQKqFJSNs0bdMOvUxZCCISJCw2+/j3C/TSXXrxwfbz2q9doByHCU4z9fZZf84aKfoZB4uwFko2ewtOokGwctQIpODl9HAP6UbA5B055QZ2hdwmJKL2ZJxlUVOX7H1/VEe12+s4y8RHvNuGcNRdHh8OoutUkudt17LoTXsMTMmCRAARZ91YJGkppESSx0kSJ9lruoUkBZGdWVQHH8ZKWqmeaALOB6fk0DskyIQQHDUuotzqb1YVy+qwKvtKGj85T5tWfxX8ulBcjvUYbDX1kxuM+o3unB8l3Xa9ZEwbd2srTIsbJG2J8eoy4P8Dqj8=&RelayState=%7B"redirect_to":"/"%7D&SigAlg=http://www.w3.org/2001/04/xmlenc%23sha256&Signature=sI50KhkFGLxFBnuWCZ4gJ+FrG5mY4f5f4afjdRc0lFHdgzMlJt9xzqh39ufHAkhpi2+OdWjg87pwpPgfz3das4QJMMenb/o5vNnFGqt2OMiyjoQbVc7b5xSA78FU+OlwqK3XgGdqo3KrRL+AJuagm4D3VeSbZhZ/0zPm1RG0/spCuxx+BbFwTW0BI+VU9+1zkmdV1CJt8kYtmNdvYavgD7rcUX2MWgaRVR+t/nNND5Wmdoxxfp/pzhkjrjt20+TpkDI9sKWlUSOZnATDFO/KlnKSvn/LrQ8wofqHViRksMhDIvVD9mNu7tJaQ6NB1yPUrmsOblPtAmRuBDBgChdHRA==',
+ 'fZFPa4QwEMW/iuSejdFVy6DCghSEtpS29NDLko1ZFDSxmbF/vn2je9le9jpvfm/mzZSopnGGw0K9fTGfi0GKfqbRImxCxRZvwSkcEKyaDAJpeD08PkCyi2H2jpx2I7tCbhMK0XganGVR21TsGJ/yNM2V5jI/dXwvz4rfpUXCU53LRGdpoZOMRe/GY2AqFiwCiLiY1iIpS6EUy4JLyWX2lqQg9yDlB4uakGOwijaqJ5pBiNFpNfYOCbI4jgUaXE2FNd+sLtfVYXP2tRr87DztOvNVimuhvBzrKcRqm2c3Dvo3und+UnQ79VoZOn7eWmFe0yAZS0zUlwH/H1D/AQ==&RelayState=%7B"redirect_to":"/"%7D&SigAlg=http://www.w3.org/2001/04/xmlenc%23sha256&Signature=vNIzNWsCqdi2rs5HMRWSm+udc42K9sCm/epeV212sP4vYwot9K9xvoz8Z7jvY8zsY2BPdjZsEJPpHjPKb4+xB+riyc5fUP5wUEUSsQF5Q5FtoQx0jJbcNDadHoTdH1IEiQazTt7ED6sYmnY93lxqFtRkoUtov6XGXRT6ypNRGRFqn5T4JYZEROhdLRAOSCyoOjZ8kPcWKGP1Fo0+A25bwl1Yo3tqBTZsc522AaLhK/6f7uLftSUaTMA0lnmQqRXzZrfjVtDAHa5JSHLH2eh7vZavyvmqApshL1qHEihRN9VFx7DPjRspvp8pIn/8CH18ynVzzKPxIUOl3Kt4QNsVJA==',
+ ].each do |saml|
+ it do
+ expect(subject.deserialize(saml)).to be_instance_of(Saml::Kit::AuthenticationRequest)
+ end
+ end
end
end