class Proxy::Omaha::OmahaProtocol::Handler

Attributes

foreman_client[R]
metadata_provider[R]
repository[R]
request[R]

Public Class Methods

new(options = {}) click to toggle source
# File lib/smart_proxy_omaha/omaha_protocol/handler.rb, line 6
def initialize(options = {})
  @request = options.fetch(:request)
  @foreman_client = options.fetch(:foreman_client)
  @repository = options.fetch(:repository)
  @metadata_provider = options.fetch(:metadata_provider)
end

Public Instance Methods

handle() click to toggle source
# File lib/smart_proxy_omaha/omaha_protocol/handler.rb, line 13
def handle
  logger.info "OmahaHandler: Received #{request.event_description} event with result: #{request.event_result}"

  unless request.from_coreos?
    logger.error "Appid does not match CoreOS. Aborting Omaha request."
    return Proxy::Omaha::OmahaProtocol::Eventacknowledgeresponse.new(
      :appid => request.appid,
      :base_url => request.base_url,
      :status => 'error-unknownApplication'
    )
  end

  unless ['stable', 'beta', 'alpha'].include?(request.track)
    logger.error "Unknown track requested. Aborting Omaha request."
    return Proxy::Omaha::OmahaProtocol::Eventacknowledgeresponse.new(
      :appid => request.appid,
      :base_url => request.base_url,
      :status => 'error-unknownApplication'
    )
  end

  upload_facts
  process_report

  if request.updatecheck
    handle_update
  else
    handle_event
  end
end

Private Instance Methods

handle_event() click to toggle source
# File lib/smart_proxy_omaha/omaha_protocol/handler.rb, line 50
def handle_event
  Proxy::Omaha::OmahaProtocol::Eventacknowledgeresponse.new(
    :appid => request.appid,
    :base_url => request.base_url
  )
end
handle_update() click to toggle source
# File lib/smart_proxy_omaha/omaha_protocol/handler.rb, line 67
def handle_update
  latest_os = repository.latest_os(request.track)
  if !latest_os.nil? && latest_os > Gem::Version.new(request.version)
    Proxy::Omaha::OmahaProtocol::Updateresponse.new(
      :appid => request.appid,
      :metadata => metadata_provider.get(request.track, latest_os),
      :board => request.board,
      :base_url => request.base_url
    )
  else
    Proxy::Omaha::OmahaProtocol::Noupdateresponse.new(
      :appid => request.appid,
      :base_url => request.base_url
    )
  end
end
process_report() click to toggle source
# File lib/smart_proxy_omaha/omaha_protocol/handler.rb, line 57
def process_report
  report = {
    'host' => request.hostname,
    'status' => request.to_status.to_s,
    'omaha_version' => request.version,
    'reported_at' => Time.now.getutc.to_s
  }
  foreman_client.post_report({'omaha_report' => report}.to_json)
end
upload_facts() click to toggle source
# File lib/smart_proxy_omaha/omaha_protocol/handler.rb, line 46
def upload_facts
  foreman_client.post_facts(request.facts_data.to_json)
end