module RackCAS::ActiveRecordStore

Public Class Methods

destroy_session_by_cas_ticket(cas_ticket) click to toggle source
# File lib/rack-cas/session_store/active_record.rb, line 6
def self.destroy_session_by_cas_ticket(cas_ticket)
  affected = Session.where(cas_ticket: cas_ticket).delete_all
  affected == 1
end
prune(after = nil) click to toggle source
# File lib/rack-cas/session_store/active_record.rb, line 11
def self.prune(after = nil)
  after ||= Time.now - 2592000 # 30 days ago
  Session.where('updated_at < ?', after).delete_all
end

Private Instance Methods

delete_session(req, sid, options) click to toggle source

Rack 2.0 method

# File lib/rack-cas/session_store/active_record.rb, line 52
def delete_session(req, sid, options)
  Session.where(session_id: sid).delete_all

  options[:drop] ? nil : generate_sid
end
destroy_session(env, sid, options) click to toggle source

Rack 1.* method

# File lib/rack-cas/session_store/active_record.rb, line 67
def destroy_session(env, sid, options) # rack 1.x compatibilty
  delete_session(Rack::Request.new(env), sid, options)
end
find_session(env, sid) click to toggle source

Rack 2.0 method

# File lib/rack-cas/session_store/active_record.rb, line 19
def find_session(env, sid)
  if sid.nil?
    sid = generate_sid
    data = nil
  else
    unless session = Session.where(session_id: sid).first
      session = {}
      # force generation of new sid since there is no associated session
      sid = generate_sid
    end
    data = unpack(session['data'])
  end

  [sid, data]
end
Also aliased as: get_session
get_session(env, sid)

Rack 1.* method

Alias for: find_session
pack(data) click to toggle source
# File lib/rack-cas/session_store/active_record.rb, line 71
def pack(data)
  ::Base64.encode64(Marshal.dump(data)) if data
end
set_session(env, sid, session_data, options) click to toggle source

Rack 1.* method

# File lib/rack-cas/session_store/active_record.rb, line 62
def set_session(env, sid, session_data, options) # rack 1.x compatibilty
  write_session(Rack::Request.new(env), sid, session_data, options)
end
unpack(data) click to toggle source
# File lib/rack-cas/session_store/active_record.rb, line 75
def unpack(data)
  Marshal.load(::Base64.decode64(data)) if data
end
write_session(req, sid, session_data, options) click to toggle source

Rack 2.0 method

# File lib/rack-cas/session_store/active_record.rb, line 36
def write_session(req, sid, session_data, options)
  cas_ticket = (session_data['cas']['ticket'] unless session_data['cas'].nil?)

  session = if ActiveRecord.respond_to?(:version) && ActiveRecord.version >= Gem::Version.new('4.0.0')
    Session.where(session_id: sid).first_or_initialize
  else
    Session.find_or_initialize_by_session_id(sid)
  end
  session.data = pack(session_data)
  session.cas_ticket = cas_ticket
  success = session.save

  success ? session.session_id : false
end