global_session 1.0.17 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/global_session.gemspec +2 -2
- data/lib/global_session/directory.rb +3 -1
- data/lib/global_session/rack.rb +40 -21
- metadata +4 -4
data/global_session.gemspec
CHANGED
@@ -7,8 +7,8 @@ spec = Gem::Specification.new do |s|
|
|
7
7
|
s.required_ruby_version = Gem::Requirement.new(">= 1.8.7")
|
8
8
|
|
9
9
|
s.name = 'global_session'
|
10
|
-
s.version = '1.0
|
11
|
-
s.date = '2012-
|
10
|
+
s.version = '1.1.0'
|
11
|
+
s.date = '2012-11-01'
|
12
12
|
|
13
13
|
s.authors = ['Tony Spataro']
|
14
14
|
s.email = 'support@rightscale.com'
|
@@ -158,7 +158,9 @@ module GlobalSession
|
|
158
158
|
# current global_session object. This callback could help application to get data related
|
159
159
|
# to the previous global session (old_global_session_id), and put it to new global session
|
160
160
|
# (new_global_sesion_id)
|
161
|
-
|
161
|
+
#
|
162
|
+
# @deprecated this method will be removed with GlobalSession 2.0; do not use!
|
163
|
+
#
|
162
164
|
# invalidated_uuid(String):: Invalidated Global session UUID
|
163
165
|
# new_uuid(String):: Newly created Global session UUID
|
164
166
|
# === Return
|
data/lib/global_session/rack.rb
CHANGED
@@ -27,6 +27,8 @@ module GlobalSession
|
|
27
27
|
# Global session middleware. Note: this class relies on
|
28
28
|
# Rack::Cookies being used higher up in the chain.
|
29
29
|
class Middleware
|
30
|
+
LOCAL_SESSION_KEY = "rack.session".freeze
|
31
|
+
|
30
32
|
# Make a new global session.
|
31
33
|
#
|
32
34
|
# The optional block here controls an alternate ticket retrieval
|
@@ -146,29 +148,30 @@ module GlobalSession
|
|
146
148
|
return unless env['global_session'].directory.local_authority_name
|
147
149
|
return if env['global_session.req.update'] == false
|
148
150
|
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
value = global_session.to_s
|
159
|
-
expires = @configuration['ephemeral'] ? nil : global_session.expired_at
|
160
|
-
unless env['rack.cookies'].has_key?(@cookie_name) && env['rack.cookies'][@cookie_name] == value
|
161
|
-
env['rack.cookies'][@cookie_name] =
|
162
|
-
{:value => value, :domain => domain, :expires => expires, :httponly=>true}
|
163
|
-
end
|
164
|
-
else
|
165
|
-
# write an empty cookie
|
166
|
-
env['rack.cookies'][@cookie_name] = {:value => nil, :domain => domain, :expires => Time.at(0)}
|
151
|
+
domain = @configuration['cookie']['domain'] || env['SERVER_NAME']
|
152
|
+
session = env['global_session']
|
153
|
+
|
154
|
+
if session
|
155
|
+
unless session.valid?
|
156
|
+
old_session = session
|
157
|
+
session = @directory.create_session
|
158
|
+
perform_invalidation_callbacks(env, old_session, session)
|
159
|
+
env['global_session'] = session
|
167
160
|
end
|
168
|
-
|
169
|
-
|
170
|
-
|
161
|
+
|
162
|
+
value = session.to_s
|
163
|
+
expires = @configuration['ephemeral'] ? nil : session.expired_at
|
164
|
+
unless env['rack.cookies'][@cookie_name] == value
|
165
|
+
env['rack.cookies'][@cookie_name] =
|
166
|
+
{:value => value, :domain => domain, :expires => expires, :httponly=>true}
|
167
|
+
end
|
168
|
+
else
|
169
|
+
# write an empty cookie
|
170
|
+
env['rack.cookies'][@cookie_name] = {:value => nil, :domain => domain, :expires => Time.at(0)}
|
171
171
|
end
|
172
|
+
rescue Exception => e
|
173
|
+
wipe_cookie(env)
|
174
|
+
raise e
|
172
175
|
end
|
173
176
|
|
174
177
|
# Delete the global session cookie from the cookie jar.
|
@@ -207,6 +210,22 @@ module GlobalSession
|
|
207
210
|
raise e
|
208
211
|
end
|
209
212
|
end
|
213
|
+
|
214
|
+
# Perform callbacks to directory and/or local session
|
215
|
+
# informing them that this session has been invalidated.
|
216
|
+
#
|
217
|
+
# === Parameters
|
218
|
+
# env(Hash):: the rack environment
|
219
|
+
# old_session(GlobalSession):: the now-invalidated session
|
220
|
+
# new_session(GlobalSession):: the new session that will be sent to the client
|
221
|
+
def perform_invalidation_callbacks(env, old_session, new_session)
|
222
|
+
@directory.session_invalidated(old_session.id, new_session.id)
|
223
|
+
if (local_session = env[LOCAL_SESSION_KEY]) && local_session.respond_to?(:rename!)
|
224
|
+
local_session.rename!(old_session, new_session)
|
225
|
+
end
|
226
|
+
|
227
|
+
true
|
228
|
+
end
|
210
229
|
end
|
211
230
|
end
|
212
231
|
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: global_session
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 19
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 1
|
8
|
+
- 1
|
8
9
|
- 0
|
9
|
-
|
10
|
-
version: 1.0.17
|
10
|
+
version: 1.1.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Tony Spataro
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2012-
|
18
|
+
date: 2012-11-01 00:00:00 -07:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|