Module: Jets::Controller::Request::Compat::Request
- Extended by:
- Memoist
- Included in:
- Jets::Controller::Request
- Defined in:
- lib/jets/controller/request/compat/request.rb
Overview
Based on ActionDispatch::Request class
Constant Summary collapse
- ENV_METHODS =
%w[ AUTH_TYPE GATEWAY_INTERFACE PATH_TRANSLATED REMOTE_HOST REMOTE_IDENT REMOTE_USER REMOTE_ADDR SERVER_NAME SERVER_PROTOCOL ORIGINAL_SCRIPT_NAME HTTP_ACCEPT HTTP_ACCEPT_CHARSET HTTP_ACCEPT_ENCODING HTTP_ACCEPT_LANGUAGE HTTP_CACHE_CONTROL HTTP_FROM HTTP_NEGOTIATE HTTP_PRAGMA HTTP_CLIENT_IP HTTP_X_FORWARDED_FOR HTTP_ORIGIN HTTP_VERSION HTTP_X_CSRF_TOKEN HTTP_X_REQUEST_ID HTTP_X_FORWARDED_HOST ].freeze
- LOCALHOST =
Regexp.union [/^127\.\d{1,3}\.\d{1,3}\.\d{1,3}$/, /^::1$/, /^0:0:0:0:0:0:0:1(%.*)?$/]
Instance Method Summary collapse
-
#authorization ⇒ Object
Returns the authorization header regardless of whether it was specified directly or through one of the proxy alternatives.
- #controller_class_for(name) ⇒ Object
- #headers ⇒ Object
- #http_headers ⇒ Object
-
#local? ⇒ Boolean
True if the request came from localhost, 127.0.0.1, or ::1.
-
#remote_ip ⇒ Object
Returns the IP address of client as a
String
, usually set by the RemoteIp middleware. - #remote_ip=(remote_ip) ⇒ Object
- #request_method_symbol ⇒ Object (also: #method_symbol)
- #reset_session ⇒ Object
-
#send_early_hints(links) ⇒ Object
Needed when action_view.preload_links_header = true Rails 6.1 defaults.
-
#server_software ⇒ Object
Returns the lowercase name of the HTTP server software.
- #session ⇒ Object
-
#session=(session) ⇒ Object
:nodoc:.
- #session_options=(options) ⇒ Object
-
#top_level_headers ⇒ Object
These are not part of a Rails headers but believe they make sense to add as it feel like expected behavior.
Instance Method Details
#authorization ⇒ Object
Returns the authorization header regardless of whether it was specified directly or through one of the proxy alternatives.
83 84 85 86 87 88 |
# File 'lib/jets/controller/request/compat/request.rb', line 83 def get_header("HTTP_AUTHORIZATION") || get_header("X-HTTP_AUTHORIZATION") || get_header("X_HTTP_AUTHORIZATION") || get_header("REDIRECT_X_HTTP_AUTHORIZATION") end |
#controller_class_for(name) ⇒ Object
95 96 97 98 99 |
# File 'lib/jets/controller/request/compat/request.rb', line 95 def controller_class_for(name) controller_param = name.underscore const_name = controller_param.camelize << "Controller" const_name.constantize end |
#headers ⇒ Object
52 53 54 |
# File 'lib/jets/controller/request/compat/request.rb', line 52 def headers top_level_headers.merge(http_headers) end |
#http_headers ⇒ Object
56 57 58 59 60 61 62 |
# File 'lib/jets/controller/request/compat/request.rb', line 56 def http_headers Hash[*env.select {|k,v| k.start_with? 'HTTP_'} .collect {|k,v| [k.sub(/^HTTP_/, ''), v]} .collect {|k,v| [k.split('_').collect(&:capitalize).join('-'), v]} .sort .flatten] end |
#local? ⇒ Boolean
True if the request came from localhost, 127.0.0.1, or ::1.
91 92 93 |
# File 'lib/jets/controller/request/compat/request.rb', line 91 def local? LOCALHOST.match?(remote_addr) && LOCALHOST.match?(remote_ip) end |
#remote_ip ⇒ Object
Returns the IP address of client as a String
, usually set by the RemoteIp middleware.
108 109 110 |
# File 'lib/jets/controller/request/compat/request.rb', line 108 def remote_ip @remote_ip ||= (get_header("action_dispatch.remote_ip") || ip).to_s end |
#remote_ip=(remote_ip) ⇒ Object
112 113 114 115 |
# File 'lib/jets/controller/request/compat/request.rb', line 112 def remote_ip=(remote_ip) @remote_ip = nil set_header "action_dispatch.remote_ip", remote_ip end |
#request_method_symbol ⇒ Object Also known as: method_symbol
101 102 103 |
# File 'lib/jets/controller/request/compat/request.rb', line 101 def request_method_symbol request_method.downcase.to_sym end |
#reset_session ⇒ Object
48 49 50 |
# File 'lib/jets/controller/request/compat/request.rb', line 48 def reset_session session.destroy end |
#send_early_hints(links) ⇒ Object
Needed when action_view.preload_links_header = true Rails 6.1 defaults
119 120 121 122 123 |
# File 'lib/jets/controller/request/compat/request.rb', line 119 def send_early_hints(links) return unless env["rack.early_hints"] env["rack.early_hints"].call(links) end |
#server_software ⇒ Object
Returns the lowercase name of the HTTP server software.
77 78 79 |
# File 'lib/jets/controller/request/compat/request.rb', line 77 def server_software (get_header("SERVER_SOFTWARE") && /^([a-zA-Z]+)/ =~ get_header("SERVER_SOFTWARE")) ? $1.downcase : nil end |
#session ⇒ Object
30 31 32 33 34 35 36 37 38 |
# File 'lib/jets/controller/request/compat/request.rb', line 30 def session key = ActionDispatch::Request::Session::ENV_SESSION_KEY session = env[key] if session.nil? # controller dispatch! does not go through middleware # mock session that is disabled session = ActionDispatch::Request::Session.new(nil, self, enabled: false) end session end |
#session=(session) ⇒ Object
:nodoc:
40 41 42 |
# File 'lib/jets/controller/request/compat/request.rb', line 40 def session=(session) # :nodoc: ActionDispatch::Request::Session.set self, session end |
#session_options=(options) ⇒ Object
44 45 46 |
# File 'lib/jets/controller/request/compat/request.rb', line 44 def () ActionDispatch::Request::Session::Options.set self, end |
#top_level_headers ⇒ Object
These are not part of a Rails headers but believe they make sense to add as it feel like expected behavior.
66 67 68 69 70 71 72 73 74 |
# File 'lib/jets/controller/request/compat/request.rb', line 66 def top_level_headers hash = { "Host" => env["HTTP_HOST"], "Content-Type" => env["CONTENT_TYPE"], "Content-Length" => env["CONTENT_LENGTH"], } hash.delete_if { |k, v| v.nil? } hash end |