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.
Files changed (40) hide show
  1. data/.gitignore +1 -0
  2. data/CHANGELOG.rdoc +39 -0
  3. data/Empact-authlogic_rpx.gemspec +100 -0
  4. data/MIT-LICENSE +20 -0
  5. data/README.rdoc +747 -0
  6. data/Rakefile +47 -0
  7. data/VERSION +1 -0
  8. data/generators/add_authlogic_rpx_migration/USAGE +18 -0
  9. data/generators/add_authlogic_rpx_migration/add_authlogic_rpx_migration_generator.rb +44 -0
  10. data/generators/add_authlogic_rpx_migration/templates/migration_internal_mapping.rb +34 -0
  11. data/generators/add_authlogic_rpx_migration/templates/migration_no_mapping.rb +29 -0
  12. data/init.rb +1 -0
  13. data/lib/authlogic_rpx.rb +13 -0
  14. data/lib/authlogic_rpx/acts_as_authentic.rb +274 -0
  15. data/lib/authlogic_rpx/helper.rb +44 -0
  16. data/lib/authlogic_rpx/rpx_identifier.rb +5 -0
  17. data/lib/authlogic_rpx/session.rb +241 -0
  18. data/lib/authlogic_rpx/session/validation.rb +30 -0
  19. data/lib/authlogic_rpx/version.rb +51 -0
  20. data/rails/init.rb +1 -0
  21. data/test/fixtures/rpxresponses.yml +20 -0
  22. data/test/fixtures/users.yml +20 -0
  23. data/test/integration/basic_authentication_and_registration_test.rb +73 -0
  24. data/test/integration/internal_mapping/basic_authentication_and_registration_test.rb +3 -0
  25. data/test/integration/internal_mapping/settings_test.rb +10 -0
  26. data/test/integration/no_mapping/basic_authentication_and_registration_test.rb +3 -0
  27. data/test/integration/no_mapping/settings_test.rb +10 -0
  28. data/test/libs/ext_test_unit.rb +30 -0
  29. data/test/libs/mock_rpx_now.rb +34 -0
  30. data/test/libs/rails_trickery.rb +41 -0
  31. data/test/libs/rpxresponse.rb +3 -0
  32. data/test/libs/user.rb +3 -0
  33. data/test/libs/user_session.rb +3 -0
  34. data/test/test_helper.rb +85 -0
  35. data/test/test_internal_mapping_helper.rb +93 -0
  36. data/test/unit/acts_as_authentic_settings_test.rb +42 -0
  37. data/test/unit/session_settings_test.rb +38 -0
  38. data/test/unit/session_validation_test.rb +16 -0
  39. data/test/unit/verify_rpx_mock_test.rb +29 -0
  40. metadata +143 -0
@@ -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
+ 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