Class: Transbank::Oneclick::Document

Inherits:
Object
  • Object
show all
Defined in:
lib/transbank/oneclick/document.rb

Constant Summary collapse

SOAP_ENV =
'http://schemas.xmlsoap.org/soap/envelope/'
NS1 =
'http://webservices.webpayserver.transbank.com/'
WSSE =
'http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd'
WSU =
'http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd'

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(action, params = {}) ⇒ Document

Returns a new instance of Document.



12
13
14
15
16
17
18
19
# 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

Instance Attribute Details

#actionObject

Returns the value of attribute action.



6
7
8
# File 'lib/transbank/oneclick/document.rb', line 6

def action
  @action
end

#certObject

Returns the value of attribute cert.



6
7
8
# File 'lib/transbank/oneclick/document.rb', line 6

def cert
  @cert
end

#docObject

Returns the value of attribute doc.



6
7
8
# File 'lib/transbank/oneclick/document.rb', line 6

def doc
  @doc
end

#paramsObject

Returns the value of attribute params.



6
7
8
# File 'lib/transbank/oneclick/document.rb', line 6

def params
  @params
end

#private_keyObject

Returns the value of attribute private_key.



6
7
8
# File 'lib/transbank/oneclick/document.rb', line 6

def private_key
  @private_key
end

#templateObject

Returns the value of attribute template.



6
7
8
# File 'lib/transbank/oneclick/document.rb', line 6

def template
  @template
end

Instance Method Details

#body_canonicalizeObject



41
42
43
# 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_idObject



21
22
23
# 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_nodeObject



25
26
27
# File 'lib/transbank/oneclick/document.rb', line 25

def body_node
  doc.at_xpath('//SOAP-ENV:Body')
end

#canonicalizeObject



49
50
51
# File 'lib/transbank/oneclick/document.rb', line 49

def canonicalize
  doc.canonicalize(Nokogiri::XML::XML_C14N_EXCLUSIVE_1_0, nil, nil)
end

#digest_valueObject



53
54
55
# File 'lib/transbank/oneclick/document.rb', line 53

def digest_value
  Base64.encode64(OpenSSL::Digest::SHA1.digest(body_canonicalize)).gsub("\n", '')
end

#digest_value_nodeObject



33
34
35
# 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!Object



61
62
63
64
# File 'lib/transbank/oneclick/document.rb', line 61

def sign!
  digest_value_node.content = digest_value
  signature_value_node.content = signature_value
end

#signature_valueObject



57
58
59
# 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_nodeObject



37
38
39
# 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_nodeObject



29
30
31
# 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_canonicalizeObject



45
46
47
# 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