Class: Rack::Saml::Session

Inherits:
Object
  • Object
show all
Defined in:
lib/rack/saml.rb

Constant Summary collapse

'_rack_saml'

Instance Method Summary collapse

Constructor Details

#initialize(env) ⇒ Session

Returns a new instance of Session.



75
76
77
78
79
80
81
82
83
84
85
86
# 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

Instance Method Details

#envObject



120
121
122
# File 'lib/rack/saml.rb', line 120

def env
  @session['saml_res.session']['env']
end

#finish(type) ⇒ Object



116
117
118
# File 'lib/rack/saml.rb', line 116

def finish(type)
  @session["#{type}.session"] = {}
end

#generate_sid(length = 32) ⇒ Object



88
89
90
# File 'lib/rack/saml.rb', line 88

def generate_sid(length = 32)
  SecureRandom.hex(length)
end

#get_sid(type) ⇒ Object



92
93
94
# File 'lib/rack/saml.rb', line 92

def get_sid(type)
  @session["#{type}.session"]['sid']
end

#is_valid?(type, sid = nil) ⇒ Boolean

Returns:

  • (Boolean)


124
125
126
127
128
129
130
131
132
133
134
135
136
137
# 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) ⇒ Object



96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
# 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