class Fiscalizer::RequestSender

Attributes

app_cert[R]
ca_cert_path[R]
demo[R]
password[R]
timeout[R]

Public Class Methods

new(app_cert, password, timeout, demo, ca_cert_path) click to toggle source
# File lib/fiscalizer/services/request_sender.rb, line 5
def initialize(app_cert, password, timeout, demo, ca_cert_path)
  @app_cert = app_cert
  @password = password
  @timeout = timeout
  @demo = demo
  @ca_cert_path = ca_cert_path

  prepare_net_http
end

Public Instance Methods

send(message) click to toggle source
# File lib/fiscalizer/services/request_sender.rb, line 17
def send(message)
  request.content_type = 'application/xml'
  request.body = message
  http.request(request)
end

Private Instance Methods

add_trusted_certificates() click to toggle source
# File lib/fiscalizer/services/request_sender.rb, line 50
def add_trusted_certificates
  # u produkcijskom okruzenju, trusted CA certifikat se nalazi u
  # istom fileu kao i public i private key
  # taj file ima ekstenziju .p12 (npr. FISKAL_1.p12)
  production_certificates.each do |certificate|
    begin
      http.cert_store.add_cert(certificate)
    rescue OpenSSL::X509::StoreError => err
      # ignore duplicate certs
      # Novi finini certifikati sadze CA koji vec postoje medu default_paths(line 45)
      raise unless err.message == 'cert already in hash table'
    end
  end

  # u testnom okruzenju, treba dodati 2 trusted CA certifikata
  # ta 2 certifikata se nalaze u jednom .pem fileu (npr. fina_ca.pem)
  http.cert_store.add_file(ca_cert_path) unless ca_cert_path.nil? || ca_cert_path == ''
end
fiscalization_url() click to toggle source
# File lib/fiscalizer/services/request_sender.rb, line 33
def fiscalization_url
  demo ? DEMO_URL : PROD_URL
end
http() click to toggle source
# File lib/fiscalizer/services/request_sender.rb, line 25
def http
  @http ||= Net::HTTP.new(uri.host, uri.port)
end
prepare_net_http() click to toggle source
# File lib/fiscalizer/services/request_sender.rb, line 41
def prepare_net_http
  http.read_timeout = timeout
  http.use_ssl = true
  http.cert_store = OpenSSL::X509::Store.new
  http.cert_store.set_default_paths
  http.verify_mode = OpenSSL::SSL::VERIFY_PEER
  add_trusted_certificates
end
production_certificates() click to toggle source
# File lib/fiscalizer/services/request_sender.rb, line 69
def production_certificates
  return [] if app_cert.ca_certs.nil?
  app_cert.ca_certs
end
request() click to toggle source
# File lib/fiscalizer/services/request_sender.rb, line 37
def request
  @request ||= Net::HTTP::Post.new(uri.request_uri)
end
uri() click to toggle source
# File lib/fiscalizer/services/request_sender.rb, line 29
def uri
  @uri ||= URI.parse(fiscalization_url)
end