authlogic_crowd 0.2.3 → 0.2.4

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/.gitignore CHANGED
@@ -1,26 +1,27 @@
1
- ## MAC OS
2
- .DS_Store
3
-
4
- ## TEXTMATE
5
- *.tmproj
6
- tmtags
7
-
8
- ## EMACS
9
- *~
10
- \#*
11
- .\#*
12
-
13
- ## VIM
14
- *.swp
15
-
16
- ## PROJECT::GENERAL
17
- coverage
18
- rdoc
19
- doc
20
- pkg
21
- .bundle
22
- .idea
23
- .yardoc
24
-
25
- ## PROJECT::SPECIFIC
26
- Gemfile.lock
1
+ ## MAC OS
2
+ .DS_Store
3
+
4
+ ## TEXTMATE
5
+ *.tmproj
6
+ tmtags
7
+
8
+ ## EMACS
9
+ *~
10
+ \#*
11
+ .\#*
12
+
13
+ ## VIM
14
+ *.swp
15
+
16
+ ## PROJECT::GENERAL
17
+ coverage
18
+ rdoc
19
+ doc
20
+ pkg
21
+ .bundle
22
+ .idea
23
+ .yardoc
24
+ .rvmrc
25
+
26
+ ## PROJECT::SPECIFIC
27
+ Gemfile.lock
data/Gemfile CHANGED
@@ -1,4 +1,4 @@
1
1
  source "http://rubygems.org"
2
2
 
3
- # Specify your gem's dependencies in simple_crowd.gemspec
3
+ # Specify your gem's dependencies in authlogic_crowd.gemspec
4
4
  gemspec
@@ -32,7 +32,7 @@ Gem::Specification.new do |s|
32
32
  test/helper.rb
33
33
  test/test_authlogic_crowd.rb
34
34
  )
35
- s.homepage = %q{http://github.com/lapluviosilla/authlogic_crowd}
35
+ s.homepage = %q{http://github.com/thinkwell/authlogic_crowd}
36
36
  s.require_paths = ["lib"]
37
37
  s.rubygems_version = %q{1.3.7}
38
38
  s.summary = %q{Atlassian Crowd support for Authlogic}
@@ -42,11 +42,15 @@ module AuthlogicCrowd
42
42
  end
43
43
  alias_method :crowd_user_token_field=, :crowd_user_token_field
44
44
 
45
+ def crowd_enabled(value=nil)
46
+ rw_config(:crowd_enabled, value, true)
47
+ end
48
+
45
49
  end
46
50
  module Methods
47
51
  def self.included(klass)
48
52
  klass.class_eval do
49
- validate_on_create :must_have_unique_crowd_login
53
+ validate_on_create :must_have_unique_crowd_login, :if => :using_crowd?, :unless => :crowd_record
50
54
 
51
55
  # TODO: Cleanup and refactor into callbacks
52
56
  def create
@@ -123,7 +127,7 @@ module AuthlogicCrowd
123
127
  end
124
128
 
125
129
  def using_crowd?
126
- !(self.class.crowd_app_name.nil? || self.class.crowd_app_password.nil? || self.class.crowd_service_url.nil?)
130
+ self.class.crowd_enabled && !(self.class.crowd_app_name.nil? || self.class.crowd_app_password.nil? || self.class.crowd_service_url.nil?)
127
131
  end
128
132
 
129
133
  def validate_password_with_crowd?
@@ -30,14 +30,15 @@ module AuthlogicCrowd
30
30
  alias_method :auto_register=,:auto_register
31
31
 
32
32
  def crowd_user_token= token
33
+ # Dup token before storing to make sure we store a pure string to avoid session serialization issues.
34
+ token = token.dup if token
33
35
  session_user_token = controller && controller.session[:"crowd.token_key"]
34
36
  cookie_user_token = crowd_sso? && controller && controller.cookies[:"crowd.token_key"]
35
- cached_info = Rails.cache.read('crowd_cookie_info')
36
37
  @crowd_client ||= SimpleCrowd::Client.new({
37
38
  :service_url => klass.crowd_service_url,
38
39
  :app_name => klass.crowd_app_name,
39
40
  :app_password => klass.crowd_app_password})
40
- crowd_cookie_info ||= cached_info || @crowd_client.get_cookie_info
41
+ crowd_cookie_info = self.crowd_cookie_info(@crowd_client)
41
42
  controller.session[:"crowd.token_key"] = token unless session_user_token == token || !controller
42
43
  controller.cookies[:"crowd.token_key"] = {:domain => crowd_cookie_info[:domain],
43
44
  :secure => crowd_cookie_info[:secure],
@@ -46,6 +47,18 @@ module AuthlogicCrowd
46
47
  def crowd_user_token
47
48
  controller && (controller.params["crowd.token_key"] || controller.cookies[:"crowd.token_key"] || controller.session[:"crowd.token_key"])
48
49
  end
50
+
51
+ def crowd_cookie_info(crowd_client)
52
+ Rails.cache.fetch('crowd_cookie_info') do
53
+ # Strings returned by crowd contain singleton methods which cannot
54
+ # be serialized into the Rails.cache. Do a shallow dup of each string
55
+ # in the returned hash
56
+ crowd_client.get_cookie_info.inject({}) do |cookie_info, (key, val)|
57
+ cookie_info[key] = val ? val.dup : val
58
+ cookie_info
59
+ end
60
+ end
61
+ end
49
62
  end
50
63
  module Methods
51
64
  def self.included(klass)
@@ -143,7 +156,7 @@ module AuthlogicCrowd
143
156
  if !login.blank? && self.unauthorized_record.nil?
144
157
  self.unauthorized_record = klass.respond_to?(:login_or_email_equals) ?
145
158
  klass.send(:login_or_email_equals, login).first :
146
- klass.send("find_by_#{login_field}", login)
159
+ klass.send(find_by_login_method, login)
147
160
  # If passed in login equals the user email then get the REAL login used by crowd instead
148
161
  login = unauthorized_record.login if !unauthorized_record.nil? && login = unauthorized_record.email
149
162
  end
@@ -165,7 +178,7 @@ module AuthlogicCrowd
165
178
  user_token = nil
166
179
  end
167
180
 
168
- raise "No user token" if user_token.blank?
181
+ raise SimpleCrowd::CrowdError.new "No user token" if user_token.blank?
169
182
 
170
183
  login = crowd_client.find_username_by_token user_token unless login &&
171
184
  (!cookie_user_token || session_user_token == cookie_user_token) &&
@@ -177,7 +190,7 @@ module AuthlogicCrowd
177
190
  if !self.unauthorized_record.nil? && self.unauthorized_record.login == login
178
191
  self.attempted_record = self.unauthorized_record
179
192
  else
180
- self.attempted_record = self.unauthorized_record = klass.send(:"find_by_#{login_field}", login)
193
+ self.attempted_record = self.unauthorized_record = klass.send(find_by_login_method, login)
181
194
  end
182
195
 
183
196
  if !attempted_record
@@ -217,6 +230,7 @@ module AuthlogicCrowd
217
230
  controller.cookies.delete :"#{klass.name.underscore}_credentials"
218
231
  controller.cookies.delete :"crowd.token_key", :domain => crowd_cookie_info[:domain] if sso?
219
232
  end
233
+ raise unless e.kind_of? SimpleCrowd::CrowdError
220
234
  false
221
235
  end
222
236
  end
@@ -263,17 +277,20 @@ module AuthlogicCrowd
263
277
  @crowd_client ||= SimpleCrowd::Client.new(crowd_config)
264
278
  end
265
279
  def load_crowd_app_token
266
- cached_token = Rails.cache.read('crowd_app_token')
267
- crowd_client.app_token = cached_token unless cached_token.nil?
268
- Rails.cache.write('crowd_app_token', crowd_client.app_token) unless cached_token == crowd_client.app_token
280
+ crowd_app_token = Rails.cache.read('crowd_app_token')
281
+ if crowd_app_token.nil?
282
+ crowd_app_token = crowd_client.app_token
283
+ # Strings returned by crowd contain singleton methods which cannot
284
+ # be serialized into the Rails.cache. Duping the strings removes the
285
+ # singleton methods.
286
+ Rails.cache.write('crowd_app_token', crowd_app_token.dup)
287
+ else
288
+ crowd_client.app_token = crowd_app_token
289
+ end
290
+ crowd_app_token
269
291
  end
270
292
  def crowd_cookie_info
271
- unless @crowd_cookie_info
272
- cached_info = Rails.cache.read('crowd_cookie_info')
273
- @crowd_cookie_info ||= cached_info || crowd_client.get_cookie_info
274
- Rails.cache.write('crowd_cookie_info', @crowd_cookie_info) unless cached_info == @crowd_cookie_info
275
- end
276
- @crowd_cookie_info
293
+ @crowd_cookie_info ||= self.class.crowd_cookie_info(crowd_client)
277
294
  end
278
295
  def crowd_config
279
296
  {:service_url => klass.crowd_service_url,
@@ -282,4 +299,4 @@ module AuthlogicCrowd
282
299
  end
283
300
  end
284
301
  end
285
- end
302
+ end
@@ -1,3 +1,3 @@
1
1
  module AuthlogicCrowd
2
- VERSION = "0.2.3"
2
+ VERSION = "0.2.4"
3
3
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: authlogic_crowd
3
3
  version: !ruby/object:Gem::Version
4
- hash: 17
4
+ hash: 31
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 2
9
- - 3
10
- version: 0.2.3
9
+ - 4
10
+ version: 0.2.4
11
11
  platform: ruby
12
12
  authors:
13
13
  - Paul Strong
@@ -15,8 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-07-11 00:00:00 -05:00
19
- default_executable:
18
+ date: 2012-03-28 00:00:00 Z
20
19
  dependencies:
21
20
  - !ruby/object:Gem::Dependency
22
21
  name: thoughtbot-shoulda
@@ -123,8 +122,7 @@ files:
123
122
  - lib/authlogic_crowd/version.rb
124
123
  - test/helper.rb
125
124
  - test/test_authlogic_crowd.rb
126
- has_rdoc: true
127
- homepage: http://github.com/lapluviosilla/authlogic_crowd
125
+ homepage: http://github.com/thinkwell/authlogic_crowd
128
126
  licenses: []
129
127
 
130
128
  post_install_message:
@@ -153,7 +151,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
153
151
  requirements: []
154
152
 
155
153
  rubyforge_project:
156
- rubygems_version: 1.6.2
154
+ rubygems_version: 1.8.17
157
155
  signing_key:
158
156
  specification_version: 3
159
157
  summary: Atlassian Crowd support for Authlogic