Empact-authlogic_rpx 1.1.2

Sign up to get free protection for your applications and to get access to all the features.
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