lib/saml/kit/bindings/url_builder.rb in saml-kit-0.2.7 vs lib/saml/kit/bindings/url_builder.rb in saml-kit-0.2.8

- old
+ new

@@ -8,14 +8,18 @@ def initialize(configuration: Saml::Kit.configuration) @configuration = configuration end def build(saml_document, relay_state: nil) - payload = canonicalize(saml_document, relay_state) if configuration.sign? + payload = canonicalize(saml_document, relay_state) "#{saml_document.destination}?#{payload}&Signature=#{signature_for(payload)}" else + payload = to_query_string( + saml_document.query_string_parameter => serialize(saml_document.to_xml), + 'RelayState' => relay_state, + ) "#{saml_document.destination}?#{payload}" end end private @@ -24,14 +28,18 @@ private_key = configuration.private_keys(use: :signing).last encode(private_key.sign(OpenSSL::Digest::SHA256.new, payload)) end def canonicalize(saml_document, relay_state) - { + to_query_string( saml_document.query_string_parameter => serialize(saml_document.to_xml), 'RelayState' => relay_state, 'SigAlg' => Saml::Kit::Namespaces::SHA256, - }.map do |(key, value)| + ) + end + + def to_query_string(query_params) + query_params.map do |(key, value)| value.present? ? "#{key}=#{escape(value)}" : nil end.compact.join('&') end def serialize(value)