Class: Saml::Util

Inherits:
Object
  • Object
show all
Defined in:
lib/saml/util.rb

Class Method Summary collapse

Class Method Details

.parse_params(url) ⇒ Object



4
5
6
7
8
9
10
11
12
13
14
15
# File 'lib/saml/util.rb', line 4

def parse_params(url)
  query = URI.parse(url).query
  return {} unless query

  params = {}
  query.split(/[&;]/).each do |pairs|
    key, value = pairs.split('=',2)
    params[key] = value
  end

  params
end

.post(location, message) ⇒ Object



17
18
19
20
21
22
23
24
25
26
27
# File 'lib/saml/util.rb', line 17

def post(location, message)
  request = HTTPI::Request.new

  request.url                     = location
  request.headers['Content-Type'] = 'text/xml'
  request.body                    = message
  request.auth.ssl.cert_file      = Saml::Config.ssl_certificate_file
  request.auth.ssl.cert_key_file  = Saml::Config.ssl_private_key_file

  HTTPI.post request
end

.sign_xml(message, format = :xml) ⇒ Object



29
30
31
32
33
34
35
36
# File 'lib/saml/util.rb', line 29

def sign_xml(message, format = :xml)
  message.add_signature

  document = Xmldsig::SignedDocument.new(message.send("to_#{format}"))
  document.sign do |data, signature_algorithm|
    message.provider.sign(signature_algorithm, data)
  end
end

.verify_xml(message, raw_body) ⇒ Object



38
39
40
41
42
43
44
45
46
47
48
# File 'lib/saml/util.rb', line 38

def verify_xml(message, raw_body)
  document = Xmldsig::SignedDocument.new(raw_body)

  signature_valid = document.validate do |signature, data, signature_algorithm|
    message.provider.verify(signature_algorithm, signature, data)
  end

  raise Saml::Errors::SignatureInvalid.new unless signature_valid

  message.class.parse(document.signed_nodes.first.to_xml, single: true)
end