class Matterhorn::HttpClient

Matterhorn::HttpClient ===

Public Class Methods

new(protocol, domain, org_domain, user, password, auth_mode, http_timeout = nil, ssl_dont_verify_cert = false, multi_tenant = true) click to toggle source

————————————————————————— initialization —

# File lib/matterhorn/http_client.rb, line 17
def initialize(protocol, domain, org_domain, user, password, auth_mode,
               http_timeout = nil, ssl_dont_verify_cert = false, multi_tenant = true)
  @multi_tenant = multi_tenant
  @uri = if @multi_tenant && !org_domain.nil? && !org_domain.empty?
           URI.parse("#{protocol}://#{org_domain.gsub(/\./, '-')}.#{domain}")
         else
           URI.parse("#{protocol}://#{domain}")
         end
  @uri.user     = user
  @uri.password = password 
  @auth_mode    = auth_mode
  @ssl          = @uri.port == 443 ? true : false
  @timeout      = http_timeout
  @ssl_dont_verify_cert = ssl_dont_verify_cert
end

Public Instance Methods

close() click to toggle source
# File lib/matterhorn/http_client.rb, line 65
def close
  @http_socket.finish    if !@http_socket.nil? && @http_socket.started?
end
delete(url) click to toggle source
# File lib/matterhorn/http_client.rb, line 59
def delete(url)
  request = Net::HTTP::Delete.new(@uri.request_uri + url)
  execute_request(request)
end
get(url, headers = nil) click to toggle source

—————————————————————————- http methodes —

# File lib/matterhorn/http_client.rb, line 36
def get(url, headers = nil)
  request = Net::HTTP::Get.new(@uri.request_uri + url, headers)
  execute_request(request)
end
post(url, params = {}, file = nil, filename = nil, mime_type = nil) click to toggle source
# File lib/matterhorn/http_client.rb, line 42
def post(url, params = {}, file = nil, filename = nil, mime_type = nil)
  if params.has_key?('BODY') || !file.nil?
    request = multipart_post(url, params, file, filename, mime_type)
  else
    request = singlepart_post(url, params)
  end
  execute_request(request)
end
put(url, params = {}) click to toggle source
# File lib/matterhorn/http_client.rb, line 52
def put(url, params = {})
  request = Net::HTTP::Put.new(@uri.request_uri + url)
  request.set_form_data(params)
  execute_request(request)
end

Private Instance Methods

execute_request(request) click to toggle source
# File lib/matterhorn/http_client.rb, line 126
def execute_request(request)
  case @auth_mode
  when 'basic'
    request.basic_auth(@uri.user, @uri.password)
  when 'digest'
    head = Net::HTTP::Head.new(@uri.request_uri + request.path)
    head['X-REQUESTED-AUTH'] = 'Digest'
    head['X-Opencast-Matterhorn-Authorization'] = 'true'
    digest_result = http_socket.request(head)
    digest_auth = Net::HTTP::DigestAuth.new
    auth = digest_auth.auth_header(@uri, digest_result['www-authenticate'], request.method)
    request.add_field('Authorization', auth)
  end
  response = http_socket.request(request)
  case response.code.to_i
  when 200..299
    handle_2xx_ok(request, response)
  when 400..499
    handle_4xx_error(request, response)
  when 500..599
    handle_5xx_error(request, response)
  else
    handle_general_error(request, response)
  end
  response
end
handle_2xx_ok(request, response) click to toggle source
# File lib/matterhorn/http_client.rb, line 154
def handle_2xx_ok(request, response)
  msg = log_message('handle_2xx_ok', request, response)
  MatterhornWhymper.logger.debug { msg }
end
handle_4xx_error(request, response) click to toggle source
# File lib/matterhorn/http_client.rb, line 159
def handle_4xx_error(request, response)
  msg = log_message('handle_4xx_error', request, response)
  MatterhornWhymper.logger.debug { msg }
  raise(Matterhorn::HttpClientError.new(request, response), msg)
end
handle_5xx_error(request, response) click to toggle source
# File lib/matterhorn/http_client.rb, line 165
def handle_5xx_error(request, response)
  msg = log_message('handle_5xx_error', request, response)
  MatterhornWhymper.logger.debug { msg }
  raise(Matterhorn::HttpServerError.new(request, response), msg)
end
handle_general_error(request, response) click to toggle source
# File lib/matterhorn/http_client.rb, line 171
def handle_general_error(request, response)
  msg = log_message('handle_general_error', request, response)
  MatterhornWhymper.logger.debug { msg }
  raise(Matterhorn::HttpGeneralError.new(request, response), msg)
end
http_socket() click to toggle source

————————————————————————– private section —

# File lib/matterhorn/http_client.rb, line 73
def http_socket
  return @http_socket   if !@http_socket.nil? && @http_socket.started?
  @http_socket = Net::HTTP.new(@uri.host, @uri.port)
  @http_socket.use_ssl = @ssl
  @http_socket.verify_mode = OpenSSL::SSL::VERIFY_NONE    if @ssl && @ssl_dont_verify_cert
  if !@timeout.nil?
    @http_socket.open_timeout = @timeout
    @http_socket.read_timeout = @timeout
  end
  @http_socket.start
end
log_message(method, request, response) click to toggle source
# File lib/matterhorn/http_client.rb, line 178
def log_message(method, request, response)
  "#{self.class.name}::#{method} | code = #{response.code}\n" +
  "  request  = #{request.method} #{request.path}\n" +
  "  response = #{response.code} #{response.msg}, body:\n#{response.body}\n"
end
multipart_post(url, params, file, filename, mime_type) click to toggle source
# File lib/matterhorn/http_client.rb, line 93
def multipart_post(url, params, file, filename, mime_type)
  if file.kind_of?(String)
    file = File.new(file)
  elsif file.kind_of?(File)
    # noting to do
  elsif params['BODY'].kind_of?(String)
    file = File.new(params['BODY'])
    params['BODY'] = nil
  elsif params['BODY'].kind_of?(File)
    file = params['BODY']
    params['BODY'] = nil
  else
    raise(Matterhorn::Error, "Matterhorn::HttpClient::multipart_post | " +
                             "Neither a BODY nor a file is present!")
  end
  if filename.nil?
    filename = File.basename(file.path)
  end
  if mime_type.nil?
    mime_types = MIME::Types.type_for(File.basename(file.path))
    mime_type = mime_types.first
    mime_types.each do |mt|
      if mt.to_s =~ /^text/
        mime_type = mt
        break
      end
    end
  end
  params['BODY'] = UploadIO.new(file, mime_type, filename)
  Net::HTTP::Post::Multipart.new(@uri.request_uri + url, params)
end
singlepart_post(url, params) click to toggle source
# File lib/matterhorn/http_client.rb, line 86
def singlepart_post(url, params)
  request = Net::HTTP::Post.new(@uri.request_uri + url)
  request.set_form_data(params)
  request
end