mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
94921293db
git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@57 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
107 lines
2.1 KiB
Ruby
Executable file
107 lines
2.1 KiB
Ruby
Executable file
module ActionController
|
|
# These methods are available in both the production and test Request objects.
|
|
class AbstractRequest
|
|
# Returns both GET and POST parameters in a single hash.
|
|
def parameters
|
|
@parameters ||= request_parameters.update(query_parameters)
|
|
end
|
|
|
|
def method
|
|
env['REQUEST_METHOD'].downcase.intern
|
|
end
|
|
|
|
def get?
|
|
method == :get
|
|
end
|
|
|
|
def post?
|
|
method == :post
|
|
end
|
|
|
|
def put?
|
|
method == :put
|
|
end
|
|
|
|
def delete?
|
|
method == :delete
|
|
end
|
|
|
|
def head?
|
|
method == :head
|
|
end
|
|
|
|
# Determine originating IP address. REMOTE_ADDR is the standard
|
|
# but will fail if the user is behind a proxy. HTTP_CLIENT_IP and/or
|
|
# HTTP_X_FORWARDED_FOR are set by proxies so check for these before
|
|
# falling back to REMOTE_ADDR. HTTP_X_FORWARDED_FOR may be a comma-
|
|
# delimited list in the case of multiple chained proxies; the first is
|
|
# the originating IP.
|
|
def remote_ip
|
|
return env['HTTP_CLIENT_IP'] if env.include? 'HTTP_CLIENT_IP'
|
|
|
|
if env.include? 'HTTP_X_FORWARDED_FOR' then
|
|
remote_ips = env['HTTP_X_FORWARDED_FOR'].split(',').reject do |ip|
|
|
ip =~ /^unknown$|^(10|172\.16|192\.168)\./i
|
|
end
|
|
|
|
return remote_ips.first.strip unless remote_ips.empty?
|
|
end
|
|
|
|
return env['REMOTE_ADDR']
|
|
end
|
|
|
|
def request_uri
|
|
env["REQUEST_URI"]
|
|
end
|
|
|
|
def protocol
|
|
port == 443 ? "https://" : "http://"
|
|
end
|
|
|
|
def ssl?
|
|
protocol == "https://"
|
|
end
|
|
|
|
def path
|
|
request_uri ? request_uri.split("?").first : ""
|
|
end
|
|
|
|
def port
|
|
env["SERVER_PORT"].to_i
|
|
end
|
|
|
|
def host_with_port
|
|
if env['HTTP_HOST']
|
|
env['HTTP_HOST']
|
|
elsif (protocol == "http://" && port == 80) || (protocol == "https://" && port == 443)
|
|
host
|
|
else
|
|
host + ":#{port}"
|
|
end
|
|
end
|
|
|
|
#--
|
|
# Must be implemented in the concrete request
|
|
#++
|
|
def query_parameters
|
|
end
|
|
|
|
def request_parameters
|
|
end
|
|
|
|
def env
|
|
end
|
|
|
|
def host
|
|
end
|
|
|
|
def cookies
|
|
end
|
|
|
|
def session
|
|
end
|
|
|
|
def reset_session
|
|
end
|
|
end
|
|
end
|