diff options
author | Douwe Maan <douwe@gitlab.com> | 2015-02-11 23:14:19 +0100 |
---|---|---|
committer | Douwe Maan <douwe@gitlab.com> | 2015-02-11 23:14:19 +0100 |
commit | f92a9c5a5f3f1cfc8a827abcf67a508133f39f04 (patch) | |
tree | d2dbd4b2059f28cdb73a9f3a42b96d70d914642c /lib/gitlab_net.rb | |
parent | f11e1bf914854e53217ece1ec6f8947f2894a1c7 (diff) | |
download | gitlab-shell-f92a9c5a5f3f1cfc8a827abcf67a508133f39f04.tar.gz |
Refactor: Remove #tap for readability and performance and DRY up get/post.
Diffstat (limited to 'lib/gitlab_net.rb')
-rw-r--r-- | lib/gitlab_net.rb | 80 |
1 files changed, 40 insertions, 40 deletions
diff --git a/lib/gitlab_net.rb b/lib/gitlab_net.rb index 9bfc0d5..88c7e75 100644 --- a/lib/gitlab_net.rb +++ b/lib/gitlab_net.rb @@ -64,63 +64,61 @@ class GitlabNet "#{config.gitlab_url}/api/v3/internal" end - def http_client_for(url) - Net::HTTP.new(url.host, url.port).tap do |http| - if URI::HTTPS === url - http.use_ssl = true - http.cert_store = cert_store - http.verify_mode = OpenSSL::SSL::VERIFY_NONE if config.http_settings['self_signed_cert'] - end + def http_client_for(uri) + http = Net::HTTP.new(uri.host, uri.port) + + if uri.is_a?(URI::HTTPS) + http.use_ssl = true + http.cert_store = cert_store + http.verify_mode = OpenSSL::SSL::VERIFY_NONE if config.http_settings['self_signed_cert'] end + + http end - def http_request_for(url, method = :get) + def http_request_for(method, uri, params = {}) + request_klass = method == :get ? Net::HTTP::Get : Net::HTTP::Post + request = request_klass.new(uri.request_uri) + user = config.http_settings['user'] password = config.http_settings['password'] + request.basic_auth(user, password) if user && password + + request.set_form_data(params.merge(secret_token: secret_token)) + + request + end + + def request(method, url, params = {}) + $logger.debug "Performing #{method.to_s.upcase} #{url}" + + uri = URI.parse(url) + + http = http_client_for(uri) + request = http_request_for(method, uri, params) - if method == :get - Net::HTTP::Get.new(url.request_uri).tap { |r| r.basic_auth(user, password) if user && password } + response = http.start { http.request(request) } + + if response.code == "200" + $logger.debug "Received response #{response.code} => <#{response.body}>." else - Net::HTTP::Post.new(url.request_uri).tap { |r| r.basic_auth(user, password) if user && password } + $logger.error "API call <#{method.to_s.upcase} #{url}> failed: #{response.code} => <#{response.body}>." end + + response end def get(url) - $logger.debug "Performing GET #{url}" - - url = URI.parse(url) - http = http_client_for url - request = http_request_for url - request.set_form_data(secret_token: secret_token) - - http.start { |http| http.request(request) }.tap do |resp| - if resp.code == "200" - $logger.debug { "Received response #{resp.code} => <#{resp.body}>." } - else - $logger.error { "API call <GET #{url}> failed: #{resp.code} => <#{resp.body}>." } - end - end + request(:get, url) end def post(url, params) - $logger.debug "Performing POST #{url}" - - url = URI.parse(url) - http = http_client_for(url) - request = http_request_for(url, :post) - request.set_form_data(params.merge(secret_token: secret_token)) - - http.start { |http| http.request(request) }.tap do |resp| - if resp.code == "200" - $logger.debug { "Received response #{resp.code} => <#{resp.body}>." } - else - $logger.error { "API call <POST #{url}> failed: #{resp.code} => <#{resp.body}>." } - end - end + request(:post, url, params) end def cert_store - @cert_store ||= OpenSSL::X509::Store.new.tap do |store| + @cert_store ||= begin + store = OpenSSL::X509::Store.new store.set_default_paths if ca_file = config.http_settings['ca_file'] @@ -130,6 +128,8 @@ class GitlabNet if ca_path = config.http_settings['ca_path'] store.add_path(ca_path) end + + store end end |