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