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)