Empact-authlogic_rpx 1.1.4 → 1.1.5

Sign up to get free protection for your applications and to get access to all the features.
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{Empact-authlogic_rpx}
8
- s.version = "1.1.4"
8
+ s.version = "1.1.5"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Paul Gallagher / tardate"]
12
- s.date = %q{2010-04-15}
12
+ s.date = %q{2010-05-22}
13
13
  s.description = %q{Authlogic extension/plugin that provides RPX (rpxnow.com) authentication support}
14
14
  s.email = %q{gallagher.paul@gmail.com}
15
15
  s.extra_rdoc_files = [
@@ -10,10 +10,11 @@ This fork enables full-featured auto-registration without sacrificing database c
10
10
  Authlogic_RPX is an Authlogic extension library that provides support for authentication using the RPX multi-authentication service offered by JanRain. To use RPX, you must first register your application at {RPX}[http://rpxnow.com/]. A free "Basic" account is available, in addition to paid enhanced versions. All work with Authlogic_RPX.
11
11
 
12
12
  Key features and capabilities:
13
+ * You can offer your users all the authentication methods supported by RPX (OpenID, Facebook, twitter, Google, Yahoo!, LinkedIn etc)
13
14
  * Auto-registration by default following RPX authentication (can be disabled if required)
14
- * Can allow users to enable RPX authentication for their existing password-enabled accounts
15
15
  * View helpers to assist with inserting login fragments in pages
16
16
  * Can co-exist with standard password authentication
17
+ * Allow users to enable RPX authentication for any existing password-enabled accounts
17
18
  * Supports identity mapping and merging (allowing users to have multiple logins associated with one member record on your site)
18
19
 
19
20
 
@@ -582,6 +583,13 @@ For example, to insert a login link in a navigation bar is as simple as this:
582
583
  <% end %>
583
584
  </div>
584
585
 
586
+ <b>NOTE:</b> One of the most common problems people encounter in testing out authlogic_rpx is to <b>no set the correct :app_name</b>.
587
+ The example above shows how this parameter is set for the rails-authlogic-rpx-sample, but you need to replace this value with the
588
+ name you registered at rpxnow.com .
589
+
590
+ <b>NOTE2:</b> Make sure the application name is entered here all in lowercase. If you do not, it can cause SSL certificate errors to
591
+ be displayed when logging in with certain browsers (notably Android 2.1 webkit).
592
+
585
593
  === 8. Allow users to "Add RPX" to existing accounts (optional)
586
594
 
587
595
  If you got this far and have a working application, you are ready to go, especially if you only plan to support RPX authentication.
@@ -732,4 +740,4 @@ The idea of adding RPX support to authlogic is not new. Some early ideas were fo
732
740
  * <b>http://github.com/gampleman/authlogic_rpx/</b> similar, but including an implementation of the RPX api
733
741
 
734
742
  authlogic_rpx was created by Paul Gallagher (tardate.com) and released under the MIT license.
735
- Big thanks for contributions from {John}[http://gitub.com/jjb] and {Damir}[http://gitub.com/sidonath]
743
+ Big thanks for contributions from {Joris}[http://github.com/trooster], {John}[http://gitub.com/jjb], {Damir}[http://gitub.com/sidonath], {Ben}[http://github.com/Empact]
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.1.4
1
+ 1.1.5
@@ -32,7 +32,6 @@ module AuthlogicRpx
32
32
  end
33
33
  alias_method :account_merge_enabled=,:account_merge_enabled
34
34
 
35
-
36
35
  # account_mapping_mode is used to explicitly set/override the mapping behaviour.
37
36
  #
38
37
  # * <tt>Default:</tt> :auto
@@ -78,73 +77,64 @@ module AuthlogicRpx
78
77
 
79
78
  module Methods
80
79
 
81
- # Set up some simple validations
80
+ # Mix-in the required methods based on mapping mode
81
+ #
82
82
  def self.included(klass)
83
83
  klass.class_eval do
84
84
 
85
85
  case
86
86
  when using_no_mapping?
87
- alias_method :using_rpx?, :using_rpx__nomap?
88
- alias_method :add_rpx_identifier, :add_rpx_identifier__nomap
89
- alias_method :identified_by?, :identified_by__nomap?
90
- alias_method :merge_user_id, :merge_user_id__nomap
91
-
92
- # Uses default find_by_rpx_identifier class method
93
-
94
- # Add an rpx_identifier collection method
95
- def rpx_identifiers
96
- [{ :identifier => rpx_identifier, :provider_name => "Unknown" }]
97
- end
87
+ include AuthlogicRpx::MethodSet_NoMapping
98
88
 
99
89
  when using_internal_mapping?
100
- alias_method :using_rpx?, :using_rpx__internal?
101
- alias_method :add_rpx_identifier, :add_rpx_identifier__internal
102
- alias_method :identified_by?, :identified_by__internal?
103
- alias_method :merge_user_id, :merge_user_id__internal
104
- has_many :rpx_identifiers, :class_name => 'RPXIdentifier', :validate => false, :dependent => :destroy
90
+ include AuthlogicRpx::MethodSet_InternalMapping
91
+ has_many :rpx_identifiers, :class_name => 'RPXIdentifier', :dependent => :destroy
105
92
 
106
- # Add custom find_by_rpx_identifier class method
107
- def self.find_by_rpx_identifier(id)
108
- identifier = RPXIdentifier.find_by_identifier(id)
109
- if identifier.nil?
110
- if self.column_names.include? 'rpx_identifier'
111
- # check for authentication using <=1.0.4, migrate identifier to rpx_identifiers table
112
- user = self.find( :first, :conditions => [ "rpx_identifier = ?", id ] )
113
- unless user.nil?
114
- user.add_rpx_identifier( id, 'Unknown' )
115
- end
116
- return user
117
- else
118
- return nil
119
- end
120
- else
121
- identifier.user
122
- end
123
- end
93
+ # Add custom find_by_rpx_identifier class method
94
+ #
95
+ def self.find_by_rpx_identifier(id)
96
+ identifier = RPXIdentifier.find_by_identifier(id)
97
+ if identifier.nil?
98
+ if self.column_names.include? 'rpx_identifier'
99
+ # check for authentication using <=1.0.4, migrate identifier to rpx_identifiers table
100
+ user = self.find( :first, :conditions => [ "rpx_identifier = ?", id ] )
101
+ unless user.nil?
102
+ user.add_rpx_identifier( id, 'Unknown' )
103
+ end
104
+ return user
105
+ else
106
+ return nil
107
+ end
108
+ else
109
+ identifier.send( self.class_name.downcase )
110
+ end
111
+ end
124
112
 
125
113
  else
126
114
  raise AuthlogicRpx::ActsAsAuthentic::ConfigurationError.new( "invalid or unsupported account_mapping_mode" )
127
115
  end
128
116
 
129
- validates_length_of_password_field_options validates_length_of_password_field_options.merge(:if => :validate_password_with_rpx?)
130
- validates_confirmation_of_password_field_options validates_confirmation_of_password_field_options.merge(:if => :validate_password_with_rpx?)
131
- validates_length_of_password_confirmation_field_options validates_length_of_password_confirmation_field_options.merge(:if => :validate_password_with_rpx?)
117
+ # Set up some fundamental conditional validations
118
+ validates_length_of_password_field_options validates_length_of_password_field_options.merge(:if => :validate_password_not_rpx?)
119
+ validates_confirmation_of_password_field_options validates_confirmation_of_password_field_options.merge(:if => :validate_password_not_rpx?)
120
+ validates_length_of_password_confirmation_field_options validates_length_of_password_confirmation_field_options.merge(:if => :validate_password_not_rpx?)
132
121
 
133
122
  before_validation :adding_rpx_identifier
134
123
  end
135
124
 
125
+ # add relations and validation to RPXIdentifier based on the actual user model class name used
126
+ #
136
127
  RPXIdentifier.class_eval do
137
128
  belongs_to klass.name.downcase.to_sym
129
+ validates_presence_of "#{klass.name.downcase}_id".to_sym
138
130
  end
139
131
  end
140
132
 
141
- # test if account it using RPX authentication
142
- # aliased to using_rpx based on authlogic_rpx configuration mode
143
- def using_rpx__nomap?
144
- !rpx_identifier.blank?
145
- end
146
- def using_rpx__internal?
147
- !rpx_identifiers.empty?
133
+ # support a block given to the save
134
+ def save(perform_validation = true, &block)
135
+ result = super perform_validation
136
+ yield(result) if block_given?
137
+ result
148
138
  end
149
139
 
150
140
  # test if account it using normal password authentication
@@ -152,30 +142,11 @@ module AuthlogicRpx
152
142
  !send(crypted_password_field).blank?
153
143
  end
154
144
 
155
- # adds RPX identification to the instance.
156
- # Abstracts how the RPX identifier is added to allow for multiplicity of underlying implementations
157
- # aliased to add_rpx_identifier based on authlogic_rpx configuration mode
158
- def add_rpx_identifier__nomap( rpx_id, rpx_provider_name )
159
- self.rpx_identifier = rpx_id
160
- #TODO: make rpx_provider_name a std param?
161
- end
162
- def add_rpx_identifier__internal( rpx_id, rpx_provider_name )
163
- self.rpx_identifiers.build(:identifier => rpx_id, :provider_name => rpx_provider_name )
164
- end
165
-
166
- # Checks if given identifier is an identity for this account
167
- # aliased to identified_by based on authlogic_rpx configuration mode
168
- def identified_by__nomap?( id )
169
- self.rpx_identifier == id
170
- end
171
- def identified_by__internal?( id )
172
- self.rpx_identifiers.find_by_identifier( id )
173
- end
174
145
 
175
146
  private
176
147
 
177
- # tests if password authentication should be checked: if rpx is enabled (but not used by this user)
178
- def validate_password_with_rpx?
148
+ # tests if password authentication should be checked instead of rpx (i.e. if rpx is enabled but not used by this user)
149
+ def validate_password_not_rpx?
179
150
  !using_rpx? && require_password?
180
151
  end
181
152
 
@@ -221,23 +192,8 @@ module AuthlogicRpx
221
192
 
222
193
  map_added_rpx_data( added_rpx_data )
223
194
  end
224
-
225
- return true
226
195
  end
227
196
 
228
- # merge_user_id is an internal method used to merge the actual RPX identifiers
229
- # aliased to merge_user_id based on authlogic_rpx configuration mode
230
- def merge_user_id__nomap( from_user )
231
- self.rpx_identifier = from_user.rpx_identifier
232
- from_user.rpx_identifier = nil
233
- from_user.save
234
- from_user.reload
235
- end
236
- def merge_user_id__internal( from_user )
237
- self.rpx_identifiers << from_user.rpx_identifiers
238
- from_user.reload
239
- end
240
-
241
197
 
242
198
  # map_added_rpx_data maps additional fields from the RPX response into the user object during the "add RPX to existing account" process.
243
199
  # Override this in your user model to perform field mapping as may be desired
@@ -271,4 +227,78 @@ module AuthlogicRpx
271
227
 
272
228
  end
273
229
  end
230
+
231
+ # Mix-in collection of methods that are specific to no-mapping mode of operation
232
+ #
233
+ module MethodSet_NoMapping
234
+ # test if account it using RPX authentication
235
+ #
236
+ def using_rpx?
237
+ !rpx_identifier.blank?
238
+ end
239
+
240
+ # adds RPX identification to the instance.
241
+ # Abstracts how the RPX identifier is added to allow for multiplicity of underlying implementations
242
+ #
243
+ def add_rpx_identifier( rpx_id, rpx_provider_name )
244
+ self.rpx_identifier = rpx_id
245
+ #TODO: make rpx_provider_name a std param?
246
+ end
247
+
248
+ # Checks if given identifier is an identity for this account
249
+ #
250
+ def identified_by?( id )
251
+ self.rpx_identifier == id
252
+ end
253
+
254
+ # merge_user_id is an internal method used to merge the actual RPX identifiers
255
+ #
256
+ def merge_user_id( from_user )
257
+ self.rpx_identifier = from_user.rpx_identifier
258
+ from_user.rpx_identifier = nil
259
+ from_user.save
260
+ from_user.reload
261
+ end
262
+
263
+ # Uses default find_by_rpx_identifier class method
264
+
265
+ # Add an rpx_identifier collection method
266
+ def rpx_identifiers
267
+ [{ :identifier => rpx_identifier, :provider_name => "Unknown" }]
268
+ end
269
+ end
270
+
271
+
272
+ # Mix-in collection of methods that are specific to internal mapping mode of operation
273
+ #
274
+ module MethodSet_InternalMapping
275
+ # test if account it using RPX authentication
276
+ #
277
+ def using_rpx?
278
+ !rpx_identifiers.empty?
279
+ end
280
+
281
+ # adds RPX identification to the instance.
282
+ # Abstracts how the RPX identifier is added to allow for multiplicity of underlying implementations
283
+ #
284
+ def add_rpx_identifier( rpx_id, rpx_provider_name )
285
+ self.rpx_identifiers.build(:identifier => rpx_id, :provider_name => rpx_provider_name )
286
+ end
287
+
288
+ # Checks if given identifier is an identity for this account
289
+ #
290
+ def identified_by?( id )
291
+ self.rpx_identifiers.find_by_identifier( id )
292
+ end
293
+
294
+ # merge_user_id is an internal method used to merge the actual RPX identifiers
295
+ #
296
+ def merge_user_id( from_user )
297
+ self.rpx_identifiers << from_user.rpx_identifiers
298
+ from_user.reload
299
+ end
300
+
301
+
302
+ end
303
+
274
304
  end
@@ -36,7 +36,7 @@ module AuthlogicRpx
36
36
  private
37
37
 
38
38
  def build_token_url!( options )
39
- options.delete( :return_url ) + '?' + (
39
+ options.delete( :return_url ) + (options[:return_url].include?('?') ? '&' : '?') + (
40
40
  { :authenticity_token => form_authenticity_token, :add_rpx => options.delete( :add_rpx ) }.collect { |n| "#{n[0]}=#{ u(n[1]) }" if n[1] }
41
41
  ).compact.join('&')
42
42
  end
@@ -1,5 +1,4 @@
1
1
  class RPXIdentifier < ActiveRecord::Base
2
2
  validates_presence_of :identifier
3
3
  validates_uniqueness_of :identifier
4
- validates_presence_of :user_id
5
4
  end
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 1
7
7
  - 1
8
- - 4
9
- version: 1.1.4
8
+ - 5
9
+ version: 1.1.5
10
10
  platform: ruby
11
11
  authors:
12
12
  - Paul Gallagher / tardate
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-04-15 00:00:00 -04:00
17
+ date: 2010-05-22 00:00:00 -04:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency