has_global_session 0.8.6 → 0.8.7

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.
@@ -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 = 'has_global_session'
10
- s.version = '0.8.6'
11
- s.date = '2010-06-17'
10
+ s.version = '0.8.7'
11
+ s.date = '2010-06-28'
12
12
 
13
13
  s.authors = ['Tony Spataro']
14
14
  s.email = 'code@tracker.xeger.net'
@@ -35,9 +35,5 @@ module HasGlobalSession
35
35
  def report_invalid_session(uuid, expired_at)
36
36
  true
37
37
  end
38
-
39
- def report_exception(exception, cookie=nil)
40
- true
41
- end
42
38
  end
43
39
  end
@@ -1,8 +1,25 @@
1
1
  module HasGlobalSession
2
2
  module ActionControllerInstanceMethods
3
+ def self.included(base)
4
+ if Configuration['integrated']
5
+ base.alias_method_chain :session, :global_session
6
+ end
7
+ end
8
+
3
9
  def global_session
4
- return @global_session if @global_session
10
+ @global_session
11
+ end
12
+
13
+ def session_with_global_session
14
+ if global_session
15
+ @integrated_session ||= IntegratedSession.new(session_without_global_session, global_session)
16
+ return @integrated_session
17
+ else
18
+ return session_without_global_session
19
+ end
20
+ end
5
21
 
22
+ def global_session_read_cookie
6
23
  if (klass = Configuration['directory'])
7
24
  klass = klass.constantize
8
25
  else
@@ -10,49 +27,45 @@ module HasGlobalSession
10
27
  end
11
28
 
12
29
  directory = klass.new(File.join(RAILS_ROOT, 'config', 'authorities'))
13
- cookie_name = Configuration['cookie']['name']
30
+ cookie_name = Configuration['cookie']['name']
14
31
  cookie = cookies[cookie_name]
15
32
 
16
33
  begin
17
34
  #unserialize the global session from the cookie, or
18
35
  #initialize a new global session if cookie == nil
19
36
  @global_session = GlobalSession.new(directory, cookie)
37
+ return true
20
38
  rescue Exception => e
21
- #silently recover from any error by initializing a new global session;
22
- #the new session will be unauthenticated.
23
- directory.report_exception(e, cookie)
39
+ #silently recover from any error by initializing a new global session
24
40
  @global_session = GlobalSession.new(directory)
25
- end
26
- end
27
-
28
- if Configuration['integrated']
29
- def session
30
- @integrated_session ||= IntegratedSession.new(super, global_session)
31
- return @integrated_session
41
+ global_session_update_cookie
42
+ #give the Rails app a chance to handle the exception
43
+ raise e
32
44
  end
33
45
  end
34
46
 
35
47
  def global_session_update_cookie
36
- return unless @global_session
37
48
  name = Configuration['cookie']['name']
38
49
  domain = Configuration['cookie']['domain']
39
50
 
40
- #Default options for invalid session
41
- options = {:value => nil,
42
- :domain => domain,
43
- :expires => Time.at(0)}
44
-
45
- if @global_session.valid?
46
- begin
47
- value = @global_session.to_s
48
- expires = Configuration['ephemeral'] ? nil : @global_session.expired_at
49
- options.merge!(:value => value, :expires => expires)
50
- rescue Exception => e
51
- logger.error "#{e.class.name}: #{e.message} (at #{e.backtrace[0]})" if logger
51
+ begin
52
+ if @global_session && @global_session.valid?
53
+ value = @global_session.to_s
54
+ expires = Configuration['ephemeral'] ? nil : @global_session.expired_at
55
+
56
+ unless (cookies[name] == value)
57
+ #Update the cookie only if its value has changed
58
+ cookies[name] = {:value => value, :domain=>domain, :expires=>expires}
59
+ end
52
60
  end
53
- end
54
61
 
55
- cookies[name] = options unless (cookies[name] == options[:value])
62
+ raise HasGlobalSession::InvalidSession, "buahahaha" if params[:moo]
63
+ rescue Exception => e
64
+ #silently recover from any error by wiping the cookie
65
+ cookies[name] = {:value=>nil, :domain=>domain, :expires=>Time.at(0)}
66
+ #give the Rails app a chance to handle the exception
67
+ raise e
68
+ end
56
69
  end
57
70
 
58
71
  def log_processing
data/rails/init.rb CHANGED
@@ -15,6 +15,7 @@ if File.exist?(config_file)
15
15
  class ActionController::Base
16
16
  def self.has_global_session
17
17
  include HasGlobalSession::ActionControllerInstanceMethods
18
+ before_filter :global_session_read_cookie
18
19
  after_filter :global_session_update_cookie
19
20
  end
20
21
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: has_global_session
3
3
  version: !ruby/object:Gem::Version
4
- hash: 51
4
+ hash: 49
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 8
9
- - 6
10
- version: 0.8.6
9
+ - 7
10
+ version: 0.8.7
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: 2010-06-17 00:00:00 -07:00
18
+ date: 2010-06-28 00:00:00 -07:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency