global_session 3.0.4 → 3.0.5

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/README.rdoc CHANGED
@@ -9,7 +9,12 @@ In other words: it glues your semi-related Web apps together so they share the
9
9
  same bits of session state. This is done by putting the session itself into
10
10
  cookies.
11
11
 
12
- Maintained by the RightScale Teal Team
12
+ Maintained by
13
+ - [Sapphire Team](https://wookiee.rightscale.com/display/rightscale/Meet+the+Sapphire+Team)
14
+
15
+ Merge to master whitelist
16
+ - @tony-spataro-rs
17
+ - @ryanwilliamson
13
18
 
14
19
  == What Is It Not?
15
20
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 3.0.4
1
+ 3.0.5
@@ -2,16 +2,18 @@
2
2
  # DO NOT EDIT THIS FILE DIRECTLY
3
3
  # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
4
  # -*- encoding: utf-8 -*-
5
+ # stub: global_session 3.0.5 ruby lib
5
6
 
6
7
  Gem::Specification.new do |s|
7
- s.name = %q{global_session}
8
- s.version = "3.0.4"
8
+ s.name = "global_session"
9
+ s.version = "3.0.5"
9
10
 
10
11
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
12
+ s.require_paths = ["lib"]
11
13
  s.authors = ["Tony Spataro"]
12
- s.date = %q{2014-03-31}
13
- s.description = %q{This Rack middleware allows several web apps in an authentication domain to share session state, facilitating single sign-on in a distributed web app. It only provides session sharing and does not concern itself with authentication or replication of the user database.}
14
- s.email = %q{support@rightscale.com}
14
+ s.date = "2014-11-12"
15
+ s.description = "This Rack middleware allows several web apps in an authentication domain to share session state, facilitating single sign-on in a distributed web app. It only provides session sharing and does not concern itself with authentication or replication of the user database."
16
+ s.email = "support@rightscale.com"
15
17
  s.extra_rdoc_files = [
16
18
  "LICENSE",
17
19
  "README.rdoc"
@@ -44,20 +46,18 @@ Gem::Specification.new do |s|
44
46
  "rails_generators/global_session_authority/USAGE",
45
47
  "rails_generators/global_session_authority/global_session_authority_generator.rb"
46
48
  ]
47
- s.homepage = %q{https://github.com/rightscale/global_session}
49
+ s.homepage = "https://github.com/rightscale/global_session"
48
50
  s.licenses = ["MIT"]
49
- s.require_paths = ["lib"]
50
- s.rubygems_version = %q{1.3.7}
51
- s.summary = %q{Secure single-domain session sharing plugin for Rack and Rails.}
51
+ s.rubygems_version = "2.2.0"
52
+ s.summary = "Secure single-domain session sharing plugin for Rack and Rails."
52
53
 
53
54
  if s.respond_to? :specification_version then
54
- current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
55
- s.specification_version = 3
55
+ s.specification_version = 4
56
56
 
57
57
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
58
58
  s.add_runtime_dependency(%q<json>, ["~> 1.4"])
59
59
  s.add_runtime_dependency(%q<rack-contrib>, ["~> 1.0"])
60
- s.add_runtime_dependency(%q<right_support>, [">= 2.8.2", "< 3.0"])
60
+ s.add_runtime_dependency(%q<right_support>, ["< 3.0", ">= 2.8.2"])
61
61
  s.add_runtime_dependency(%q<simple_uuid>, [">= 0.2.0"])
62
62
  s.add_development_dependency(%q<cucumber>, ["~> 1.0"])
63
63
  s.add_development_dependency(%q<debugger>, ["~> 1.5"])
@@ -72,7 +72,7 @@ Gem::Specification.new do |s|
72
72
  else
73
73
  s.add_dependency(%q<json>, ["~> 1.4"])
74
74
  s.add_dependency(%q<rack-contrib>, ["~> 1.0"])
75
- s.add_dependency(%q<right_support>, [">= 2.8.2", "< 3.0"])
75
+ s.add_dependency(%q<right_support>, ["< 3.0", ">= 2.8.2"])
76
76
  s.add_dependency(%q<simple_uuid>, [">= 0.2.0"])
77
77
  s.add_dependency(%q<cucumber>, ["~> 1.0"])
78
78
  s.add_dependency(%q<debugger>, ["~> 1.5"])
@@ -88,7 +88,7 @@ Gem::Specification.new do |s|
88
88
  else
89
89
  s.add_dependency(%q<json>, ["~> 1.4"])
90
90
  s.add_dependency(%q<rack-contrib>, ["~> 1.0"])
91
- s.add_dependency(%q<right_support>, [">= 2.8.2", "< 3.0"])
91
+ s.add_dependency(%q<right_support>, ["< 3.0", ">= 2.8.2"])
92
92
  s.add_dependency(%q<simple_uuid>, [">= 0.2.0"])
93
93
  s.add_dependency(%q<cucumber>, ["~> 1.0"])
94
94
  s.add_dependency(%q<debugger>, ["~> 1.5"])
@@ -54,6 +54,7 @@ module GlobalSession
54
54
  super(message)
55
55
  else
56
56
  super("(data[0..4]: '%s') - %s" % [cookie[0..4], message])
57
+ @cookie = cookie
57
58
  end
58
59
  end
59
60
  end
@@ -25,11 +25,13 @@ require 'global_session/session/v3'
25
25
  # by the different versions; it is responsible for detecting the version of
26
26
  # a given cookie, then instantiating a suitable session object.
27
27
  module GlobalSession::Session
28
- # Decode a global session cookie without
28
+ # Decode a global session cookie without checking signature or expiration. Good for debugging.
29
29
  def self.decode_cookie(cookie)
30
30
  guess_version(cookie).decode_cookie(cookie)
31
31
  end
32
32
 
33
+ # Decode a global session cookie. Use a heuristic to determine the version.
34
+ # @raise [GlobalSession::MalformedCookie] if the cookie is not a valid serialized global session
33
35
  def self.new(directory, cookie=nil, valid_signature_digest=nil)
34
36
  guess_version(cookie).new(directory, cookie)
35
37
  end
@@ -112,14 +112,19 @@ module GlobalSession::Session
112
112
  # secure attributes have changed since the session was instantiated, compute
113
113
  # a fresh RSA signature.
114
114
  #
115
- # === Return
116
- # cookie(String):: The B64cookie-encoded JSON-serialized global session
115
+ # @return [String] a B64cookie-encoded JSON-serialized global session
116
+ # @raise [GlobalSession::UnserializableType] if the attributes hash contains
117
117
  def to_s
118
118
  if @cookie && !@dirty_insecure && !@dirty_secure
119
119
  #use cached cookie if nothing has changed
120
120
  return @cookie
121
121
  end
122
122
 
123
+ unless serializable?(@signed) && serializable?(@insecure)
124
+ raise GlobalSession::UnserializableType,
125
+ "Attributes hash contains non-String keys, cannot be cleanly marshalled"
126
+ end
127
+
123
128
  hash = {'v' => 3,
124
129
  'id' => @id, 'a' => @authority,
125
130
  'tc' => @created_at.to_i, 'te' => @expired_at.to_i,
@@ -369,5 +374,23 @@ module GlobalSession::Session
369
374
  'dx' => array[6],
370
375
  }
371
376
  end
377
+
378
+ # Determine whether an object can be cleanly round-tripped to JSON
379
+ # @param [Object] obj
380
+ # @return [Boolean]
381
+ def serializable?(obj)
382
+ case obj
383
+ when Numeric, String, TrueClass, FalseClass, NilClass, Symbol
384
+ true
385
+ when Array
386
+ obj.each { |e| serializable?(e) }
387
+ when Hash
388
+ obj.all? do |k, v|
389
+ k.is_a?(String) && serializable?(v)
390
+ end
391
+ else
392
+ false
393
+ end
394
+ end
372
395
  end
373
396
  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: 15
5
- prerelease: false
4
+ hash: 13
5
+ prerelease:
6
6
  segments:
7
7
  - 3
8
8
  - 0
9
- - 4
10
- version: 3.0.4
9
+ - 5
10
+ version: 3.0.5
11
11
  platform: ruby
12
12
  authors:
13
13
  - Tony Spataro
@@ -15,10 +15,12 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2014-03-31 00:00:00 -07:00
19
- default_executable:
18
+ date: 2014-11-12 00:00:00 Z
20
19
  dependencies:
21
20
  - !ruby/object:Gem::Dependency
21
+ prerelease: false
22
+ name: json
23
+ type: :runtime
22
24
  version_requirements: &id001 !ruby/object:Gem::Requirement
23
25
  none: false
24
26
  requirements:
@@ -29,11 +31,11 @@ dependencies:
29
31
  - 1
30
32
  - 4
31
33
  version: "1.4"
32
- name: json
33
34
  requirement: *id001
35
+ - !ruby/object:Gem::Dependency
34
36
  prerelease: false
37
+ name: rack-contrib
35
38
  type: :runtime
36
- - !ruby/object:Gem::Dependency
37
39
  version_requirements: &id002 !ruby/object:Gem::Requirement
38
40
  none: false
39
41
  requirements:
@@ -44,14 +46,21 @@ dependencies:
44
46
  - 1
45
47
  - 0
46
48
  version: "1.0"
47
- name: rack-contrib
48
49
  requirement: *id002
50
+ - !ruby/object:Gem::Dependency
49
51
  prerelease: false
52
+ name: right_support
50
53
  type: :runtime
51
- - !ruby/object:Gem::Dependency
52
54
  version_requirements: &id003 !ruby/object:Gem::Requirement
53
55
  none: false
54
56
  requirements:
57
+ - - <
58
+ - !ruby/object:Gem::Version
59
+ hash: 7
60
+ segments:
61
+ - 3
62
+ - 0
63
+ version: "3.0"
55
64
  - - ">="
56
65
  - !ruby/object:Gem::Version
57
66
  hash: 43
@@ -60,18 +69,11 @@ dependencies:
60
69
  - 8
61
70
  - 2
62
71
  version: 2.8.2
63
- - - <
64
- - !ruby/object:Gem::Version
65
- hash: 7
66
- segments:
67
- - 3
68
- - 0
69
- version: "3.0"
70
- name: right_support
71
72
  requirement: *id003
73
+ - !ruby/object:Gem::Dependency
72
74
  prerelease: false
75
+ name: simple_uuid
73
76
  type: :runtime
74
- - !ruby/object:Gem::Dependency
75
77
  version_requirements: &id004 !ruby/object:Gem::Requirement
76
78
  none: false
77
79
  requirements:
@@ -83,11 +85,11 @@ dependencies:
83
85
  - 2
84
86
  - 0
85
87
  version: 0.2.0
86
- name: simple_uuid
87
88
  requirement: *id004
88
- prerelease: false
89
- type: :runtime
90
89
  - !ruby/object:Gem::Dependency
90
+ prerelease: false
91
+ name: cucumber
92
+ type: :development
91
93
  version_requirements: &id005 !ruby/object:Gem::Requirement
92
94
  none: false
93
95
  requirements:
@@ -98,11 +100,11 @@ dependencies:
98
100
  - 1
99
101
  - 0
100
102
  version: "1.0"
101
- name: cucumber
102
103
  requirement: *id005
104
+ - !ruby/object:Gem::Dependency
103
105
  prerelease: false
106
+ name: debugger
104
107
  type: :development
105
- - !ruby/object:Gem::Dependency
106
108
  version_requirements: &id006 !ruby/object:Gem::Requirement
107
109
  none: false
108
110
  requirements:
@@ -113,11 +115,11 @@ dependencies:
113
115
  - 1
114
116
  - 5
115
117
  version: "1.5"
116
- name: debugger
117
118
  requirement: *id006
119
+ - !ruby/object:Gem::Dependency
118
120
  prerelease: false
121
+ name: flexmock
119
122
  type: :development
120
- - !ruby/object:Gem::Dependency
121
123
  version_requirements: &id007 !ruby/object:Gem::Requirement
122
124
  none: false
123
125
  requirements:
@@ -128,11 +130,11 @@ dependencies:
128
130
  - 0
129
131
  - 8
130
132
  version: "0.8"
131
- name: flexmock
132
133
  requirement: *id007
134
+ - !ruby/object:Gem::Dependency
133
135
  prerelease: false
136
+ name: httpclient
134
137
  type: :development
135
- - !ruby/object:Gem::Dependency
136
138
  version_requirements: &id008 !ruby/object:Gem::Requirement
137
139
  none: false
138
140
  requirements:
@@ -142,11 +144,11 @@ dependencies:
142
144
  segments:
143
145
  - 0
144
146
  version: "0"
145
- name: httpclient
146
147
  requirement: *id008
148
+ - !ruby/object:Gem::Dependency
147
149
  prerelease: false
150
+ name: jeweler
148
151
  type: :development
149
- - !ruby/object:Gem::Dependency
150
152
  version_requirements: &id009 !ruby/object:Gem::Requirement
151
153
  none: false
152
154
  requirements:
@@ -158,11 +160,11 @@ dependencies:
158
160
  - 8
159
161
  - 3
160
162
  version: 1.8.3
161
- name: jeweler
162
163
  requirement: *id009
164
+ - !ruby/object:Gem::Dependency
163
165
  prerelease: false
166
+ name: msgpack
164
167
  type: :development
165
- - !ruby/object:Gem::Dependency
166
168
  version_requirements: &id010 !ruby/object:Gem::Requirement
167
169
  none: false
168
170
  requirements:
@@ -173,11 +175,11 @@ dependencies:
173
175
  - 0
174
176
  - 4
175
177
  version: "0.4"
176
- name: msgpack
177
178
  requirement: *id010
179
+ - !ruby/object:Gem::Dependency
178
180
  prerelease: false
181
+ name: rake
179
182
  type: :development
180
- - !ruby/object:Gem::Dependency
181
183
  version_requirements: &id011 !ruby/object:Gem::Requirement
182
184
  none: false
183
185
  requirements:
@@ -188,11 +190,11 @@ dependencies:
188
190
  - 0
189
191
  - 8
190
192
  version: "0.8"
191
- name: rake
192
193
  requirement: *id011
194
+ - !ruby/object:Gem::Dependency
193
195
  prerelease: false
196
+ name: right_develop
194
197
  type: :development
195
- - !ruby/object:Gem::Dependency
196
198
  version_requirements: &id012 !ruby/object:Gem::Requirement
197
199
  none: false
198
200
  requirements:
@@ -203,11 +205,11 @@ dependencies:
203
205
  - 1
204
206
  - 2
205
207
  version: "1.2"
206
- name: right_develop
207
208
  requirement: *id012
209
+ - !ruby/object:Gem::Dependency
208
210
  prerelease: false
211
+ name: rspec
209
212
  type: :development
210
- - !ruby/object:Gem::Dependency
211
213
  version_requirements: &id013 !ruby/object:Gem::Requirement
212
214
  none: false
213
215
  requirements:
@@ -218,11 +220,11 @@ dependencies:
218
220
  - 1
219
221
  - 3
220
222
  version: "1.3"
221
- name: rspec
222
223
  requirement: *id013
224
+ - !ruby/object:Gem::Dependency
223
225
  prerelease: false
226
+ name: ruby-debug
224
227
  type: :development
225
- - !ruby/object:Gem::Dependency
226
228
  version_requirements: &id014 !ruby/object:Gem::Requirement
227
229
  none: false
228
230
  requirements:
@@ -233,10 +235,7 @@ dependencies:
233
235
  - 0
234
236
  - 10
235
237
  version: "0.10"
236
- name: ruby-debug
237
238
  requirement: *id014
238
- prerelease: false
239
- type: :development
240
239
  description: This Rack middleware allows several web apps in an authentication domain to share session state, facilitating single sign-on in a distributed web app. It only provides session sharing and does not concern itself with authentication or replication of the user database.
241
240
  email: support@rightscale.com
242
241
  executables: []
@@ -273,7 +272,6 @@ files:
273
272
  - rails_generators/global_session/templates/global_session.yml.erb
274
273
  - rails_generators/global_session_authority/USAGE
275
274
  - rails_generators/global_session_authority/global_session_authority_generator.rb
276
- has_rdoc: true
277
275
  homepage: https://github.com/rightscale/global_session
278
276
  licenses:
279
277
  - MIT
@@ -303,7 +301,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
303
301
  requirements: []
304
302
 
305
303
  rubyforge_project:
306
- rubygems_version: 1.3.7
304
+ rubygems_version: 1.8.15
307
305
  signing_key:
308
306
  specification_version: 3
309
307
  summary: Secure single-domain session sharing plugin for Rack and Rails.