Empact-authlogic_rpx 1.1.2
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 +1 -0
- data/CHANGELOG.rdoc +39 -0
- data/Empact-authlogic_rpx.gemspec +100 -0
- data/MIT-LICENSE +20 -0
- data/README.rdoc +747 -0
- data/Rakefile +47 -0
- data/VERSION +1 -0
- data/generators/add_authlogic_rpx_migration/USAGE +18 -0
- data/generators/add_authlogic_rpx_migration/add_authlogic_rpx_migration_generator.rb +44 -0
- data/generators/add_authlogic_rpx_migration/templates/migration_internal_mapping.rb +34 -0
- data/generators/add_authlogic_rpx_migration/templates/migration_no_mapping.rb +29 -0
- data/init.rb +1 -0
- data/lib/authlogic_rpx.rb +13 -0
- data/lib/authlogic_rpx/acts_as_authentic.rb +274 -0
- data/lib/authlogic_rpx/helper.rb +44 -0
- data/lib/authlogic_rpx/rpx_identifier.rb +5 -0
- data/lib/authlogic_rpx/session.rb +241 -0
- data/lib/authlogic_rpx/session/validation.rb +30 -0
- data/lib/authlogic_rpx/version.rb +51 -0
- data/rails/init.rb +1 -0
- data/test/fixtures/rpxresponses.yml +20 -0
- data/test/fixtures/users.yml +20 -0
- data/test/integration/basic_authentication_and_registration_test.rb +73 -0
- data/test/integration/internal_mapping/basic_authentication_and_registration_test.rb +3 -0
- data/test/integration/internal_mapping/settings_test.rb +10 -0
- data/test/integration/no_mapping/basic_authentication_and_registration_test.rb +3 -0
- data/test/integration/no_mapping/settings_test.rb +10 -0
- data/test/libs/ext_test_unit.rb +30 -0
- data/test/libs/mock_rpx_now.rb +34 -0
- data/test/libs/rails_trickery.rb +41 -0
- data/test/libs/rpxresponse.rb +3 -0
- data/test/libs/user.rb +3 -0
- data/test/libs/user_session.rb +3 -0
- data/test/test_helper.rb +85 -0
- data/test/test_internal_mapping_helper.rb +93 -0
- data/test/unit/acts_as_authentic_settings_test.rb +42 -0
- data/test/unit/session_settings_test.rb +38 -0
- data/test/unit/session_validation_test.rb +16 -0
- data/test/unit/verify_rpx_mock_test.rb +29 -0
- metadata +143 -0
@@ -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,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
|
data/test/libs/user.rb
ADDED
data/test/test_helper.rb
ADDED
@@ -0,0 +1,85 @@
|
|
1
|
+
require "rubygems"
|
2
|
+
begin
|
3
|
+
gem 'test-unit'
|
4
|
+
require "test/unit"
|
5
|
+
require File.dirname(__FILE__) + "/libs/ext_test_unit"
|
6
|
+
rescue Gem::LoadError
|
7
|
+
# assume using stdlib Test:Unit
|
8
|
+
require "test/unit"
|
9
|
+
require File.dirname(__FILE__) + "/libs/ext_test_unit"
|
10
|
+
end
|
11
|
+
|
12
|
+
require 'rr'
|
13
|
+
require "ruby-debug"
|
14
|
+
require "active_record"
|
15
|
+
require "action_controller"
|
16
|
+
|
17
|
+
ActiveRecord::Schema.verbose = false
|
18
|
+
|
19
|
+
begin
|
20
|
+
ActiveRecord::Base.establish_connection(:adapter => "sqlite3", :database => ":memory:")
|
21
|
+
rescue ArgumentError
|
22
|
+
ActiveRecord::Base.establish_connection(:adapter => "sqlite3", :dbfile => ":memory:")
|
23
|
+
end
|
24
|
+
|
25
|
+
ActiveRecord::Base.configurations = true
|
26
|
+
ActiveRecord::Schema.define(:version => 1) do
|
27
|
+
|
28
|
+
create_table :rpxresponses do |t|
|
29
|
+
t.string :identifier
|
30
|
+
t.string :provider_name
|
31
|
+
t.string :username
|
32
|
+
t.string :verified_email
|
33
|
+
t.string :display_name
|
34
|
+
end
|
35
|
+
|
36
|
+
create_table :users do |t|
|
37
|
+
t.datetime :created_at
|
38
|
+
t.datetime :updated_at
|
39
|
+
t.integer :lock_version, :default => 0
|
40
|
+
t.string :login
|
41
|
+
t.string :crypted_password
|
42
|
+
t.string :password_salt
|
43
|
+
t.string :persistence_token
|
44
|
+
t.string :single_access_token
|
45
|
+
t.string :perishable_token
|
46
|
+
t.string :rpx_identifier
|
47
|
+
t.string :email
|
48
|
+
t.string :first_name
|
49
|
+
t.string :last_name
|
50
|
+
t.integer :login_count, :default => 0, :null => false
|
51
|
+
t.integer :failed_login_count, :default => 0, :null => false
|
52
|
+
t.datetime :last_request_at
|
53
|
+
t.datetime :current_login_at
|
54
|
+
t.datetime :last_login_at
|
55
|
+
t.string :current_login_ip
|
56
|
+
t.string :last_login_ip
|
57
|
+
end
|
58
|
+
|
59
|
+
end
|
60
|
+
|
61
|
+
require "active_record/fixtures"
|
62
|
+
require "authlogic"
|
63
|
+
require "authlogic/test_case"
|
64
|
+
|
65
|
+
require "rpx_now"
|
66
|
+
RPX_API_KEY = 'abcdefghijklmnopqrstuvwxyz' unless defined? RPX_API_KEY
|
67
|
+
|
68
|
+
require File.dirname(__FILE__) + "/../lib/authlogic_rpx"
|
69
|
+
|
70
|
+
require File.dirname(__FILE__) + "/libs/rails_trickery"
|
71
|
+
require File.dirname(__FILE__) + '/libs/rpxresponse'
|
72
|
+
require File.dirname(__FILE__) + '/libs/mock_rpx_now'
|
73
|
+
require File.dirname(__FILE__) + '/libs/user'
|
74
|
+
require File.dirname(__FILE__) + '/libs/user_session'
|
75
|
+
|
76
|
+
class ActiveSupport::TestCase
|
77
|
+
include RR::Adapters::TestUnit
|
78
|
+
include ActiveRecord::TestFixtures
|
79
|
+
self.fixture_path = File.dirname(__FILE__) + "/fixtures"
|
80
|
+
self.use_transactional_fixtures = false
|
81
|
+
self.use_instantiated_fixtures = false
|
82
|
+
self.pre_loaded_fixtures = false
|
83
|
+
fixtures :all
|
84
|
+
setup :activate_authlogic
|
85
|
+
end
|
@@ -0,0 +1,93 @@
|
|
1
|
+
require "rubygems"
|
2
|
+
begin
|
3
|
+
gem 'test-unit'
|
4
|
+
require "test/unit"
|
5
|
+
require File.dirname(__FILE__) + "/libs/ext_test_unit"
|
6
|
+
rescue Gem::LoadError
|
7
|
+
# assume using stdlib Test:Unit
|
8
|
+
require "test/unit"
|
9
|
+
require File.dirname(__FILE__) + "/libs/ext_test_unit"
|
10
|
+
end
|
11
|
+
|
12
|
+
require 'rr'
|
13
|
+
require "ruby-debug"
|
14
|
+
require "active_record"
|
15
|
+
require "action_controller"
|
16
|
+
|
17
|
+
ActiveRecord::Schema.verbose = false
|
18
|
+
|
19
|
+
begin
|
20
|
+
ActiveRecord::Base.establish_connection(:adapter => "sqlite3", :database => ":memory:")
|
21
|
+
rescue ArgumentError
|
22
|
+
ActiveRecord::Base.establish_connection(:adapter => "sqlite3", :dbfile => ":memory:")
|
23
|
+
end
|
24
|
+
|
25
|
+
ActiveRecord::Base.configurations = true
|
26
|
+
ActiveRecord::Schema.define(:version => 1) do
|
27
|
+
|
28
|
+
create_table :rpxresponses do |t|
|
29
|
+
t.string :identifier
|
30
|
+
t.string :provider_name
|
31
|
+
t.string :username
|
32
|
+
t.string :verified_email
|
33
|
+
t.string :display_name
|
34
|
+
end
|
35
|
+
|
36
|
+
create_table :users do |t|
|
37
|
+
t.datetime :created_at
|
38
|
+
t.datetime :updated_at
|
39
|
+
t.integer :lock_version, :default => 0
|
40
|
+
t.string :login
|
41
|
+
t.string :crypted_password
|
42
|
+
t.string :password_salt
|
43
|
+
t.string :persistence_token
|
44
|
+
t.string :single_access_token
|
45
|
+
t.string :perishable_token
|
46
|
+
t.string :rpx_identifier
|
47
|
+
t.string :email
|
48
|
+
t.string :first_name
|
49
|
+
t.string :last_name
|
50
|
+
t.integer :login_count, :default => 0, :null => false
|
51
|
+
t.integer :failed_login_count, :default => 0, :null => false
|
52
|
+
t.datetime :last_request_at
|
53
|
+
t.datetime :current_login_at
|
54
|
+
t.datetime :last_login_at
|
55
|
+
t.string :current_login_ip
|
56
|
+
t.string :last_login_ip
|
57
|
+
end
|
58
|
+
|
59
|
+
create_table :rpx_identifiers do |t|
|
60
|
+
t.string :identifier
|
61
|
+
t.string :provider_name
|
62
|
+
t.integer :user_id
|
63
|
+
t.timestamps
|
64
|
+
end
|
65
|
+
|
66
|
+
end
|
67
|
+
|
68
|
+
require "active_record/fixtures"
|
69
|
+
require "authlogic"
|
70
|
+
require "authlogic/test_case"
|
71
|
+
|
72
|
+
require "rpx_now"
|
73
|
+
RPX_API_KEY = 'abcdefghijklmnopqrstuvwxyz' unless defined? RPX_API_KEY
|
74
|
+
|
75
|
+
require File.dirname(__FILE__) + "/../lib/authlogic_rpx"
|
76
|
+
|
77
|
+
require File.dirname(__FILE__) + "/libs/rails_trickery"
|
78
|
+
require File.dirname(__FILE__) + '/libs/rpxresponse'
|
79
|
+
require File.dirname(__FILE__) + '/libs/mock_rpx_now'
|
80
|
+
require File.dirname(__FILE__) + '/libs/user'
|
81
|
+
require File.dirname(__FILE__) + '/libs/user_session'
|
82
|
+
|
83
|
+
class ActiveSupport::TestCase
|
84
|
+
include RR::Adapters::TestUnit
|
85
|
+
include ActiveRecord::TestFixtures
|
86
|
+
self.fixture_path = File.dirname(__FILE__) + "/fixtures"
|
87
|
+
self.use_transactional_fixtures = false
|
88
|
+
self.use_instantiated_fixtures = false
|
89
|
+
self.pre_loaded_fixtures = false
|
90
|
+
fixtures :all
|
91
|
+
setup :activate_authlogic
|
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
|
@@ -0,0 +1,38 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../test_helper.rb'
|
2
|
+
|
3
|
+
class SessionSettingsTest < ActiveSupport::TestCase
|
4
|
+
|
5
|
+
must "RPX API key is set" do
|
6
|
+
assert UserSession.rpx_key, "the RPX API key must be set in the Authlogic::Session class configuration"
|
7
|
+
end
|
8
|
+
|
9
|
+
must "auto_register default is enabled" do
|
10
|
+
UserSession.auto_register
|
11
|
+
assert_true UserSession.auto_register_value
|
12
|
+
end
|
13
|
+
|
14
|
+
must "auto_register set disabled" do
|
15
|
+
UserSession.auto_register false
|
16
|
+
assert_false UserSession.auto_register_value
|
17
|
+
end
|
18
|
+
|
19
|
+
must "auto_register set enabled" do
|
20
|
+
UserSession.auto_register true
|
21
|
+
assert_true UserSession.auto_register_value
|
22
|
+
end
|
23
|
+
|
24
|
+
must "rpx_extended_info default is disbled" do
|
25
|
+
assert_false UserSession.rpx_extended_info_value
|
26
|
+
end
|
27
|
+
|
28
|
+
must "rpx_extended_info set enabled" do
|
29
|
+
UserSession.rpx_extended_info true
|
30
|
+
assert_true UserSession.rpx_extended_info_value
|
31
|
+
end
|
32
|
+
|
33
|
+
must "rpx_extended_info set disabled" do
|
34
|
+
UserSession.rpx_extended_info false
|
35
|
+
assert_false UserSession.rpx_extended_info_value
|
36
|
+
end
|
37
|
+
|
38
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../test_helper.rb'
|
2
|
+
|
3
|
+
class SessionValidationTest < ActiveSupport::TestCase
|
4
|
+
|
5
|
+
must "unvalidated session creation fails" do
|
6
|
+
session = UserSession.new
|
7
|
+
assert_false session.save
|
8
|
+
end
|
9
|
+
|
10
|
+
|
11
|
+
must "validate valid_rpx_auth_user_one" do
|
12
|
+
session = UserSession.create(users(:valid_rpx_auth_user_one), true )
|
13
|
+
assert_true session.valid?
|
14
|
+
end
|
15
|
+
|
16
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../test_helper.rb'
|
2
|
+
|
3
|
+
class VerifyRpxMockTest < ActiveSupport::TestCase
|
4
|
+
|
5
|
+
must "get a validated response from RPXNow" do
|
6
|
+
rpx_data = RPXNow.user_data('valid_rpx_auth_user_one',:extended => true )
|
7
|
+
assert_not_nil rpx_data
|
8
|
+
assert_not_nil rpx_data[:identifier]
|
9
|
+
rpx_id = rpx_data[:identifier]
|
10
|
+
assert_false rpx_id.blank?
|
11
|
+
end
|
12
|
+
|
13
|
+
must "get a validated response from RPXNow raw mode" do
|
14
|
+
rpx_data = RPXNow.user_data('valid_rpx_auth_user_one',:extended => true ) { |raw| raw }
|
15
|
+
assert_not_nil rpx_data
|
16
|
+
assert_not_nil rpx_data['profile']
|
17
|
+
rpx_id = rpx_data['profile']['identifier']
|
18
|
+
assert_false rpx_id.blank?
|
19
|
+
rpx_provider_name = rpx_data['profile']['providerName']
|
20
|
+
assert_false rpx_provider_name.blank?
|
21
|
+
end
|
22
|
+
|
23
|
+
must "get nil response from RPXNow if invalid request" do
|
24
|
+
rpx_data = RPXNow.user_data('invalid token',:extended => true )
|
25
|
+
assert_nil rpx_data
|
26
|
+
end
|
27
|
+
|
28
|
+
|
29
|
+
end
|