1
0
Fork 0
mirror of https://github.com/mperham/sidekiq.git synced 2022-11-09 13:52:34 -05:00

Allow to disable sessions (#3183)

* Allow to disable sessions

* Set sessions to false or to an hash

* Tests sessions settings

* Remove unnecessary code

* Add instance setters to Sidekiq::Web
This commit is contained in:
inkstak 2016-10-14 18:51:13 +02:00 committed by Mike Perham
parent 00aed97fa7
commit f53c59f58f
2 changed files with 110 additions and 4 deletions

View file

@ -63,12 +63,20 @@ module Sidekiq
@views ||= VIEWS
end
def enable(*opts)
opts.each {|key| set(key, true) }
end
def disable(*opts)
opts.each {|key| set(key, false) }
end
# Helper for the Sinatra syntax: Sidekiq::Web.set(:session_secret, Rails.application.secrets...)
def set(attribute, value)
send(:"#{attribute}=", value)
end
attr_accessor :app_url, :session_secret, :redis_pool
attr_accessor :app_url, :session_secret, :redis_pool, :sessions
attr_writer :locales, :views
end
@ -97,6 +105,32 @@ module Sidekiq
@app ||= build
end
def enable(*opts)
opts.each {|key| set(key, true) }
end
def disable(*opts)
opts.each {|key| set(key, false) }
end
def set(attribute, value)
send(:"#{attribute}=", value)
end
# Default values
set :sessions, true
attr_writer :sessions
def sessions
unless instance_variable_defined?("@sessions")
@sessions = self.class.sessions
@sessions = @sessions.to_hash.dup if @sessions.respond_to?(:to_hash)
end
@sessions
end
def self.register(extension)
extension.registered(WebApplication)
end
@ -109,9 +143,11 @@ module Sidekiq
end
end
def build
def build_sessions
middlewares = self.middlewares
klass = self.class
sessions = self.sessions
return if sessions === false
unless using?(::Rack::Protection) || ENV['RACK_ENV'] == 'test'
middlewares.unshift [[::Rack::Protection, { use: :authenticity_token }], nil]
@ -123,8 +159,18 @@ module Sidekiq
secret = SecureRandom.hex(64)
end
middlewares.unshift [[::Rack::Session::Cookie, { secret: secret }], nil]
options = { secret: secret }
options = options.merge(sessions.to_hash) if sessions.respond_to? :to_hash
middlewares.unshift [[::Rack::Session::Cookie, options], nil]
end
end
def build
build_sessions
middlewares = self.middlewares
klass = self.class
::Rack::Builder.new do
%w(stylesheets javascripts images).each do |asset_dir|

View file

@ -663,4 +663,64 @@ class TestWeb < Sidekiq::Test
assert_equal 'nicehost.org', session_options[:host]
end
end
describe 'sidekiq web sessions options' do
include Rack::Test::Methods
describe 'using #disable' do
def app
app = Sidekiq::Web.new
app.disable(:sessions)
app
end
it "doesn't create sessions" do
get '/'
assert_nil last_request.env['rack.session']
end
end
describe 'using #set with false argument' do
def app
app = Sidekiq::Web.new
app.set(:sessions, false)
app
end
it "doesn't create sessions" do
get '/'
assert_nil last_request.env['rack.session']
end
end
describe 'using #set with an hash' do
def app
app = Sidekiq::Web.new
app.set(:sessions, { domain: :all })
app
end
it "creates sessions" do
get '/'
refute_nil last_request.env['rack.session']
refute_empty last_request.env['rack.session'].options
assert_equal :all, last_request.env['rack.session'].options[:domain]
end
end
describe 'using #enable' do
def app
app = Sidekiq::Web.new
app.enable(:sessions)
app
end
it "creates sessions" do
get '/'
refute_nil last_request.env['rack.session']
refute_empty last_request.env['rack.session'].options
refute_nil last_request.env['rack.session'].options[:secret]
end
end
end
end