class Transbank::Oneclick::Document

Constants

NS1
SOAP_ENV
WSSE
WSU

Attributes

action[RW]
cert[RW]
doc[RW]
params[RW]
private_key[RW]
template[RW]

Public Class Methods

new(action, params = {}) click to toggle source
# File lib/transbank/oneclick/document.rb, line 12
def initialize(action, params = {})
  self.cert = OpenSSL::X509::Certificate.new File.read(Transbank::Oneclick.configuration.cert_path)
  self.private_key = OpenSSL::PKey::RSA.new File.read(Transbank::Oneclick.configuration.key_path)
  self.action = action
  self.params = params
  self.doc = template.clone.doc
  sign!
end

Public Instance Methods

body_canonicalize() click to toggle source
# File lib/transbank/oneclick/document.rb, line 41
def body_canonicalize
  body_node.canonicalize(Nokogiri::XML::XML_C14N_EXCLUSIVE_1_0, nil, nil)
end
body_id() click to toggle source
# File lib/transbank/oneclick/document.rb, line 21
def body_id
  OpenSSL::Digest::MD5.hexdigest(action.to_s + params.to_s + DateTime::now.to_s)
end
body_node() click to toggle source
# File lib/transbank/oneclick/document.rb, line 25
def body_node
  doc.at_xpath('//SOAP-ENV:Body')
end
canonicalize() click to toggle source
# File lib/transbank/oneclick/document.rb, line 49
def canonicalize
  doc.canonicalize(Nokogiri::XML::XML_C14N_EXCLUSIVE_1_0, nil, nil)
end
digest_value() click to toggle source
# File lib/transbank/oneclick/document.rb, line 53
def digest_value
  Base64.encode64(OpenSSL::Digest::SHA1.digest(body_canonicalize)).gsub("\n", '')
end
digest_value_node() click to toggle source
# File lib/transbank/oneclick/document.rb, line 33
def digest_value_node
  doc.at_xpath '//ds:DigestValue', {'ds' => 'http://www.w3.org/2000/09/xmldsig#'}
end
sign!() click to toggle source
# File lib/transbank/oneclick/document.rb, line 61
def sign!
  digest_value_node.content = digest_value
  signature_value_node.content = signature_value
end
signature_value() click to toggle source
# File lib/transbank/oneclick/document.rb, line 57
def signature_value
  Base64.encode64(private_key.sign(OpenSSL::Digest::SHA1.new, signed_node_canonicalize)).gsub("\n", '')
end
signature_value_node() click to toggle source
# File lib/transbank/oneclick/document.rb, line 37
def signature_value_node
  doc.at_xpath '//ds:SignatureValue', {'ds' => 'http://www.w3.org/2000/09/xmldsig#'}
end
signed_node() click to toggle source
# File lib/transbank/oneclick/document.rb, line 29
def signed_node
  doc.at_xpath '//ds:SignedInfo', {'ds' => 'http://www.w3.org/2000/09/xmldsig#'}
end
signed_node_canonicalize() click to toggle source
# File lib/transbank/oneclick/document.rb, line 45
def signed_node_canonicalize
  signed_node.canonicalize(Nokogiri::XML::XML_C14N_EXCLUSIVE_1_0, nil, nil)
end