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.
- data/.gitignore +1 -0
- data/CHANGELOG.rdoc +46 -0
- data/MIT-LICENSE +20 -0
- data/Manifest +37 -0
- data/README.rdoc +755 -0
- data/Rakefile +55 -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 +9 -0
- data/lib/authlogic_rpx/acts_as_authentic.rb +297 -0
- data/lib/authlogic_rpx/helper.rb +54 -0
- data/lib/authlogic_rpx/rpx_identifier.rb +4 -0
- data/lib/authlogic_rpx/session.rb +237 -0
- data/lib/authlogic_rpx/version.rb +51 -0
- data/rails/init.rb +1 -0
- data/slayer-authlogic_rpx.gemspec +102 -0
- data/test/fixtures/rpxresponses.yml +20 -0
- data/test/fixtures/users.yml +20 -0
- data/test/integration/basic_authentication_and_registration_test.rb +53 -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 +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,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
|
+
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
|