class Challah::Session
Attributes
ip[RW]
params[R]
persist[RW]
request[R]
return_to[RW]
store[RW]
user[RW]
user_model[R]
Public Class Methods
create(user_or_user_id, request = nil, params = nil, user_model = nil)
click to toggle source
Manually create a new Session
# File lib/challah/session.rb, line 112 def self.create(user_or_user_id, request = nil, params = nil, user_model = nil) if user_model.nil? user_model = Challah.user end session = Session.new(request, params, user_model) user_record = if user_model === user_or_user_id user_or_user_id else begin GlobalID::Locator.locate(user_or_user_id) rescue ActiveRecord::RecordNotFound nil end end if user_record and user_record.valid_session? session.user = user_record session.persist = true end session end
create!(user_or_user_id, request = nil, params = nil, user_model = nil)
click to toggle source
Manually create a session, and save it.
# File lib/challah/session.rb, line 138 def self.create!(user_or_user_id, request = nil, params = nil, user_model = nil) session = create(user_or_user_id, request, params, user_model) session.save session end
destroy()
click to toggle source
Clear out any existing sessions
# File lib/challah/session.rb, line 145 def self.destroy session = Session.find session.destroy if session session end
find(*args)
click to toggle source
Load any existing session from the session store
# File lib/challah/session.rb, line 152 def self.find(*args) session = Session.new(*args) session.find session end
new(request = nil, params = {}, user_model = nil)
click to toggle source
# File lib/challah/session.rb, line 9 def initialize(request = nil, params = {}, user_model = nil) @request = request @params = params || {} @user_model = user_model || Challah.user @store = Challah.options[:storage_class].new(self) end
Public Instance Methods
destroy()
click to toggle source
# File lib/challah/session.rb, line 16 def destroy self.store.destroy @valid = false @user = nil end
find()
click to toggle source
# File lib/challah/session.rb, line 23 def find self.read # If no session was found, try and authenticate valid? if @valid.nil? self.authenticate! end self end
inspect()
click to toggle source
# File lib/challah/session.rb, line 36 def inspect "#<Session:0x#{object_id.to_s(16)} valid=#{valid?} store=#{self.store.inspect} user=#{user_id || 'nil'}>" end
method_missing(sym, *args, &block)
click to toggle source
Allow for dynamic setting of instance variables. also allows for variable? to see if it was provided
Calls superclass method
# File lib/challah/session.rb, line 99 def method_missing(sym, *args, &block) if @params.has_key?(sym) return @params[sym] elsif sym.to_s =~ /^[a-z0-9_]*=$/ return @params[sym.to_s.sub(/^(.*?)=$/, '\1').to_sym] = args.shift elsif sym.to_s =~ /^[a-z0-9_]*\?$/ return !!@params[sym.to_s.sub(/^(.*?)\?$/, '\1').to_sym] end super(sym, *args, &block) end
persist?()
click to toggle source
# File lib/challah/session.rb, line 40 def persist? !!@persist end
read()
click to toggle source
# File lib/challah/session.rb, line 44 def read persistence_token, user_id = self.store.read return false if persistence_token.nil? or user_id.nil? store_user = nil begin store_user = GlobalID::Locator.locate(user_id) rescue ActiveRecord::RecordNotFound nil end if store_user and store_user.valid_session? and store_user.persistence_token == persistence_token if store_user.valid_session? self.user = store_user @valid = true end end self end
save()
click to toggle source
# File lib/challah/session.rb, line 66 def save return false unless valid? if self.user and persist? self.store.save(self.user.persistence_token, user_id) return true end false end
user_id()
click to toggle source
Id of the current user.
# File lib/challah/session.rb, line 78 def user_id @user_id ||= self.user ? self.user.to_global_id : nil end
username()
click to toggle source
# File lib/challah/session.rb, line 82 def username params[:username] || params[:email] || "" end
username?()
click to toggle source
# File lib/challah/session.rb, line 86 def username? !username.empty? end
valid?()
click to toggle source
Returns true if this session has been authenticated and is ready to save.
# File lib/challah/session.rb, line 91 def valid? return @valid if @valid != nil return true if self.user and self.user.valid_session? authenticate! end
Protected Instance Methods
authenticate!()
click to toggle source
Try and authenticate against the various auth techniques. If one technique works, then just exit and make the session active.
# File lib/challah/session.rb, line 162 def authenticate! Challah.techniques.values.each do |klass| technique = klass.new(self) technique.user_model = user_model if technique.respond_to?(:"user_model=") @user = technique.authenticate if @user @persist = technique.respond_to?(:persist?) ? technique.persist? : false break end end if @user # Only update user record if persistence is on for the technique. # Otherwise this builds up quick (one session for each API call) if @persist @user.successful_authentication!(ip) end return @valid = true end @valid = false end