From af13c423221bec074e8f17bf0cc77ecc9e0c98c6 Mon Sep 17 00:00:00 2001 From: Tom Hughes Date: Wed, 22 Feb 2012 22:28:48 +0000 Subject: [PATCH] Refactor session persistence code --- app/controllers/application_controller.rb | 1 + config/initializers/session_persistence.rb | 3 - lib/session_persistence.rb | 55 +++++++++++++++++++ lib/session_persistence/MIT_LICENSE | 20 ------- lib/session_persistence/README.rdoc | 40 -------------- .../session_persistence.rb | 28 ---------- 6 files changed, 56 insertions(+), 91 deletions(-) delete mode 100644 config/initializers/session_persistence.rb create mode 100644 lib/session_persistence.rb delete mode 100644 lib/session_persistence/MIT_LICENSE delete mode 100644 lib/session_persistence/README.rdoc delete mode 100644 lib/session_persistence/session_persistence.rb diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 3d3c11d79..ea5d450a4 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -1,4 +1,5 @@ class ApplicationController < ActionController::Base + include SessionPersistence protect_from_forgery diff --git a/config/initializers/session_persistence.rb b/config/initializers/session_persistence.rb deleted file mode 100644 index bb6fb3575..000000000 --- a/config/initializers/session_persistence.rb +++ /dev/null @@ -1,3 +0,0 @@ -require "session_persistence/session_persistence" -ActionController::Base.class_eval { include SessionPersistence } -ActionController::Base.after_filter :_persist_session diff --git a/lib/session_persistence.rb b/lib/session_persistence.rb new file mode 100644 index 000000000..7d45d1fc4 --- /dev/null +++ b/lib/session_persistence.rb @@ -0,0 +1,55 @@ +# Copyright (c) 2010 August Lilleaas +# +# Permission is hereby granted, free of charge, to any person obtaining +# a copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, +# distribute, sublicense, and/or sell copies of the Software, and to +# permit persons to whom the Software is furnished to do so, subject to +# the following conditions: +# +# The above copyright notice and this permission notice shall be +# included in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +module SessionPersistence + private + + # Install filter when we are included + def self.included(controller) + controller.after_filter :persist_session + end + + # Override this method if you don't want to use session[:_remember_for]. + def session_persistence_key + :_remember_for + end + + # Persist the session. + # + # session_expires_after 1.hour + # session_expires_after 2.weeks + def session_expires_after(seconds) + session[session_persistence_key] = seconds + end + + # Expire the session. + def session_expires_automatically + session.delete(session_persistence_key) + request.session_options[:renew] = true + end + + # Filter callback + def persist_session + if session[session_persistence_key] + request.session_options[:expire_after] = session[session_persistence_key] + end + end +end diff --git a/lib/session_persistence/MIT_LICENSE b/lib/session_persistence/MIT_LICENSE deleted file mode 100644 index 844852952..000000000 --- a/lib/session_persistence/MIT_LICENSE +++ /dev/null @@ -1,20 +0,0 @@ -Copyright (c) 2010 August Lilleaas - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/lib/session_persistence/README.rdoc b/lib/session_persistence/README.rdoc deleted file mode 100644 index a8eb059da..000000000 --- a/lib/session_persistence/README.rdoc +++ /dev/null @@ -1,40 +0,0 @@ -= Session Persistence - -Rails 3 plugin that lets you set how long you want your session to be persisted/remembered. - - session_expires_after 2.weeks - session_expires_automatically # also aliased to expire_session - -The timespan will reset on every request. If you set it to 2 weeks, and the user returns after 1 week, the session will be refreshed and last 2 weeks again. If the user returns after 3 weeks, the session will be reset. - -A call to session_expires_automatically will return to a normal automatical expiry cookie, that will expire when the browser is closed. - -Note: I haven't tested the plugin with memcache session storage, but it should work there as well. - -= Usage - -Here's an example sessions controller in a Rails 3 application. - - class SessionsController < ApplicationController - def create - session_expires_after 2.weeks if params[:remember_me] - - # ..normal auth goes here.. - # for example - user = User.authenticate(params[:username], params[:password]) - if user - session[:user] = user.id - else - # .. - end - end - - def destroy - session_expires_automatically - - # ..unauthorize here.. - # for example - session[:user] = nil - redirect_to root_path - end - end \ No newline at end of file diff --git a/lib/session_persistence/session_persistence.rb b/lib/session_persistence/session_persistence.rb deleted file mode 100644 index 7bb51bc46..000000000 --- a/lib/session_persistence/session_persistence.rb +++ /dev/null @@ -1,28 +0,0 @@ -module SessionPersistence - private - - # Override this method if you don't want to use session[:_remember_for]. - def session_persistence_key - :_remember_for - end - - # Persist the session. - # - # session_expires_after 1.hour - # session_expires_after 2.weeks - def session_expires_after(seconds) - session[session_persistence_key] = seconds - end - - # Expire the session. - def session_expires_automatically - session.delete(session_persistence_key) - end - alias_method :expire_session, :session_expires_automatically - - def _persist_session - if session[session_persistence_key] - env["rack.session.options"][:expire_after] = session[session_persistence_key] - end - end -end -- 2.43.2