authpwn_rails 0.11.0 → 0.11.1

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/VERSION CHANGED
@@ -1 +1 @@
1
- 0.11.0
1
+ 0.11.1
@@ -33,7 +33,8 @@ class Email < ::Credential
33
33
  #
34
34
  # Presenting the correct e-mail is almost never sufficient for authentication
35
35
  # purposes. This method will most likely used to kick off an authentication
36
- # process, such as in Password#authenticate_email.
36
+ # process, such as in User#authenticate_signin and
37
+ # Password#authenticate_email.
37
38
  #
38
39
  # Returns the authenticated User instance, or a symbol indicating the reason
39
40
  # why the (potentially valid) password was rejected.
@@ -5,7 +5,7 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "authpwn_rails"
8
- s.version = "0.11.0"
8
+ s.version = "0.11.1"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Victor Costan"]
@@ -9,6 +9,14 @@ class User < ActiveRecord::Base
9
9
  # Convenience Facebook accessors.
10
10
  # include Authpwn::UserExtensions::FacebookFields
11
11
 
12
+ # Change this method to change the way users are looked up when signing in.
13
+ #
14
+ # For example, to implement Facebook / Twitter's ability to log in using
15
+ # either an e-mail address or a username, look up the user by the username,
16
+ # and pass their e-mail to super.
17
+ def self.authenticate_signin(email, password)
18
+ super
19
+ end
12
20
 
13
21
  # Add your extensions to the User class here.
14
22
  end
@@ -29,7 +29,7 @@ module HttpBasicControllerInstanceMethods
29
29
  def authenticate_using_http_basic
30
30
  return if current_user
31
31
  authenticate_with_http_basic do |email, password|
32
- auth = Credentials::Password.authenticate_email email, password
32
+ auth = User.authenticate_signin email, password
33
33
  self.current_user = auth unless auth.kind_of? Symbol
34
34
  end
35
35
  end
@@ -56,7 +56,7 @@ module SessionController
56
56
 
57
57
  @redirect_url = params[:redirect_url] || session_url
58
58
  @email = params[:email]
59
- auth = Credentials::Password.authenticate_email @email, params[:password]
59
+ auth = User.authenticate_signin @email, params[:password]
60
60
  self.current_user = auth unless auth.kind_of? Symbol
61
61
 
62
62
  respond_to do |format|
@@ -40,6 +40,20 @@ module UserModel
40
40
  def find_by_param(param)
41
41
  where(:exuid => param).first
42
42
  end
43
+
44
+ # Authenticates a user given the information on a signup form.
45
+ #
46
+ # The method's parameter names are an acknowledgement to the email and
47
+ # password fields on automatically-generated forms.
48
+ #
49
+ # The easiest method of accepting other login information is to override this
50
+ # method, locate the user's email, and supply it in a call to super.
51
+ #
52
+ # Returns an authenticated user, or a symbol indicating the reason why the
53
+ # authentication failed.
54
+ def authenticate_signin(email, password)
55
+ Credentials::Password.authenticate_email email, password
56
+ end
43
57
  end # module Authpwn::UserModel::ClassMethods
44
58
 
45
59
  # Checks if a credential is acceptable for authenticating a user.
@@ -46,12 +46,23 @@ class HttpBasicControllerTest < ActionController::TestCase
46
46
  end
47
47
 
48
48
  test "invalid user credentials in header" do
49
- set_http_basic_user @user, 'password'
49
+ set_http_basic_user @user, 'fail'
50
50
  get :show
51
51
  assert_nil assigns(:current_user)
52
52
  assert_equal 'No user', response.body
53
53
  end
54
54
 
55
+ test "uses User.authenticate_signin" do
56
+ flexmock(User).should_receive(:authenticate_signin).
57
+ with('jane@gmail.com', 'fail').and_return @user
58
+ set_http_basic_user @user, 'fail'
59
+ get :show
60
+ assert_equal @user, assigns(:current_user)
61
+ assert_equal "User: #{ActiveRecord::Fixtures.identify(:jane)}",
62
+ response.body
63
+ end
64
+
65
+
55
66
  test "reset user credentials in header" do
56
67
  set_http_basic_user @user, 'pa55w0rd'
57
68
  set_http_basic_user nil
@@ -118,6 +118,15 @@ class SessionControllerApiTest < ActionController::TestCase
118
118
  assert_match(/ blocked/, flash[:alert])
119
119
  end
120
120
 
121
+ test "create uses User.authenticate_signin" do
122
+ flexmock(User).should_receive(:authenticate_signin).
123
+ with('em@ail.com', 'fail').and_return @email_credential.user
124
+ post :create, :email => 'em@ail.com', :password => 'fail'
125
+ assert_equal @user, assigns(:current_user), 'instance variable'
126
+ assert_equal @user, session_current_user, 'session'
127
+ assert_redirected_to session_url
128
+ end
129
+
121
130
  test "create by json does not log in with bad password" do
122
131
  post :create, :email => @email_credential.email, :password => 'fail',
123
132
  :format => 'json'
@@ -275,8 +284,8 @@ class SessionControllerApiTest < ActionController::TestCase
275
284
  :password_confirmation => 'hacks'}
276
285
  assert_redirected_to session_url
277
286
  assert_equal @password_credential, assigns(:credential)
278
- assert_equal @user, Credentials::Password.authenticate_email(
279
- @email_credential.email, 'hacks'), 'password not changed'
287
+ assert_equal @user, User.authenticate_signin(@email_credential.email,
288
+ 'hacks'), 'password not changed'
280
289
  end
281
290
 
282
291
  test "change_password rejects bad old password" do
@@ -287,8 +296,8 @@ class SessionControllerApiTest < ActionController::TestCase
287
296
  assert_response :ok
288
297
  assert_template :password_change
289
298
  assert_equal @password_credential, assigns(:credential)
290
- assert_equal @user, Credentials::Password.authenticate_email(
291
- @email_credential.email, 'password'), 'password wrongly changed'
299
+ assert_equal @user, User.authenticate_signin(@email_credential.email,
300
+ 'password'), 'password wrongly changed'
292
301
  end
293
302
 
294
303
  test "change_password rejects un-confirmed password" do
@@ -299,8 +308,8 @@ class SessionControllerApiTest < ActionController::TestCase
299
308
  assert_response :ok
300
309
  assert_template :password_change
301
310
  assert_equal @password_credential, assigns(:credential)
302
- assert_equal @user, Credentials::Password.authenticate_email(
303
- @email_credential.email, 'password'), 'password wrongly changed'
311
+ assert_equal @user, User.authenticate_signin( @email_credential.email,
312
+ 'password'), 'password wrongly changed'
304
313
  end
305
314
 
306
315
  test "change_password works for password recovery" do
@@ -310,8 +319,8 @@ class SessionControllerApiTest < ActionController::TestCase
310
319
  :credential => { :password => 'hacks',
311
320
  :password_confirmation => 'hacks'}
312
321
  assert_redirected_to session_url
313
- assert_equal @user, Credentials::Password.authenticate_email(
314
- @email_credential.email, 'hacks'), 'password not changed'
322
+ assert_equal @user, User.authenticate_signin(@email_credential.email,
323
+ 'hacks'), 'password not changed'
315
324
  end
316
325
 
317
326
  test "change_password rejects un-confirmed password on recovery" do
@@ -341,8 +350,8 @@ class SessionControllerApiTest < ActionController::TestCase
341
350
  :credential => { :password => 'hacks',
342
351
  :password_confirmation => 'hacks'}
343
352
  assert_response :ok
344
- assert_equal @user, Credentials::Password.authenticate_email(
345
- @email_credential.email, 'hacks'), 'password not changed'
353
+ assert_equal @user, User.authenticate_signin(@email_credential.email,
354
+ 'hacks'), 'password not changed'
346
355
  end
347
356
 
348
357
  test "change_password by json rejects bad old password" do
@@ -354,8 +363,8 @@ class SessionControllerApiTest < ActionController::TestCase
354
363
  data = ActiveSupport::JSON.decode response.body
355
364
  assert_equal 'invalid', data['error']
356
365
  assert_equal @password_credential, assigns(:credential)
357
- assert_equal @user, Credentials::Password.authenticate_email(
358
- @email_credential.email, 'password'), 'password wrongly changed'
366
+ assert_equal @user, User.authenticate_signin(@email_credential.email,
367
+ 'password'), 'password wrongly changed'
359
368
  end
360
369
 
361
370
  test "change_password by json rejects un-confirmed password" do
@@ -366,8 +375,8 @@ class SessionControllerApiTest < ActionController::TestCase
366
375
  assert_response :ok
367
376
  data = ActiveSupport::JSON.decode response.body
368
377
  assert_equal 'invalid', data['error']
369
- assert_equal @user, Credentials::Password.authenticate_email(
370
- @email_credential.email, 'password'), 'password wrongly changed'
378
+ assert_equal @user, User.authenticate_signin( @email_credential.email,
379
+ 'password'), 'password wrongly changed'
371
380
  end
372
381
 
373
382
  test "change_password by json works for password recovery" do
@@ -377,7 +386,7 @@ class SessionControllerApiTest < ActionController::TestCase
377
386
  :credential => { :password => 'hacks',
378
387
  :password_confirmation => 'hacks'}
379
388
  assert_response :ok
380
- assert_equal @user, Credentials::Password.authenticate_email(
389
+ assert_equal @user, User.authenticate_signin(
381
390
  @email_credential.email, 'hacks'), 'password not changed'
382
391
  end
383
392
 
data/test/user_test.rb CHANGED
@@ -52,4 +52,12 @@ class UserTest < ActiveSupport::TestCase
52
52
  assert_equal 1, @user.credentials.length
53
53
  assert_equal 'test@email.com', @user.credentials.first.name
54
54
  end
55
+
56
+ test 'authenticate_email' do
57
+ assert_equal users(:john),
58
+ User.authenticate_signin('john@gmail.com', 'password')
59
+ assert_equal :invalid,
60
+ User.authenticate_signin('john@gmail.com', 'pa55w0rd'),
61
+ "Jane's password on John's account"
62
+ end
55
63
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: authpwn_rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.11.0
4
+ version: 0.11.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -278,7 +278,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
278
278
  version: '0'
279
279
  segments:
280
280
  - 0
281
- hash: 903064775847745508
281
+ hash: 1446133306816314856
282
282
  required_rubygems_version: !ruby/object:Gem::Requirement
283
283
  none: false
284
284
  requirements: