This file is indexed.

/usr/lib/ruby/vendor_ruby/faraday/adapter/httpclient.rb is in ruby-faraday 0.9.2-3.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
module Faraday
  class Adapter
    class HTTPClient < Faraday::Adapter
      dependency 'httpclient'

      def client
        @client ||= ::HTTPClient.new
      end

      def call(env)
        super

        # enable compression
        client.transparent_gzip_decompression = true

        if req = env[:request]
          if proxy = req[:proxy]
            configure_proxy proxy
          end

          if bind = req[:bind]
            configure_socket bind
          end

          configure_timeouts req
        end

        if env[:url].scheme == 'https' && ssl = env[:ssl]
          configure_ssl ssl
        end

        # TODO Don't stream yet.
        # https://github.com/nahi/httpclient/pull/90
        env[:body] = env[:body].read if env[:body].respond_to? :read

        resp = client.request env[:method], env[:url],
          :body   => env[:body],
          :header => env[:request_headers]

        save_response env, resp.status, resp.body, resp.headers

        @app.call env
      rescue ::HTTPClient::TimeoutError, Errno::ETIMEDOUT
        raise Faraday::Error::TimeoutError, $!
      rescue ::HTTPClient::BadResponseError => err
        if err.message.include?('status 407')
          raise Faraday::Error::ConnectionFailed, %{407 "Proxy Authentication Required "}
        else
          raise Faraday::Error::ClientError, $!
        end
      rescue Errno::ECONNREFUSED, EOFError
        raise Faraday::Error::ConnectionFailed, $!
      rescue => err
        if defined?(OpenSSL) && OpenSSL::SSL::SSLError === err
          raise Faraday::SSLError, err
        else
          raise
        end
      end

      def configure_socket(bind)
        client.socket_local.host = bind[:host]
        client.socket_local.port = bind[:port]
      end

      def configure_proxy(proxy)
        client.proxy = proxy[:uri]
        if proxy[:user] && proxy[:password]
          client.set_proxy_auth proxy[:user], proxy[:password]
        end
      end

      def configure_ssl(ssl)
        ssl_config = client.ssl_config
        ssl_config.verify_mode = ssl_verify_mode(ssl)
        ssl_config.cert_store = ssl_cert_store(ssl)

        ssl_config.add_trust_ca ssl[:ca_file]        if ssl[:ca_file]
        ssl_config.add_trust_ca ssl[:ca_path]        if ssl[:ca_path]
        ssl_config.client_cert  = ssl[:client_cert]  if ssl[:client_cert]
        ssl_config.client_key   = ssl[:client_key]   if ssl[:client_key]
        ssl_config.verify_depth = ssl[:verify_depth] if ssl[:verify_depth]
      end

      def configure_timeouts(req)
        if req[:timeout]
          client.connect_timeout   = req[:timeout]
          client.receive_timeout   = req[:timeout]
          client.send_timeout      = req[:timeout]
        end

        if req[:open_timeout]
          client.connect_timeout   = req[:open_timeout]
          client.send_timeout      = req[:open_timeout]
        end
      end

      def ssl_cert_store(ssl)
        return ssl[:cert_store] if ssl[:cert_store]
        # Use the default cert store by default, i.e. system ca certs
        cert_store = OpenSSL::X509::Store.new
        cert_store.set_default_paths
        cert_store
      end

      def ssl_verify_mode(ssl)
        ssl[:verify_mode] || begin
          if ssl.fetch(:verify, true)
            OpenSSL::SSL::VERIFY_PEER | OpenSSL::SSL::VERIFY_FAIL_IF_NO_PEER_CERT
          else
            OpenSSL::SSL::VERIFY_NONE
          end
        end
      end
    end
  end
end