Class: FlashCookieSession::Middleware

Inherits:
Object
  • Object
show all
Defined in:
lib/flash_cookie_session/middleware.rb

Constant Summary collapse

USER_AGENT_MATCHER =
/^(Adobe|Shockwave) Flash/.freeze
HTTP_REFERER_MATCHER =
/\.swf$/.freeze

Instance Method Summary collapse

Constructor Details

#initialize(app, session_key = Rails.application.config.session_options[:key]) ⇒ Middleware

Returns a new instance of Middleware.



6
7
8
9
# File 'lib/flash_cookie_session/middleware.rb', line 6

def initialize(app, session_key = Rails.application.config.session_options[:key])
  @app = app
  @session_key = session_key
end

Instance Method Details

#call(env) ⇒ Object



11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# File 'lib/flash_cookie_session/middleware.rb', line 11

def call(env)
  referrer = env['HTTP_REFERER'].to_s.split('?').first

  if env['HTTP_USER_AGENT'] =~ USER_AGENT_MATCHER || referrer =~ HTTP_REFERER_MATCHER
    req = Rack::Request.new(env)
    the_session_key = [ @session_key, req.params[@session_key] ].join('=').freeze if req.params[@session_key]

    if req.params['remember_token'] && req.params['remember_token'] != 'null'
      the_remember_token = [ 'remember_token', req.params['remember_token'] ].join('=').freeze
    else
      the_remember_token = nil
    end

    cookie_with_remember_token_and_session_key = [ the_remember_token, the_session_key ].compact.join('\;').freeze

    env['HTTP_COOKIE'] = cookie_with_remember_token_and_session_key
    env['HTTP_ACCEPT'] = "#{req.params['_http_accept']}".freeze if req.params['_http_accept']
  end

  @app.call(env)
end