Class: AjpRailsRequest

Inherits:
ActionController::AbstractRequest
  • Object
show all
Extended by:
Forwardable
Defined in:
lib/ajp-rails/rails-wrapper.rb

Overview

Wraps Net::AJP13::Request to adapt it to request object in rails.

Defined Under Namespace

Modules: QueryExtension

Constant Summary collapse

AJP_PACKET_EMBED_VARIABLES =
[
  'remote_addr', 'remote_host', 'server_name', 'server_port'
]
DEFAULT_SESSION_OPTIONS =
ActionController::CgiRequest::DEFAULT_SESSION_OPTIONS.merge('session_key' => 'JSESSIONID')

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(ajp_request, session_options, server_environments) ⇒ AjpRailsRequest

ajp_request

Net::AJP13::Request object to wrap

session_options

Options to manage sessions. It is compatible for CGI::SEssion.new’s options.

server_environments


123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
# File 'lib/ajp-rails/rails-wrapper.rb', line 123

def initialize(ajp_request, session_options, server_environments)
  @req = ajp_request
  @session_options = session_options
  @server_environments = server_environments
  @session_options['session_path'] ||= @server_environments['APP_LOCATION']

  # simulates environment hash.
  @env = self.class.instance_method(:environment).bind(self)
  # Object#method is overridden by AbstractRequest#method
  class << @env
    def include?(key) !call(key).nil? end
    alias :key? :include?
  end

  extend QueryExtension
  initialize_query

  @cookies = nil
  fix_cookies
end

Instance Attribute Details

#envObject (readonly) Also known as: env_table

CGI#env compatible interface for ActionController::AbstractRequest



166
167
168
# File 'lib/ajp-rails/rails-wrapper.rb', line 166

def env
  @env
end

#session_optionsObject

option values for session management. The interface is compatible for CGI::Session.new’s second argument



163
164
165
# File 'lib/ajp-rails/rails-wrapper.rb', line 163

def session_options
  @session_options
end

Instance Method Details

#hostObject



253
254
255
256
257
258
259
260
# File 'lib/ajp-rails/rails-wrapper.rb', line 253

def host
  @req['x-forwarded-host'] ||
    ($1 if @req.server_name and /\A(.*):\d+\Z/ =~ @req.server_name) ||
    (@req.server_name and @req.server_name.split(':').first) ||
    ($1 if @req['host'] and /\A(.*):\d+\Z/ =~ @req['host']) ||
    (@req['host'] and @req['host'].split(':').first) ||
    ''
end

#methodObject

HTTP method name as a Symbol



205
206
207
# File 'lib/ajp-rails/rails-wrapper.rb', line 205

def method
  @req.method.downcase.to_sym
end

#pathObject



221
222
223
224
225
226
# File 'lib/ajp-rails/rails-wrapper.rb', line 221

def path
  path = @req.path
  path = path.sub(%r!\A#{Regexp.escape(@server_environments['DISPATCHER_PREFIX'])}!, '') if @server_environments['DISPATCHER_PREFIX']
  path = path.sub(%r!#{Regexp.escape(@server_environments['DISPATCHER_SUFFIX'])}\Z!, '') if @server_environments['DISPATCHER_SUFFIX']
  path
end

#portObject

Overrides AbstractRequest’s one



263
264
265
# File 'lib/ajp-rails/rails-wrapper.rb', line 263

def port
  @req['x-forwarded-host'] ? standard_port : (port_from_http_host || @req.server_port)
end

#port_from_http_hostObject



267
268
269
# File 'lib/ajp-rails/rails-wrapper.rb', line 267

def port_from_http_host
  $1.to_i if @req['host'] && /:(\d+)$/ =~ @req['host']
end

#query_parametersObject

Overrides blank implementation in AbstractRequest



240
241
242
# File 'lib/ajp-rails/rails-wrapper.rb', line 240

def query_parameters
  (qs = self.query_string).blank? ? {} : CGIMethods.parse_query_parameters(qs)
end

#query_stringObject



196
197
198
199
# File 'lib/ajp-rails/rails-wrapper.rb', line 196

def query_string
  val = @req.get_attributes('query_string')
  val and val[0]
end

#raw_postObject



209
210
211
212
213
214
215
216
217
218
219
# File 'lib/ajp-rails/rails-wrapper.rb', line 209

def raw_post
  if @req.body
    @req.body
  elsif @req.body_stream
    stream = @req.body_stream
    @req.body_stream = nil
    @req.body = stream.read
  else
    ''
  end
end

#request_parametersObject

Overrides blank implementation in AbstractRequest



245
246
247
248
249
250
251
# File 'lib/ajp-rails/rails-wrapper.rb', line 245

def request_parameters
  if formatted_post?
    CGIMethods.parse_formatted_request_parameters(post_format, raw_post)
  else
    CGIMethods.parse_request_parameters(self.params)
  end
end

#request_uriObject



228
229
230
231
232
233
234
235
236
237
# File 'lib/ajp-rails/rails-wrapper.rb', line 228

def request_uri
  if @request_uri
    @request_uri
  else
    uri = path
    qs = query_string
    uri << '?' << qs[0] if qs
    @request_uri = uri
  end
end

#reset_sessionObject

Overrides blank implementation in AbstractRequest



291
292
293
294
# File 'lib/ajp-rails/rails-wrapper.rb', line 291

def reset_session
  @session.delete if CGI::Session === @session
  @session = new_session
end

#server_softwareObject



191
192
193
194
# File 'lib/ajp-rails/rails-wrapper.rb', line 191

def server_software
  val = @req.get_attributes('server_software')
  val and val[0] and /([A-Za-z]+)/ =~ val[0] and $1.downcase
end

#sessionObject

Overrides blank implementation in AbstractRequest



272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
# File 'lib/ajp-rails/rails-wrapper.rb', line 272

def session
  unless @session
    if @session_options == false
      @session = Hash.new
    else
      stale_session_check! do
 if session_options_with_string_keys['new_session'] == true
   @session = new_session
 else
          @session = CGI::Session.new(@req, session_options_with_string_keys)
 end
 @session['__valid_session']
	end
    end
  end
  @session
end