class LitmusPaper::Dependency::HTTP

Public Class Methods

new(uri, options = {}) click to toggle source
# File lib/litmus_paper/dependency/http.rb, line 4
def initialize(uri, options = {})
  @uri = uri
  @expected_content = Regexp.new(options.fetch(:content, '.*'))
  @method = options.fetch(:method, 'GET')
  @ca_file = options[:ca_file]
  @timeout = options.fetch(:timeout_seconds, 2)
end

Public Instance Methods

_body_matches?(response) click to toggle source
# File lib/litmus_paper/dependency/http.rb, line 55
def _body_matches?(response)
  (response.body =~ @expected_content) ? true : false
end
_make_request() click to toggle source
# File lib/litmus_paper/dependency/http.rb, line 29
def _make_request
  uri = URI.parse(@uri)
  request = Net::HTTP.const_get(@method.capitalize).new(uri.normalize.path)
  request["User-Agent"] = "Litmus Paper/#{LitmusPaper::VERSION}"
  request.set_form_data({})
  request.basic_auth(uri.user, uri.password) if uri.user || uri.password

  connection = Net::HTTP.new(uri.host, uri.port)
  connection.open_timeout = @timeout
  connection.read_timeout = @timeout
  if uri.scheme == "https"
    connection.use_ssl = true
    connection.verify_mode = OpenSSL::SSL::VERIFY_PEER
    connection.ca_file = @ca_file unless @ca_file.nil?
    connection.verify_callback = proc { |preverify_ok, ssl_context| _verify_ssl_certificate(preverify_ok, ssl_context) }
  end

  connection.start do |http|
    http.request(request)
  end
end
_successful_response?(response) click to toggle source
# File lib/litmus_paper/dependency/http.rb, line 51
def _successful_response?(response)
  response.is_a? Net::HTTPSuccess
end
_verify_ssl_certificate(preverify_ok, ssl_context) click to toggle source
# File lib/litmus_paper/dependency/http.rb, line 59
def _verify_ssl_certificate(preverify_ok, ssl_context)
  if preverify_ok != true || ssl_context.error != 0
    err_msg = "SSL Verification failed -- Preverify: #{preverify_ok}, Error: #{ssl_context.error_string} (#{ssl_context.error})"
    LitmusPaper.logger.info err_msg
    return false
  end
  true
end
available?() click to toggle source
# File lib/litmus_paper/dependency/http.rb, line 12
def available?
  response = _make_request
  success = _successful_response?(response)
  matches = _body_matches?(response)

  LitmusPaper.logger.info("Available check to #{@uri} failed with status #{response.code}") unless success
  LitmusPaper.logger.info("Available check to #{@uri} did not match #{@expected_content}") unless matches

  success && matches
rescue Timeout::Error
  LitmusPaper.logger.info("Timeout fetching #{@uri}")
  false
rescue => e
  LitmusPaper.logger.info("Available check to #{@uri} failed with #{e.message}")
  false
end
to_s() click to toggle source
# File lib/litmus_paper/dependency/http.rb, line 68
def to_s
  "Dependency::HTTP(#{@uri})"
end