class Epics::Response

Attributes

client[RW]
doc[RW]

Public Class Methods

new(client, xml) click to toggle source
# File lib/epics/response.rb, line 5
def initialize(client, xml)
  self.doc = Nokogiri::XML.parse(xml)
  self.client = client
end

Public Instance Methods

business_code() click to toggle source
# File lib/epics/response.rb, line 22
def business_code
  doc.xpath("//xmlns:body/xmlns:ReturnCode", xmlns: "urn:org:ebics:H004").text
end
business_error?() click to toggle source
# File lib/epics/response.rb, line 18
def business_error?
  !["", "000000"].include?(business_code)
end
cipher() click to toggle source
# File lib/epics/response.rb, line 86
def cipher
  cipher = OpenSSL::Cipher.new("aes-128-cbc")

  cipher.decrypt
  cipher.padding = 0
  cipher.key = transaction_key
  cipher
end
digest_valid?() click to toggle source
# File lib/epics/response.rb, line 56
def digest_valid?
  authenticated = doc.xpath("//*[@authenticate='true']").map(&:canonicalize).join
  digest_value = doc.xpath("//ds:DigestValue", ds: "http://www.w3.org/2000/09/xmldsig#").first

  digest = Base64.encode64(digester.digest(authenticated)).strip

  digest == digest_value.content
end
digester() click to toggle source
# File lib/epics/response.rb, line 101
def digester
  @digester ||= OpenSSL::Digest::SHA256.new
end
last_segment?() click to toggle source
# File lib/epics/response.rb, line 30
def last_segment?
  !!doc.at_xpath("//xmlns:header/xmlns:mutable/*[@lastSegment='true']", xmlns: "urn:org:ebics:H004")
end
ok?() click to toggle source
# File lib/epics/response.rb, line 26
def ok?
  !technical_error? & !business_error?
end
order_data() click to toggle source
# File lib/epics/response.rb, line 78
def order_data
  order_data_encrypted = Base64.decode64(doc.xpath("//xmlns:OrderData", xmlns: 'urn:org:ebics:H004').first.content)

  data = (cipher.update(order_data_encrypted) + cipher.final)

  Zlib::Inflate.new.inflate(data)
end
order_id() click to toggle source
# File lib/epics/response.rb, line 52
def order_id
  doc.xpath("//xmlns:header/xmlns:mutable/xmlns:OrderID", xmlns: "urn:org:ebics:H004").text
end
public_digest_valid?() click to toggle source
# File lib/epics/response.rb, line 72
def public_digest_valid?
  encryption_pub_key_digest = doc.xpath("//xmlns:EncryptionPubKeyDigest", xmlns: 'urn:org:ebics:H004').first

  client.e.public_digest == encryption_pub_key_digest.content
end
report_text() click to toggle source
# File lib/epics/response.rb, line 44
def report_text
  doc.xpath("//xmlns:ReportText", xmlns: "urn:org:ebics:H004").first.content
end
return_code() click to toggle source
# File lib/epics/response.rb, line 38
def return_code
  doc.xpath("//xmlns:ReturnCode", xmlns: "urn:org:ebics:H004").last.content
rescue NoMethodError
  nil
end
segmented?() click to toggle source
# File lib/epics/response.rb, line 34
def segmented?
  !!doc.at_xpath("//xmlns:header/xmlns:mutable/xmlns:SegmentNumber", xmlns: "urn:org:ebics:H004")
end
signature_valid?() click to toggle source
# File lib/epics/response.rb, line 65
def signature_valid?
  signature = doc.xpath("//ds:SignedInfo", ds: "http://www.w3.org/2000/09/xmldsig#").first.canonicalize
  signature_value = doc.xpath("//ds:SignatureValue", ds: "http://www.w3.org/2000/09/xmldsig#").first

  client.bank_x.key.verify(digester, Base64.decode64(signature_value.content), signature)
end
technical_code() click to toggle source
# File lib/epics/response.rb, line 14
def technical_code
  doc.xpath("//xmlns:header/xmlns:mutable/xmlns:ReturnCode", xmlns: "urn:org:ebics:H004").text
end
technical_error?() click to toggle source
# File lib/epics/response.rb, line 10
def technical_error?
  !["011000", "000000"].include?(technical_code)
end
transaction_id() click to toggle source
# File lib/epics/response.rb, line 48
def transaction_id
  doc.xpath("//xmlns:header/xmlns:static/xmlns:TransactionID", xmlns: 'urn:org:ebics:H004').text
end
transaction_key() click to toggle source
# File lib/epics/response.rb, line 95
def transaction_key
  transaction_key_encrypted = Base64.decode64(doc.xpath("//xmlns:TransactionKey", xmlns: 'urn:org:ebics:H004').first.content)

  @transaction_key ||= client.e.key.private_decrypt(transaction_key_encrypted)
end