class Rack::Saml::Session

Constants

Public Class Methods

new(env) click to toggle source
# File lib/rack/saml.rb, line 75
def initialize(env)
  @rack_session = env['rack.session']
  if @rack_session[RACK_SAML_COOKIE].nil?
    @session = @rack_session[RACK_SAML_COOKIE] = {
      'ds.session' => {},
      'saml_authreq.session' => {},
      'saml_res.session' => {'env' => {}}
    }
  else
    @session = @rack_session[RACK_SAML_COOKIE]
  end
end

Public Instance Methods

env() click to toggle source
# File lib/rack/saml.rb, line 120
def env
  @session['saml_res.session']['env']
end
finish(type) click to toggle source
# File lib/rack/saml.rb, line 116
def finish(type)
  @session["#{type}.session"] = {}
end
generate_sid(length = 32) click to toggle source
# File lib/rack/saml.rb, line 88
def generate_sid(length = 32)
  SecureRandom.hex(length)
end
get_sid(type) click to toggle source
# File lib/rack/saml.rb, line 92
def get_sid(type)
  @session["#{type}.session"]['sid']
end
is_valid?(type, sid = nil) click to toggle source
# File lib/rack/saml.rb, line 124
def is_valid?(type, sid = nil)
  session = @session["#{type}.session"]
  return false if session['sid'].nil? # no valid session
  if session['expires'].nil? # no expiration
    return true if sid.nil? # no sid check
    return true if session['sid'] == sid # sid check
  else
    if Time.now < Time.parse(session['expires']) # before expiration
      return true if sid.nil? # no sid check
      return true if session['sid'] == sid # sid check
    end
  end
  false
end
start(type, timeout = 300) click to toggle source
# File lib/rack/saml.rb, line 96
def start(type, timeout = 300)
  sid = nil
  if timeout.nil?
    period = Time.now + 300
  else
    period = Time.now + timeout
  end
  case type
  when 'ds'
    sid = generate_sid(4)
  when 'saml_authreq' 
    sid = generate_sid
  when 'saml_res'
    sid = generate_sid
  end
  @session["#{type}.session"]['sid'] = sid
  @session["#{type}.session"]['expires'] = period.to_s
  @session["#{type}.session"]
end