slayer-authlogic_rpx 1.2.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.
Files changed (39) hide show
  1. data/.gitignore +1 -0
  2. data/CHANGELOG.rdoc +46 -0
  3. data/MIT-LICENSE +20 -0
  4. data/Manifest +37 -0
  5. data/README.rdoc +755 -0
  6. data/Rakefile +55 -0
  7. data/generators/add_authlogic_rpx_migration/USAGE +18 -0
  8. data/generators/add_authlogic_rpx_migration/add_authlogic_rpx_migration_generator.rb +44 -0
  9. data/generators/add_authlogic_rpx_migration/templates/migration_internal_mapping.rb +34 -0
  10. data/generators/add_authlogic_rpx_migration/templates/migration_no_mapping.rb +29 -0
  11. data/init.rb +1 -0
  12. data/lib/authlogic_rpx.rb +9 -0
  13. data/lib/authlogic_rpx/acts_as_authentic.rb +297 -0
  14. data/lib/authlogic_rpx/helper.rb +54 -0
  15. data/lib/authlogic_rpx/rpx_identifier.rb +4 -0
  16. data/lib/authlogic_rpx/session.rb +237 -0
  17. data/lib/authlogic_rpx/version.rb +51 -0
  18. data/rails/init.rb +1 -0
  19. data/slayer-authlogic_rpx.gemspec +102 -0
  20. data/test/fixtures/rpxresponses.yml +20 -0
  21. data/test/fixtures/users.yml +20 -0
  22. data/test/integration/basic_authentication_and_registration_test.rb +53 -0
  23. data/test/integration/internal_mapping/basic_authentication_and_registration_test.rb +3 -0
  24. data/test/integration/internal_mapping/settings_test.rb +10 -0
  25. data/test/integration/no_mapping/basic_authentication_and_registration_test.rb +3 -0
  26. data/test/integration/no_mapping/settings_test.rb +10 -0
  27. data/test/libs/ext_test_unit.rb +30 -0
  28. data/test/libs/mock_rpx_now.rb +34 -0
  29. data/test/libs/rails_trickery.rb +41 -0
  30. data/test/libs/rpxresponse.rb +3 -0
  31. data/test/libs/user.rb +3 -0
  32. data/test/libs/user_session.rb +3 -0
  33. data/test/test_helper.rb +85 -0
  34. data/test/test_internal_mapping_helper.rb +93 -0
  35. data/test/unit/acts_as_authentic_settings_test.rb +42 -0
  36. data/test/unit/session_settings_test.rb +38 -0
  37. data/test/unit/session_validation_test.rb +16 -0
  38. data/test/unit/verify_rpx_mock_test.rb +29 -0
  39. metadata +168 -0
@@ -0,0 +1,20 @@
1
+ valid_rpx_auth_user_one:
2
+ identifier : http://provider.one/valid_rpx_auth_user_one
3
+ provider_name: provider.one
4
+ username: valid_rpx_auth_user_one
5
+ verified_email: valid_rpx_auth_user_one@provider.one
6
+ display_name: valid rpx auth user one
7
+
8
+ valid_rpx_auth_user_two:
9
+ identifier : http://provider.one/valid_rpx_auth_user_two
10
+ provider_name: provider.one
11
+ username: valid_rpx_auth_user_two
12
+ verified_email: valid_rpx_auth_user_two@provider.one
13
+ display_name: valid rpx auth user two
14
+
15
+ unregistered_rpx_auth_user_one:
16
+ identifier : http://provider.one/unregistered_rpx_auth_user_one
17
+ provider_name: provider.one
18
+ username: unregistered_rpx_auth_user_one
19
+ verified_email: unregistered_rpx_auth_user_one@provider.one
20
+ display_name: unregistered rpx auth user one
@@ -0,0 +1,20 @@
1
+ valid_rpx_auth_user_one:
2
+ login: valid_rpx_auth_user_one
3
+ email: valid_rpx_auth_user_one@provider.one
4
+ persistence_token: 6cde0674657a8a313ce952df979de2830309aa4c11ca65805dd00bfdc65dbcc2f5e36718660a1d2e68c1a08c276d996763985d2f06fd3d076eb7bc4d97b1e317
5
+ single_access_token: <%= Authlogic::Random.friendly_token %>
6
+ perishable_token: <%= Authlogic::Random.friendly_token %>
7
+ rpx_identifier : http://provider.one/valid_rpx_auth_user_one
8
+
9
+ valid_rpx_auth_user_two:
10
+ login: valid_rpx_auth_user_two
11
+ email: valid_rpx_auth_user_two@provider.one
12
+ persistence_token: 6cde0674657a8a313ce952df979de2830309aa4c11ca65805dd00bfdc65dbcc2f5e36718660a1d2e68c1a08c276d996763985d2f06fd3d076eb7bc4d97b1e317
13
+ single_access_token: <%= Authlogic::Random.friendly_token %>
14
+ perishable_token: <%= Authlogic::Random.friendly_token %>
15
+ rpx_identifier : http://provider.one/valid_rpx_auth_user_two
16
+
17
+ invalid_rpx_auth_user_one:
18
+ login: invalid_rpx_auth_user_one
19
+
20
+
@@ -0,0 +1,53 @@
1
+ # requires test_helper to be loaded first
2
+
3
+ class BasicAuthenticationAndRegistrationTest < ActiveSupport::TestCase
4
+
5
+ must "authenticate valid existing user" do
6
+ test_user = users(:valid_rpx_auth_user_one)
7
+ controller.params[:token] = test_user.login
8
+ session = UserSession.new
9
+ assert_true session.save, "should be a valid session"
10
+ assert_false session.new_registration?, "should not be a new registration"
11
+ assert_true session.registration_complete?, "registration should be complete"
12
+ assert_equal test_user, session.record
13
+ end
14
+
15
+ must "do not authenticate invalidate non-existent user" do
16
+ controller.params[:token] = ''
17
+ session = UserSession.new
18
+ assert_false session.save, "should not be a valid session"
19
+ end
20
+
21
+
22
+ must "auto-register an unregistered user" do
23
+ # enforce Authlogic settings required for test
24
+ UserSession.auto_register true
25
+ User.account_merge_enabled false
26
+ User.account_mapping_mode :none
27
+
28
+ # get response template. set the controller token (used by RPX mock to match mock response)
29
+ test_user = rpxresponses(:unregistered_rpx_auth_user_one)
30
+ controller.params[:token] = test_user.username
31
+
32
+ session = UserSession.new
33
+ assert_true session.save, "should be a valid session"
34
+ assert_true session.new_registration?, "should be a new registration"
35
+ assert_true session.registration_complete?, "registration should be complete"
36
+ end
37
+
38
+
39
+ must "auto-register disabled for an unregistered user" do
40
+ # enforce Authlogic settings required for test
41
+ UserSession.auto_register false
42
+ User.account_merge_enabled false
43
+ User.account_mapping_mode :none
44
+
45
+ # get response template. set the controller token (used by RPX mock to match mock response)
46
+ test_user = rpxresponses(:unregistered_rpx_auth_user_one)
47
+ controller.params[:token] = test_user.username
48
+
49
+ session = UserSession.new
50
+ assert_false session.save, "should not be a valid session"
51
+ end
52
+
53
+ end
@@ -0,0 +1,3 @@
1
+ require File.dirname(__FILE__) + '/../../test_internal_mapping_helper.rb'
2
+ require File.dirname(__FILE__) + '/../basic_authentication_and_registration_test.rb'
3
+
@@ -0,0 +1,10 @@
1
+ require File.dirname(__FILE__) + '/../../test_internal_mapping_helper.rb'
2
+
3
+ class SettingsTest < ActiveSupport::TestCase
4
+
5
+ must "account_mapping_mode :auto should resolve to :internal" do
6
+ assert_equal :auto, User.account_mapping_mode
7
+ assert_equal :internal, User.account_mapping_mode_used
8
+ end
9
+
10
+ end
@@ -0,0 +1,3 @@
1
+ require File.dirname(__FILE__) + '/../../test_helper.rb'
2
+ require File.dirname(__FILE__) + '/../basic_authentication_and_registration_test.rb'
3
+
@@ -0,0 +1,10 @@
1
+ require File.dirname(__FILE__) + '/../../test_helper.rb'
2
+
3
+ class SettingsTest < ActiveSupport::TestCase
4
+
5
+ must "account_mapping_mode :auto should resolve to :none" do
6
+ assert_equal :auto, User.account_mapping_mode
7
+ assert_equal :none, User.account_mapping_mode_used
8
+ end
9
+
10
+ end
@@ -0,0 +1,30 @@
1
+ module Test::Unit
2
+
3
+ class TestCase
4
+
5
+ def self.must(name, &block)
6
+ test_name = "test_#{name.gsub(/\s+/,'_')}".to_sym
7
+ defined = instance_method(test_name) rescue false
8
+ raise "#{test_name} is already defined in #{self}" if defined
9
+ if block_given?
10
+ define_method(test_name, &block)
11
+ else
12
+ define_method(test_name) do
13
+ flunk "No implementation provided for #{name}"
14
+ end
15
+ end
16
+ end
17
+
18
+ end
19
+ end
20
+
21
+
22
+ module Test::Unit::Assertions
23
+ def assert_false(object, message="")
24
+ assert_equal(false, object, message)
25
+ end
26
+ def assert_true(object, message="")
27
+ assert_equal(true, object, message)
28
+ end
29
+ end
30
+
@@ -0,0 +1,34 @@
1
+ require File.dirname(__FILE__) + '/rpxresponse.rb'
2
+
3
+ module RPXNow
4
+
5
+ def self.user_data(token, options={})
6
+ data = get_test_data(token)
7
+ if block_given? then yield(data) else parse_user_data(data) end
8
+ end
9
+
10
+ def self.parse_user_data(data)
11
+ data
12
+ end
13
+
14
+ def self.get_test_data(token)
15
+
16
+ response = Rpxresponse.find_by_username(token)
17
+ if response
18
+ data = {}
19
+ data['profile'] = {}
20
+ data['profile']['identifier'] = response.identifier
21
+ data['profile']['providerName'] = response.provider_name
22
+ data['profile']['preferredUsername'] = response.username
23
+ data['profile']['email'] = response.verified_email
24
+
25
+ data[:identifier] = data['profile']['identifier']
26
+ data[:providerName] = data['profile']['providerName']
27
+ data[:email] = response.verified_email
28
+ data[:username] = data['profile']['preferredUsername']
29
+ data[:name] = response.display_name
30
+ end
31
+
32
+ data
33
+ end
34
+ end
@@ -0,0 +1,41 @@
1
+ # The only reason I am doing all of this non sense is becuase the openid_authentication requires that
2
+ # these constants be present. The only other alternative is to use an entire rails application for testing
3
+ # which is a little too overboard for this, I think.
4
+
5
+ #RAILS_ROOT = ''
6
+
7
+ class ActionControllerEx < Authlogic::TestCase::MockController
8
+ class Request < Authlogic::TestCase::MockRequest
9
+ def request_method
10
+ ""
11
+ end
12
+ end
13
+
14
+ def root_url
15
+ ''
16
+ end
17
+
18
+ def request
19
+ return @request if defined?(@request)
20
+ super
21
+ # Rails does some crazy s#!t with the "method" method. If I don't do this I get a "wrong arguments (0 for 1) error"
22
+ @request.class.class_eval do
23
+ def method
24
+ nil
25
+ end
26
+ end
27
+ @request
28
+ end
29
+
30
+ def url_for(*args)
31
+ ''
32
+ end
33
+
34
+ def redirecting_to
35
+ @redirect_to
36
+ end
37
+
38
+ def redirect_to(*args)
39
+ @redirect_to = args
40
+ end
41
+ end
@@ -0,0 +1,3 @@
1
+ class Rpxresponse < ActiveRecord::Base
2
+
3
+ end
data/test/libs/user.rb ADDED
@@ -0,0 +1,3 @@
1
+ class User < ActiveRecord::Base
2
+ acts_as_authentic
3
+ end
@@ -0,0 +1,3 @@
1
+ class UserSession < Authlogic::Session::Base
2
+ rpx_key RPX_API_KEY
3
+ end
@@ -0,0 +1,85 @@
1
+ begin
2
+ require 'rubygems'
3
+ gem 'test-unit'
4
+ require 'test/unit'
5
+ rescue LoadError
6
+ # assume using stdlib Test:Unit
7
+ require 'test/unit'
8
+ end
9
+ require 'ext_test_unit'
10
+
11
+ require "active_record"
12
+ require "action_controller"
13
+
14
+ ActiveRecord::Schema.verbose = false
15
+
16
+ begin
17
+ ActiveRecord::Base.establish_connection(:adapter => "sqlite3", :database => ":memory:")
18
+ rescue ArgumentError
19
+ ActiveRecord::Base.establish_connection(:adapter => "sqlite3", :dbfile => ":memory:")
20
+ end
21
+
22
+ ActiveRecord::Base.configurations = true
23
+ ActiveRecord::Schema.define(:version => 1) do
24
+
25
+ create_table :rpxresponses do |t|
26
+ t.string :identifier
27
+ t.string :provider_name
28
+ t.string :username
29
+ t.string :verified_email
30
+ t.string :display_name
31
+ end
32
+
33
+ create_table :users do |t|
34
+ t.datetime :created_at
35
+ t.datetime :updated_at
36
+ t.integer :lock_version, :default => 0
37
+ t.string :login
38
+ t.string :crypted_password
39
+ t.string :password_salt
40
+ t.string :persistence_token
41
+ t.string :single_access_token
42
+ t.string :perishable_token
43
+ t.string :rpx_identifier
44
+ t.string :email
45
+ t.string :first_name
46
+ t.string :last_name
47
+ t.integer :login_count, :default => 0, :null => false
48
+ t.integer :failed_login_count, :default => 0, :null => false
49
+ t.datetime :last_request_at
50
+ t.datetime :current_login_at
51
+ t.datetime :last_login_at
52
+ t.string :current_login_ip
53
+ t.string :last_login_ip
54
+ end
55
+
56
+ end
57
+
58
+ require "active_record/fixtures"
59
+ require "authlogic"
60
+ require "authlogic/test_case"
61
+
62
+ require "rpx_now"
63
+ RPX_API_KEY = 'abcdefghijklmnopqrstuvwxyz' unless defined? RPX_API_KEY
64
+
65
+ require 'authlogic_rpx'
66
+
67
+ require 'rails_trickery'
68
+ require 'rpxresponse'
69
+ require 'mock_rpx_now'
70
+ require 'user'
71
+ require 'user_session'
72
+
73
+ class ActiveSupport::TestCase
74
+ include ActiveRecord::TestFixtures
75
+ self.fixture_path = File.dirname(__FILE__) + "/fixtures"
76
+ self.use_transactional_fixtures = false
77
+ self.use_instantiated_fixtures = false
78
+ self.pre_loaded_fixtures = false
79
+ fixtures :all
80
+ setup :activate_authlogic
81
+
82
+ private
83
+
84
+
85
+ end
@@ -0,0 +1,93 @@
1
+ begin
2
+ require 'rubygems'
3
+ gem 'test-unit'
4
+ require 'test/unit'
5
+ rescue LoadError
6
+ # assume using stdlib Test:Unit
7
+ require 'test/unit'
8
+ end
9
+ require 'ext_test_unit'
10
+
11
+ require "active_record"
12
+ require "action_controller"
13
+
14
+ ActiveRecord::Schema.verbose = false
15
+
16
+ begin
17
+ ActiveRecord::Base.establish_connection(:adapter => "sqlite3", :database => ":memory:")
18
+ rescue ArgumentError
19
+ ActiveRecord::Base.establish_connection(:adapter => "sqlite3", :dbfile => ":memory:")
20
+ end
21
+
22
+ ActiveRecord::Base.configurations = true
23
+ ActiveRecord::Schema.define(:version => 1) do
24
+
25
+ create_table :rpxresponses do |t|
26
+ t.string :identifier
27
+ t.string :provider_name
28
+ t.string :username
29
+ t.string :verified_email
30
+ t.string :display_name
31
+ end
32
+
33
+ create_table :users do |t|
34
+ t.datetime :created_at
35
+ t.datetime :updated_at
36
+ t.integer :lock_version, :default => 0
37
+ t.string :login
38
+ t.string :crypted_password
39
+ t.string :password_salt
40
+ t.string :persistence_token
41
+ t.string :single_access_token
42
+ t.string :perishable_token
43
+ t.string :rpx_identifier
44
+ t.string :email
45
+ t.string :first_name
46
+ t.string :last_name
47
+ t.integer :login_count, :default => 0, :null => false
48
+ t.integer :failed_login_count, :default => 0, :null => false
49
+ t.datetime :last_request_at
50
+ t.datetime :current_login_at
51
+ t.datetime :last_login_at
52
+ t.string :current_login_ip
53
+ t.string :last_login_ip
54
+ end
55
+
56
+ create_table :rpx_identifiers do |t|
57
+ t.string :identifier
58
+ t.string :provider_name
59
+ t.integer :user_id
60
+ t.timestamps
61
+ end
62
+
63
+ end
64
+
65
+ require "active_record/fixtures"
66
+ require "authlogic"
67
+ require "authlogic/test_case"
68
+
69
+ require "rpx_now"
70
+ RPX_API_KEY = 'abcdefghijklmnopqrstuvwxyz' unless defined? RPX_API_KEY
71
+
72
+ require 'authlogic_rpx'
73
+
74
+ require 'rails_trickery'
75
+ require 'rpxresponse'
76
+ require 'mock_rpx_now'
77
+ require 'user'
78
+ require 'user_session'
79
+
80
+ class ActiveSupport::TestCase
81
+ include ActiveRecord::TestFixtures
82
+ self.fixture_path = File.dirname(__FILE__) + "/fixtures"
83
+ self.use_transactional_fixtures = false
84
+ self.use_instantiated_fixtures = false
85
+ self.pre_loaded_fixtures = false
86
+ fixtures :all
87
+ setup :activate_authlogic
88
+
89
+ private
90
+
91
+
92
+ end
93
+
@@ -0,0 +1,42 @@
1
+ require File.dirname(__FILE__) + '/../test_helper.rb'
2
+
3
+ class ActsAsAuthenticSettingsTest < ActiveSupport::TestCase
4
+
5
+ must "account_merge_enabled default is disabled" do
6
+ User.account_merge_enabled
7
+ assert_false User.account_merge_enabled_value
8
+ end
9
+
10
+ must "account_merge_enabled set disabled" do
11
+ User.account_merge_enabled false
12
+ assert_false User.account_merge_enabled_value
13
+ end
14
+
15
+ must "account_merge_enabled set enabled" do
16
+ User.account_merge_enabled true
17
+ assert_true User.account_merge_enabled_value
18
+ end
19
+
20
+ must "account_mapping_mode default is :auto" do
21
+ User.account_mapping_mode
22
+ assert_equal :auto, User.account_mapping_mode_value
23
+ end
24
+
25
+ must "account_mapping_mode set :none" do
26
+ User.account_mapping_mode :none
27
+ assert_equal :none, User.account_mapping_mode_value
28
+ assert_equal :none, User.account_mapping_mode_used
29
+ end
30
+
31
+ must "account_mapping_mode set :internal" do
32
+ User.account_mapping_mode :internal
33
+ assert_equal :internal, User.account_mapping_mode_value
34
+ end
35
+
36
+ must "invalid account_mapping_mode raises config error" do
37
+ assert_raises( AuthlogicRpx::ActsAsAuthentic::ConfigurationError ) do
38
+ User.account_mapping_mode :invalid
39
+ end
40
+ end
41
+
42
+ end