lib/ronin/network/extensions/http/net.rb in ronin-support-0.3.0 vs lib/ronin/network/extensions/http/net.rb in ronin-support-0.4.0.rc1
- old
+ new
@@ -16,744 +16,9 @@
# You should have received a copy of the GNU Lesser General Public License
# along with Ronin Support. If not, see <http://www.gnu.org/licenses/>.
#
require 'ronin/network/http'
-require 'ronin/network/ssl'
-require 'uri/query_params'
-require 'net/http'
-
-begin
- require 'net/https'
-rescue ::LoadError
-end
-
module Net
- #
- # Starts a HTTP connection with the server.
- #
- # @param [Hash] options
- # Additional options
- #
- # @option options [String, URI::HTTP] :url
- # The full URL to request.
- #
- # @option options [String] :host
- # The host the HTTP server is running on.
- #
- # @option options [Integer] :port (Net::HTTP.default_port)
- # The port the HTTP server is listening on.
- #
- # @option options [String, Hash] :proxy (Ronin::Network::HTTP.proxy)
- # A Hash of proxy settings to use when connecting to the HTTP server.
- #
- # @option options [String] :user
- # The user to authenticate with when connecting to the HTTP server.
- #
- # @option options [String] :password
- # The password to authenticate with when connecting to the HTTP server.
- #
- # @option options [Boolean, Hash] :ssl
- # Enables SSL for the HTTP connection.
- #
- # @option :ssl [Symbol] :verify
- # Specifies the SSL certificate verification mode.
- #
- # @yield [session]
- # If a block is given, it will be passed the newly created HTTP
- # session object.
- #
- # @yieldparam [Net::HTTP] session
- # The newly created HTTP session.
- #
- # @return [Net::HTTP]
- # The HTTP session object.
- #
- # @api public
- #
- def Net.http_connect(options={},&block)
- options = Ronin::Network::HTTP.expand_options(options)
-
- host = options[:host].to_s
- port = options[:port]
- proxy = options[:proxy]
- proxy_host = if (proxy && proxy[:host])
- proxy[:host].to_s
- end
-
- sess = Net::HTTP::Proxy(
- proxy_host,
- proxy[:port],
- proxy[:user],
- proxy[:password]
- ).new(host.to_s,port)
-
- if options[:ssl]
- sess.use_ssl = true
- sess.verify_mode = Ronin::Network::SSL::VERIFY[options[:ssl][:verify]]
- end
-
- sess.start()
-
- if block
- if block.arity == 2
- block.call(sess,options)
- else
- block.call(sess)
- end
- end
-
- return sess
- end
-
- #
- # Creates a new temporary HTTP session with the server.
- #
- # @param [Hash] options
- # Additional options
- #
- # @option options [String, URI::HTTP] :url
- # The full URL to request.
- #
- # @option options [String] :host
- # The host the HTTP server is running on.
- #
- # @option options [Integer] :port (Net::HTTP.default_port)
- # The port the HTTP server is listening on.
- #
- # @option options [String] :user
- # The user to authenticate with when connecting to the HTTP server.
- #
- # @option options [String] :password
- # The password to authenticate with when connecting to the HTTP server.
- #
- # @option options [String, Hash] :proxy (Ronin::Network::HTTP.proxy)
- # A Hash of proxy settings to use when connecting to the HTTP server.
- #
- # @option options [Boolean, Hash] :ssl
- # Enables SSL for the HTTP connection.
- #
- # @option :ssl [Symbol] :verify
- # Specifies the SSL certificate verification mode.
- #
- # @yield [session]
- # If a block is given, it will be passed the newly created HTTP
- # session object.
- #
- # @yieldparam [Net::HTTP] session
- # The newly created HTTP session.
- #
- # @return [nil]
- #
- # @see Net.http_connect
- #
- # @api public
- #
- def Net.http_session(options={},&block)
- Net.http_connect(options) do |sess,expanded_options|
- if block
- if block.arity == 2
- block.call(sess,expanded_options)
- else
- block.call(sess)
- end
- end
-
- sess.finish
- end
-
- return nil
- end
-
- #
- # Connects to the HTTP server and sends an HTTP Request.
- #
- # @param [Hash] options
- # Additional options.
- #
- # @option options [Symbol, String] :method
- # The HTTP method to use in the request.
- #
- # @option options [String] :path
- # The path to request from the HTTP server.
- #
- # @option options [Hash] :headers
- # The Hash of the HTTP headers to send with the request.
- # May contain either Strings or Symbols, lower-case or camel-case keys.
- #
- # @yield [request, (options)]
- # If a block is given, it will be passed the HTTP request object.
- # If the block has an arity of 2, it will also be passed the expanded
- # version of the given _options_.
- #
- # @yieldparam [Net::HTTP::Request] request
- # The HTTP request object to use in the request.
- #
- # @yieldparam [Hash] options
- # The expanded version of the given _options_.
- #
- # @return [Net::HTTP::Response]
- # The response of the HTTP request.
- #
- # @see http_session
- #
- # @api public
- #
- def Net.http_request(options={},&block)
- resp = nil
-
- Net.http_session(options) do |http,expanded_options|
- req = Ronin::Network::HTTP.request(expanded_options)
-
- if block
- if block.arity == 2
- block.call(req,expanded_options)
- else
- block.call(req)
- end
- end
-
- resp = http.request(req)
- end
-
- return resp
- end
-
- #
- # Returns the Status Code of the Response.
- #
- # @param [Hash] options
- # Additional options.
- #
- # @option options [Symbol, String] :method (:head)
- # The method to use for the request.
- #
- # @return [Integer]
- # The HTTP Response Status.
- #
- # @see http_request
- #
- # @since 0.2.0
- #
- # @api public
- #
- def Net.http_status(options={})
- options = {:method => :head}.merge(options)
-
- return Net.http_request(options).code.to_i
- end
-
- #
- # Checks if the response has an HTTP OK status code.
- #
- # @param [Hash] options
- # Additional options.
- #
- # @option options [Symbol, String] :method (:head)
- # The method to use for the request.
- #
- # @return [Boolean]
- # Specifies whether the response had an HTTP OK status code or not.
- #
- # @see http_status
- #
- # @api public
- #
- def Net.http_ok?(options={})
- Net.http_status(options) == 200
- end
-
- #
- # Sends a HTTP Head request and returns the HTTP Server header.
- #
- # @param [Hash] options
- # Additional options.
- #
- # @option options [Symbol, String] :method (:head)
- # The method to use for the request.
- #
- # @return [String]
- # The HTTP `Server` header.
- #
- # @see http_request
- #
- # @api public
- #
- def Net.http_server(options={})
- options = {:method => :head}.merge(options)
-
- return Net.http_request(options)['server']
- end
-
- #
- # Sends an HTTP Head request and returns the HTTP X-Powered-By header.
- #
- # @param [Hash] options
- # Additional options.
- #
- # @option options [Symbol, String] :method (:get)
- # The method to use for the request.
- #
- # @return [String]
- # The HTTP `X-Powered-By` header.
- #
- # @see http_request
- #
- # @api public
- #
- def Net.http_powered_by(options={})
- options = {:method => :get}.merge(options)
-
- return Net.http_request(options)['x-powered-by']
- end
-
- #
- # Performs an HTTP Copy request.
- #
- # @param [Hash] options
- # Additional options.
- #
- # @yield [response]
- # If a block is given, it will be passed the response received
- # from the request.
- #
- # @yieldparam [Net::HTTP::Response] response
- # The HTTP response object.
- #
- # @return [Net::HTTP::Response]
- # The response of the HTTP request.
- #
- # @see http_request
- #
- # @api public
- #
- def Net.http_copy(options={})
- resp = Net.http_request(options.merge(:method => :copy))
-
- yield resp if block_given?
- return resp
- end
-
- #
- # Performs an HTTP Delete request.
- #
- # @param [Hash] options
- # Additional options.
- #
- # @yield [response]
- # If a block is given, it will be passed the response received from
- # the request.
- #
- # @yieldparam [Net::HTTP::Response] response
- # The HTTP response object.
- #
- # @return [Net::HTTP::Response]
- # The response of the HTTP request.
- #
- # @see http_request
- #
- # @api public
- #
- def Net.http_delete(options={},&block)
- original_headers = options[:headers]
-
- # set the HTTP Depth header
- options[:headers] = {:depth => 'Infinity'}
-
- if original_headers
- options[:header].merge!(original_headers)
- end
-
- resp = Net.http_request(options.merge(:method => :delete))
-
- yield resp if block_given?
- return resp
- end
-
- #
- # Performs an HTTP Get request.
- #
- # @param [Hash] options
- # Additional options.
- #
- # @yield [response]
- # If a block is given, it will be passed the response received from
- # the request.
- #
- # @yieldparam [Net::HTTP::Response] response
- # The HTTP response object.
- #
- # @return [Net::HTTP::Response]
- # The response of the HTTP request.
- #
- # @see http_request
- #
- # @api public
- #
- def Net.http_get(options={},&block)
- resp = Net.http_request(options.merge(:method => :get))
-
- yield resp if block_given?
- return resp
- end
-
- #
- # Performs an HTTP Get request and returns the Response Headers.
- #
- # @param [Hash] options
- # Additional options.
- #
- # @return [Hash{String => Array<String>}]
- # The Headers of the HTTP response.
- #
- # @see http_get
- #
- # @since 0.2.0
- #
- # @api public
- #
- def Net.http_get_headers(options={})
- Net.http_get(options).to_hash
- end
-
- #
- # Performs an HTTP Get request and returns the Respond Body.
- #
- # @param [Hash] options
- # Additional options.
- #
- # @return [String]
- # The body of the HTTP response.
- #
- # @see http_get
- #
- # @api public
- #
- def Net.http_get_body(options={})
- Net.http_get(options).body
- end
-
- #
- # Performs an HTTP Head request.
- #
- # @param [Hash] options
- # Additional options.
- #
- # @yield [response]
- # If a block is given, it will be passed the response received from
- # the request.
- #
- # @yieldparam [Net::HTTP::Response] response
- # The HTTP response object.
- #
- # @return [Net::HTTP::Response]
- # The response of the HTTP request.
- #
- # @see http_request
- #
- # @api public
- #
- def Net.http_head(options={},&block)
- resp = Net.http_request(options.merge(:method => :head))
-
- yield resp if block_given?
- return resp
- end
-
- #
- # Performs an HTTP Lock request.
- #
- # @param [Hash] options
- # Additional options.
- #
- # @yield [response]
- # If a block is given, it will be passed the response received from
- # the request.
- #
- # @yieldparam [Net::HTTP::Response] response
- # The HTTP response object.
- #
- # @return [Net::HTTP::Response]
- # The response of the HTTP request.
- #
- # @see http_request
- #
- # @api public
- #
- def Net.http_lock(options={},&block)
- resp = Net.http_request(options.merge(:method => :lock))
-
- yield resp if block_given?
- return resp
- end
-
- #
- # Performs an HTTP Mkcol request.
- #
- # @param [Hash] options
- # Additional options.
- #
- # @yield [response]
- # If a block is given, it will be passed the response received from
- # the request.
- #
- # @yieldparam [Net::HTTP::Response] response
- # The HTTP response object.
- #
- # @return [Net::HTTP::Response]
- # The response of the HTTP request.
- #
- # @see http_request
- #
- # @api public
- #
- def Net.http_mkcol(options={},&block)
- resp = Net.http_request(options.merge(:method => :mkcol))
-
- yield resp if block_given?
- return resp
- end
-
- #
- # Performs an HTTP Move request.
- #
- # @param [Hash] options
- # Additional options.
- #
- # @yield [response]
- # If a block is given, it will be passed the response received from
- # the request.
- #
- # @yieldparam [Net::HTTP::Response] response
- # The HTTP response object.
- #
- # @return [Net::HTTP::Response]
- # The response of the HTTP request.
- #
- # @see http_request
- #
- # @api public
- #
- def Net.http_move(options={},&block)
- resp = Net.http_request(options.merge(:method => :move))
-
- yield resp if block_given?
- return resp
- end
-
- #
- # Performs an HTTP Options request.
- #
- # @param [Hash] options
- # Additional options.
- #
- # @yield [response]
- # If a block is given, it will be passed the response received from
- # the request.
- #
- # @yieldparam [Net::HTTP::Response] response
- # The HTTP response object.
- #
- # @return [Net::HTTP::Response]
- # The response of the HTTP request.
- #
- # @see http_request
- #
- # @api public
- #
- def Net.http_options(options={},&block)
- resp = Net.http_request(options.merge(:method => :options))
-
- yield resp if block_given?
- return resp
- end
-
- #
- # Performs an HTTP Post request.
- #
- # @param [Hash] options
- # Additional options.
- #
- # @option options [Hash, String] :form_data
- # The form data to send with the HTTP Post request.
- #
- # @yield [response]
- # If a block is given, it will be passed the response received from
- # the request.
- #
- # @yieldparam [Net::HTTP::Response] response
- # The HTTP response object.
- #
- # @return [Net::HTTP::Response]
- # The response of the HTTP request.
- #
- # @see http_request
- #
- # @api public
- #
- def Net.http_post(options={},&block)
- resp = Net.http_request(options.merge(:method => :post))
-
- yield resp if block_given?
- return resp
- end
-
- #
- # Performs an HTTP Post request and returns the Response Headers.
- #
- # @param [Hash] options
- # Additional options.
- #
- # @option options [Hash, String] :form_data
- # The form data to send with the HTTP Post request.
- #
- # @return [Hash{String => Array<String>}]
- # The headers of the HTTP response.
- #
- # @see http_post
- #
- # @since 0.2.0
- #
- # @api public
- #
- def Net.http_post_headers(options={})
- Net.http_post(options).to_hash
- end
-
- #
- # Performs an HTTP Post request and returns the Response Body.
- #
- # @param [Hash] options
- # Additional options.
- #
- # @option options [Hash, String] :form_data
- # The form data to send with the HTTP Post request.
- #
- # @return [String]
- # The body of the HTTP response.
- #
- # @see http_post
- #
- # @api public
- #
- def Net.http_post_body(options={})
- Net.http_post(options).body
- end
-
- #
- # Performs an HTTP Propfind request.
- #
- # @param [Hash] options
- # Additional options.
- #
- # @yield [response]
- # If a block is given, it will be passed the response received from
- # the request.
- #
- # @yieldparam [Net::HTTP::Response] response
- # The HTTP response object.
- #
- # @return [Net::HTTP::Response]
- # The response of the HTTP request.
- #
- # @see http_request
- #
- # @api public
- #
- def Net.http_prop_find(options={},&block)
- original_headers = options[:headers]
-
- # set the HTTP Depth header
- options[:headers] = {:depth => '0'}
-
- if original_headers
- options[:header].merge!(original_headers)
- end
-
- resp = Net.http_request(options.merge(:method => :propfind))
-
- yield resp if block_given?
- return resp
- end
-
- #
- # Performs an HTTP Proppatch request.
- #
- # @param [Hash] options
- # Additional options.
- #
- # @yield [response]
- # If a block is given, it will be passed the response received from
- # the request.
- #
- # @yieldparam [Net::HTTP::Response] response
- # The HTTP response object.
- #
- # @return [Net::HTTP::Response]
- # The response of the HTTP request.
- #
- # @see http_request
- #
- # @api public
- #
- def Net.http_prop_patch(options={},&block)
- resp = Net.http_request(options.merge(:method => :proppatch))
-
- yield resp if block_given?
- return resp
- end
-
- #
- # Performs an HTTP Trace request.
- #
- # @param [Hash] options
- # Additional options.
- #
- # @yield [response]
- # If a block is given, it will be passed the response received from
- # the request.
- #
- # @yieldparam [Net::HTTP::Response] response
- # The HTTP response object.
- #
- # @return [Net::HTTP::Response]
- # The response of the HTTP request.
- #
- # @see http_request
- #
- # @api public
- #
- def Net.http_trace(options={},&block)
- resp = Net.http_request(options.merge(:method => :trace))
-
- yield resp if block_given?
- return resp
- end
-
- #
- # Performs an HTTP Unlock request.
- #
- # @param [Hash] options
- # Additional options.
- #
- # @yield [response]
- # If a block is given, it will be passed the response received from
- # the request.
- #
- # @yieldparam [Net::HTTP::Response] response
- # The HTTP response object.
- #
- # @return [Net::HTTP::Response]
- # The response of the HTTP request.
- #
- # @see http_request
- #
- # @api public
- #
- def Net.http_unlock(options={},&block)
- resp = Net.http_request(options.merge(:method => :unlock))
-
- yield resp if block_given?
- return resp
- end
+ extend Ronin::Network::HTTP
end