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