Module: Dkdeploy::Php::Helpers::Http

Defined in:
lib/dkdeploy/php/helpers/http.rb

Overview

HTTP related helpers

Instance Method Summary collapse

Instance Method Details

#call_file_on_server(filename, server) ⇒ Net::HTTPResponse

Local migrations classes directory



14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# File 'lib/dkdeploy/php/helpers/http.rb', line 14

def call_file_on_server(filename, server)
  # Setting up URL to call
  domain_scheme = server.properties.respond_to?(:domain_scheme) ? server.fetch(:domain_scheme) : 'http'
  domain = server.properties.respond_to?(:domain) ? server.fetch(:domain) : server.hostname
  web_server_port = domain_scheme == 'https' ? 443 : 80
  # Use server configuration, if exists
  web_server_port = server.fetch(:web_server_port) if server.properties.respond_to?(:web_server_port)
  ssl_verify_mode = server.properties.respond_to?(:ssl_verify_mode) ? server.fetch(:ssl_verify_mode) : OpenSSL::SSL::VERIFY_PEER

  url = URI.parse("#{domain_scheme}://#{domain}").merge("/#{filename}")
  url.port = web_server_port
  info "Call URL #{url}"

  http_get_with_redirect url: url, verify_mode: ssl_verify_mode
end

#http_get_with_redirect(url:, limit: 5, verify_mode: OpenSSL::SSL::VERIFY_PEER) ⇒ NET::HTTPResponse

Sends a get request that handles redirects

Raises:

  • (ArgumentError)


36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
# File 'lib/dkdeploy/php/helpers/http.rb', line 36

def http_get_with_redirect(url:, limit: 5, verify_mode: OpenSSL::SSL::VERIFY_PEER)
  limit = Integer(limit)
  raise ArgumentError, 'limit cannot be negative' if limit < 0
  raise 'too many HTTP redirects' if limit.zero?
  # configure Net::HTTP
  http = Net::HTTP.new(url.host, url.port)
  http.open_timeout = fetch :http_open_timeout
  http.read_timeout = fetch :http_read_timeout
  if url.scheme == 'https'
    http.use_ssl = true
    http.verify_mode = verify_mode
  end
  request = Net::HTTP::Get.new(url.path) # build request
  response = http.request(request) # call url
  if response.is_a? Net::HTTPRedirection
    # Does not handle multiple redirects. Code/idea from http://stackoverflow.com/a/7210600/1796645
    location = URI.parse(response.header['location'])
    info "redirected to #{location}"
    response = http_get_with_redirect(url: location, limit: limit - 1, verify_mode: verify_mode)
  end
  response
end