sorcery 0.1.4 → 0.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 (65) hide show
  1. data/Gemfile +4 -2
  2. data/Gemfile.lock +16 -13
  3. data/README.rdoc +30 -27
  4. data/Rakefile +5 -0
  5. data/VERSION +1 -1
  6. data/lib/sorcery/controller/submodules/activity_logging.rb +20 -7
  7. data/lib/sorcery/controller/submodules/brute_force_protection.rb +9 -2
  8. data/lib/sorcery/controller/submodules/http_basic_auth.rb +8 -3
  9. data/lib/sorcery/controller/submodules/oauth/oauth1.rb +26 -0
  10. data/lib/sorcery/controller/submodules/oauth/oauth2.rb +24 -0
  11. data/lib/sorcery/controller/submodules/oauth/providers/facebook.rb +64 -0
  12. data/lib/sorcery/controller/submodules/oauth/providers/twitter.rb +61 -0
  13. data/lib/sorcery/controller/submodules/oauth.rb +92 -0
  14. data/lib/sorcery/controller/submodules/remember_me.rb +14 -5
  15. data/lib/sorcery/controller/submodules/session_timeout.rb +6 -1
  16. data/lib/sorcery/controller.rb +29 -17
  17. data/lib/sorcery/engine.rb +9 -2
  18. data/lib/sorcery/model/submodules/activity_logging.rb +12 -7
  19. data/lib/sorcery/model/submodules/brute_force_protection.rb +11 -4
  20. data/lib/sorcery/model/submodules/oauth.rb +53 -0
  21. data/lib/sorcery/model/submodules/remember_me.rb +5 -3
  22. data/lib/sorcery/model/submodules/reset_password.rb +16 -13
  23. data/lib/sorcery/model/submodules/user_activation.rb +38 -19
  24. data/lib/sorcery/model/temporary_token.rb +22 -0
  25. data/lib/sorcery/model.rb +10 -3
  26. data/lib/sorcery/test_helpers.rb +84 -0
  27. data/lib/sorcery.rb +12 -0
  28. data/sorcery.gemspec +69 -40
  29. data/spec/Gemfile +3 -2
  30. data/spec/Gemfile.lock +15 -2
  31. data/spec/rails3/app_root/.rspec +1 -0
  32. data/spec/rails3/{Gemfile → app_root/Gemfile} +5 -3
  33. data/spec/rails3/{Gemfile.lock → app_root/Gemfile.lock} +25 -2
  34. data/spec/rails3/app_root/app/controllers/application_controller.rb +42 -1
  35. data/spec/rails3/app_root/app/models/authentication.rb +3 -0
  36. data/spec/rails3/app_root/app/models/user.rb +4 -1
  37. data/spec/rails3/app_root/config/application.rb +1 -3
  38. data/spec/rails3/app_root/config/routes.rb +1 -10
  39. data/spec/rails3/app_root/db/migrate/activation/20101224223622_add_activation_to_users.rb +6 -4
  40. data/spec/rails3/app_root/db/migrate/core/20101224223620_create_users.rb +4 -4
  41. data/spec/rails3/app_root/db/migrate/oauth/20101224223628_create_authentications.rb +14 -0
  42. data/spec/rails3/{controller_activity_logging_spec.rb → app_root/spec/controller_activity_logging_spec.rb} +13 -13
  43. data/spec/rails3/{controller_brute_force_protection_spec.rb → app_root/spec/controller_brute_force_protection_spec.rb} +16 -6
  44. data/spec/rails3/{controller_http_basic_auth_spec.rb → app_root/spec/controller_http_basic_auth_spec.rb} +3 -3
  45. data/spec/rails3/app_root/spec/controller_oauth2_spec.rb +117 -0
  46. data/spec/rails3/app_root/spec/controller_oauth_spec.rb +117 -0
  47. data/spec/rails3/{controller_remember_me_spec.rb → app_root/spec/controller_remember_me_spec.rb} +4 -4
  48. data/spec/rails3/{controller_session_timeout_spec.rb → app_root/spec/controller_session_timeout_spec.rb} +4 -4
  49. data/spec/rails3/{controller_spec.rb → app_root/spec/controller_spec.rb} +20 -13
  50. data/spec/rails3/app_root/spec/spec_helper.orig.rb +27 -0
  51. data/spec/rails3/app_root/spec/spec_helper.rb +61 -0
  52. data/spec/rails3/{user_activation_spec.rb → app_root/spec/user_activation_spec.rb} +60 -20
  53. data/spec/rails3/{user_activity_logging_spec.rb → app_root/spec/user_activity_logging_spec.rb} +4 -4
  54. data/spec/rails3/{user_brute_force_protection_spec.rb → app_root/spec/user_brute_force_protection_spec.rb} +7 -7
  55. data/spec/rails3/app_root/spec/user_oauth_spec.rb +39 -0
  56. data/spec/rails3/{user_remember_me_spec.rb → app_root/spec/user_remember_me_spec.rb} +4 -4
  57. data/spec/rails3/{user_reset_password_spec.rb → app_root/spec/user_reset_password_spec.rb} +21 -41
  58. data/spec/rails3/{user_spec.rb → app_root/spec/user_spec.rb} +68 -38
  59. metadata +127 -58
  60. data/spec/rails3/app_root/test/fixtures/users.yml +0 -9
  61. data/spec/rails3/app_root/test/performance/browsing_test.rb +0 -9
  62. data/spec/rails3/app_root/test/test_helper.rb +0 -13
  63. data/spec/rails3/app_root/test/unit/user_test.rb +0 -8
  64. data/spec/rails3/spec_helper.rb +0 -135
  65. /data/spec/rails3/{Rakefile → app_root/Rakefile} +0 -0
@@ -0,0 +1,84 @@
1
+ module Sorcery
2
+ module TestHelpers
3
+ SUBMODUELS_AUTO_ADDED_CONTROLLER_FILTERS = [:register_last_activity_time_to_db, :deny_banned_user, :validate_session]
4
+
5
+ def create_new_user(attributes_hash = nil)
6
+ user_attributes_hash = attributes_hash || {:username => 'gizmo', :email => "bla@bla.com", :password => 'secret'}
7
+ @user = User.new(user_attributes_hash)
8
+ @user.save!
9
+ @user
10
+ end
11
+
12
+ def create_new_external_user(provider, attributes_hash = nil)
13
+ user_attributes_hash = attributes_hash || {:username => 'gizmo', :authentications_attributes => [{:provider => provider, :uid => 123}]}
14
+ @user = User.new(user_attributes_hash)
15
+ @user.save!
16
+ @user
17
+ end
18
+
19
+ def login_user(user = nil)
20
+ user ||= @user
21
+ subject.send(:login_user,user)
22
+ subject.send(:after_login!,user,[user.username,'secret'])
23
+ end
24
+
25
+ def logout_user
26
+ subject.send(:logout)
27
+ end
28
+
29
+ def clear_user_without_logout
30
+ subject.instance_variable_set(:@current_user,nil)
31
+ end
32
+
33
+ def sorcery_reload!(submodules = [], options = {})
34
+ reload_user_class
35
+
36
+ # return to no-module configuration
37
+ ::Sorcery::Controller::Config.init!
38
+ ::Sorcery::Controller::Config.reset!
39
+
40
+ # remove all plugin before_filters so they won't fail other tests.
41
+ # I don't like this way, but I didn't find another.
42
+ # hopefully it won't break until Rails 4.
43
+ ApplicationController._process_action_callbacks.delete_if {|c| SUBMODUELS_AUTO_ADDED_CONTROLLER_FILTERS.include?(c.filter) }
44
+
45
+ # configure
46
+ ::Sorcery::Controller::Config.submodules = submodules
47
+ ::Sorcery::Controller::Config.user_class = nil
48
+ ActionController::Base.send(:include,::Sorcery::Controller)
49
+
50
+ User.activate_sorcery! do |config|
51
+ options.each do |property,value|
52
+ config.send(:"#{property}=", value)
53
+ end
54
+ end
55
+ end
56
+
57
+ def sorcery_model_property_set(property, *values)
58
+ User.class_eval do
59
+ sorcery_config.send(:"#{property}=", *values)
60
+ end
61
+ end
62
+
63
+ def sorcery_controller_property_set(property, value)
64
+ ApplicationController.activate_sorcery! do |config|
65
+ config.send(:"#{property}=", value)
66
+ end
67
+ end
68
+
69
+ def sorcery_controller_oauth_property_set(provider, property, value)
70
+ ApplicationController.activate_sorcery! do |config|
71
+ config.send(provider).send(:"#{property}=", value)
72
+ end
73
+ end
74
+
75
+ private
76
+
77
+ # reload user class between specs
78
+ # so it will be possible to test the different submodules in isolation
79
+ def reload_user_class
80
+ Object.send(:remove_const,:User)
81
+ load 'user.rb'
82
+ end
83
+ end
84
+ end
data/lib/sorcery.rb CHANGED
@@ -1,12 +1,14 @@
1
1
  module Sorcery
2
2
  autoload :Model, 'sorcery/model'
3
3
  module Model
4
+ autoload :TemporaryToken, 'sorcery/model/temporary_token'
4
5
  module Submodules
5
6
  autoload :UserActivation, 'sorcery/model/submodules/user_activation'
6
7
  autoload :ResetPassword, 'sorcery/model/submodules/reset_password'
7
8
  autoload :RememberMe, 'sorcery/model/submodules/remember_me'
8
9
  autoload :ActivityLogging, 'sorcery/model/submodules/activity_logging'
9
10
  autoload :BruteForceProtection, 'sorcery/model/submodules/brute_force_protection'
11
+ autoload :Oauth, 'sorcery/model/submodules/oauth'
10
12
  end
11
13
  end
12
14
  autoload :Controller, 'sorcery/controller'
@@ -17,6 +19,15 @@ module Sorcery
17
19
  autoload :BruteForceProtection, 'sorcery/controller/submodules/brute_force_protection'
18
20
  autoload :HttpBasicAuth, 'sorcery/controller/submodules/http_basic_auth'
19
21
  autoload :ActivityLogging, 'sorcery/controller/submodules/activity_logging'
22
+ autoload :Oauth, 'sorcery/controller/submodules/oauth'
23
+ module Oauth
24
+ autoload :Oauth1, 'sorcery/controller/submodules/oauth/oauth1'
25
+ autoload :Oauth2, 'sorcery/controller/submodules/oauth/oauth2'
26
+ module Providers
27
+ autoload :Twitter, 'sorcery/controller/submodules/oauth/providers/twitter'
28
+ autoload :Facebook, 'sorcery/controller/submodules/oauth/providers/facebook'
29
+ end
30
+ end
20
31
  end
21
32
  end
22
33
  module CryptoProviders
@@ -27,6 +38,7 @@ module Sorcery
27
38
  autoload :SHA256, 'sorcery/crypto_providers/sha256'
28
39
  autoload :SHA512, 'sorcery/crypto_providers/sha512'
29
40
  end
41
+ autoload :TestHelpers, 'sorcery/test_helpers'
30
42
 
31
43
  require 'sorcery/engine' if defined?(Rails) && Rails::VERSION::MAJOR == 3
32
44
  end
data/sorcery.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{sorcery}
8
- s.version = "0.1.4"
8
+ s.version = "0.2.1"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Noam Ben Ari"]
12
- s.date = %q{2011-02-19}
12
+ s.date = %q{2011-03-15}
13
13
  s.description = %q{Provides common authentication needs such as signing in/out, activating by email and resetting password.}
14
14
  s.email = %q{nbenari@gmail.com}
15
15
  s.extra_rdoc_files = [
@@ -30,6 +30,11 @@ Gem::Specification.new do |s|
30
30
  "lib/sorcery/controller/submodules/activity_logging.rb",
31
31
  "lib/sorcery/controller/submodules/brute_force_protection.rb",
32
32
  "lib/sorcery/controller/submodules/http_basic_auth.rb",
33
+ "lib/sorcery/controller/submodules/oauth.rb",
34
+ "lib/sorcery/controller/submodules/oauth/oauth1.rb",
35
+ "lib/sorcery/controller/submodules/oauth/oauth2.rb",
36
+ "lib/sorcery/controller/submodules/oauth/providers/facebook.rb",
37
+ "lib/sorcery/controller/submodules/oauth/providers/twitter.rb",
33
38
  "lib/sorcery/controller/submodules/remember_me.rb",
34
39
  "lib/sorcery/controller/submodules/session_timeout.rb",
35
40
  "lib/sorcery/crypto_providers/aes256.rb",
@@ -42,23 +47,28 @@ Gem::Specification.new do |s|
42
47
  "lib/sorcery/model.rb",
43
48
  "lib/sorcery/model/submodules/activity_logging.rb",
44
49
  "lib/sorcery/model/submodules/brute_force_protection.rb",
50
+ "lib/sorcery/model/submodules/oauth.rb",
45
51
  "lib/sorcery/model/submodules/remember_me.rb",
46
52
  "lib/sorcery/model/submodules/reset_password.rb",
47
53
  "lib/sorcery/model/submodules/user_activation.rb",
54
+ "lib/sorcery/model/temporary_token.rb",
55
+ "lib/sorcery/test_helpers.rb",
48
56
  "sorcery.gemspec",
49
57
  "spec/Gemfile",
50
58
  "spec/Gemfile.lock",
51
59
  "spec/Rakefile",
52
60
  "spec/rails3/.rspec",
53
- "spec/rails3/Gemfile",
54
- "spec/rails3/Gemfile.lock",
55
- "spec/rails3/Rakefile",
56
61
  "spec/rails3/app_root/.gitignore",
62
+ "spec/rails3/app_root/.rspec",
63
+ "spec/rails3/app_root/Gemfile",
64
+ "spec/rails3/app_root/Gemfile.lock",
57
65
  "spec/rails3/app_root/README",
66
+ "spec/rails3/app_root/Rakefile",
58
67
  "spec/rails3/app_root/Rakefile.unused",
59
68
  "spec/rails3/app_root/app/controllers/application_controller.rb",
60
69
  "spec/rails3/app_root/app/helpers/application_helper.rb",
61
70
  "spec/rails3/app_root/app/mailers/sorcery_mailer.rb",
71
+ "spec/rails3/app_root/app/models/authentication.rb",
62
72
  "spec/rails3/app_root/app/models/user.rb",
63
73
  "spec/rails3/app_root/app/views/layouts/application.html.erb",
64
74
  "spec/rails3/app_root/app/views/sorcery_mailer/activation_email.html.erb",
@@ -87,6 +97,7 @@ Gem::Specification.new do |s|
87
97
  "spec/rails3/app_root/db/migrate/activity_logging/20101224223624_add_activity_logging_to_users.rb",
88
98
  "spec/rails3/app_root/db/migrate/brute_force_protection/20101224223626_add_brute_force_protection_to_users.rb",
89
99
  "spec/rails3/app_root/db/migrate/core/20101224223620_create_users.rb",
100
+ "spec/rails3/app_root/db/migrate/oauth/20101224223628_create_authentications.rb",
90
101
  "spec/rails3/app_root/db/migrate/remember_me/20101224223623_add_remember_me_token_to_users.rb",
91
102
  "spec/rails3/app_root/db/migrate/reset_password/20101224223622_add_reset_password_to_users.rb",
92
103
  "spec/rails3/app_root/db/schema.rb",
@@ -107,36 +118,37 @@ Gem::Specification.new do |s|
107
118
  "spec/rails3/app_root/public/robots.txt",
108
119
  "spec/rails3/app_root/public/stylesheets/.gitkeep",
109
120
  "spec/rails3/app_root/script/rails",
110
- "spec/rails3/app_root/test/fixtures/users.yml",
111
- "spec/rails3/app_root/test/performance/browsing_test.rb",
112
- "spec/rails3/app_root/test/test_helper.rb",
113
- "spec/rails3/app_root/test/unit/user_test.rb",
121
+ "spec/rails3/app_root/spec/controller_activity_logging_spec.rb",
122
+ "spec/rails3/app_root/spec/controller_brute_force_protection_spec.rb",
123
+ "spec/rails3/app_root/spec/controller_http_basic_auth_spec.rb",
124
+ "spec/rails3/app_root/spec/controller_oauth2_spec.rb",
125
+ "spec/rails3/app_root/spec/controller_oauth_spec.rb",
126
+ "spec/rails3/app_root/spec/controller_remember_me_spec.rb",
127
+ "spec/rails3/app_root/spec/controller_session_timeout_spec.rb",
128
+ "spec/rails3/app_root/spec/controller_spec.rb",
129
+ "spec/rails3/app_root/spec/spec_helper.orig.rb",
130
+ "spec/rails3/app_root/spec/spec_helper.rb",
131
+ "spec/rails3/app_root/spec/user_activation_spec.rb",
132
+ "spec/rails3/app_root/spec/user_activity_logging_spec.rb",
133
+ "spec/rails3/app_root/spec/user_brute_force_protection_spec.rb",
134
+ "spec/rails3/app_root/spec/user_oauth_spec.rb",
135
+ "spec/rails3/app_root/spec/user_remember_me_spec.rb",
136
+ "spec/rails3/app_root/spec/user_reset_password_spec.rb",
137
+ "spec/rails3/app_root/spec/user_spec.rb",
114
138
  "spec/rails3/app_root/vendor/plugins/.gitkeep",
115
- "spec/rails3/controller_activity_logging_spec.rb",
116
- "spec/rails3/controller_brute_force_protection_spec.rb",
117
- "spec/rails3/controller_http_basic_auth_spec.rb",
118
- "spec/rails3/controller_remember_me_spec.rb",
119
- "spec/rails3/controller_session_timeout_spec.rb",
120
- "spec/rails3/controller_spec.rb",
121
- "spec/rails3/spec_helper.rb",
122
- "spec/rails3/user_activation_spec.rb",
123
- "spec/rails3/user_activity_logging_spec.rb",
124
- "spec/rails3/user_brute_force_protection_spec.rb",
125
- "spec/rails3/user_remember_me_spec.rb",
126
- "spec/rails3/user_reset_password_spec.rb",
127
- "spec/rails3/user_spec.rb",
128
139
  "spec/sorcery_crypto_providers_spec.rb",
129
140
  "spec/spec_helper.rb"
130
141
  ]
131
142
  s.homepage = %q{http://github.com/NoamB/sorcery}
132
143
  s.licenses = ["MIT"]
133
144
  s.require_paths = ["lib"]
134
- s.rubygems_version = %q{1.5.0}
145
+ s.rubygems_version = %q{1.6.2}
135
146
  s.summary = %q{Magical authentication for Rails 3 applications}
136
147
  s.test_files = [
137
148
  "spec/rails3/app_root/app/controllers/application_controller.rb",
138
149
  "spec/rails3/app_root/app/helpers/application_helper.rb",
139
150
  "spec/rails3/app_root/app/mailers/sorcery_mailer.rb",
151
+ "spec/rails3/app_root/app/models/authentication.rb",
140
152
  "spec/rails3/app_root/app/models/user.rb",
141
153
  "spec/rails3/app_root/config/application.rb",
142
154
  "spec/rails3/app_root/config/boot.rb",
@@ -155,26 +167,28 @@ Gem::Specification.new do |s|
155
167
  "spec/rails3/app_root/db/migrate/activity_logging/20101224223624_add_activity_logging_to_users.rb",
156
168
  "spec/rails3/app_root/db/migrate/brute_force_protection/20101224223626_add_brute_force_protection_to_users.rb",
157
169
  "spec/rails3/app_root/db/migrate/core/20101224223620_create_users.rb",
170
+ "spec/rails3/app_root/db/migrate/oauth/20101224223628_create_authentications.rb",
158
171
  "spec/rails3/app_root/db/migrate/remember_me/20101224223623_add_remember_me_token_to_users.rb",
159
172
  "spec/rails3/app_root/db/migrate/reset_password/20101224223622_add_reset_password_to_users.rb",
160
173
  "spec/rails3/app_root/db/schema.rb",
161
174
  "spec/rails3/app_root/db/seeds.rb",
162
- "spec/rails3/app_root/test/performance/browsing_test.rb",
163
- "spec/rails3/app_root/test/test_helper.rb",
164
- "spec/rails3/app_root/test/unit/user_test.rb",
165
- "spec/rails3/controller_activity_logging_spec.rb",
166
- "spec/rails3/controller_brute_force_protection_spec.rb",
167
- "spec/rails3/controller_http_basic_auth_spec.rb",
168
- "spec/rails3/controller_remember_me_spec.rb",
169
- "spec/rails3/controller_session_timeout_spec.rb",
170
- "spec/rails3/controller_spec.rb",
171
- "spec/rails3/spec_helper.rb",
172
- "spec/rails3/user_activation_spec.rb",
173
- "spec/rails3/user_activity_logging_spec.rb",
174
- "spec/rails3/user_brute_force_protection_spec.rb",
175
- "spec/rails3/user_remember_me_spec.rb",
176
- "spec/rails3/user_reset_password_spec.rb",
177
- "spec/rails3/user_spec.rb",
175
+ "spec/rails3/app_root/spec/controller_activity_logging_spec.rb",
176
+ "spec/rails3/app_root/spec/controller_brute_force_protection_spec.rb",
177
+ "spec/rails3/app_root/spec/controller_http_basic_auth_spec.rb",
178
+ "spec/rails3/app_root/spec/controller_oauth2_spec.rb",
179
+ "spec/rails3/app_root/spec/controller_oauth_spec.rb",
180
+ "spec/rails3/app_root/spec/controller_remember_me_spec.rb",
181
+ "spec/rails3/app_root/spec/controller_session_timeout_spec.rb",
182
+ "spec/rails3/app_root/spec/controller_spec.rb",
183
+ "spec/rails3/app_root/spec/spec_helper.orig.rb",
184
+ "spec/rails3/app_root/spec/spec_helper.rb",
185
+ "spec/rails3/app_root/spec/user_activation_spec.rb",
186
+ "spec/rails3/app_root/spec/user_activity_logging_spec.rb",
187
+ "spec/rails3/app_root/spec/user_brute_force_protection_spec.rb",
188
+ "spec/rails3/app_root/spec/user_oauth_spec.rb",
189
+ "spec/rails3/app_root/spec/user_remember_me_spec.rb",
190
+ "spec/rails3/app_root/spec/user_reset_password_spec.rb",
191
+ "spec/rails3/app_root/spec/user_spec.rb",
178
192
  "spec/sorcery_crypto_providers_spec.rb",
179
193
  "spec/spec_helper.rb"
180
194
  ]
@@ -183,7 +197,10 @@ Gem::Specification.new do |s|
183
197
  s.specification_version = 3
184
198
 
185
199
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
186
- s.add_development_dependency(%q<rails>, [">= 3.0.0"])
200
+ s.add_runtime_dependency(%q<rails>, [">= 3.0.0"])
201
+ s.add_runtime_dependency(%q<json>, [">= 1.5.1"])
202
+ s.add_runtime_dependency(%q<oauth>, [">= 0.4.4"])
203
+ s.add_runtime_dependency(%q<oauth2>, [">= 0.1.1"])
187
204
  s.add_development_dependency(%q<rspec>, ["~> 2.3.0"])
188
205
  s.add_development_dependency(%q<rspec-rails>, [">= 0"])
189
206
  s.add_development_dependency(%q<ruby-debug19>, [">= 0"])
@@ -193,8 +210,13 @@ Gem::Specification.new do |s|
193
210
  s.add_development_dependency(%q<jeweler>, ["~> 1.5.2"])
194
211
  s.add_development_dependency(%q<simplecov>, [">= 0.3.8"])
195
212
  s.add_runtime_dependency(%q<bcrypt-ruby>, ["~> 2.1.4"])
213
+ s.add_runtime_dependency(%q<oauth>, [">= 0.4.4"])
214
+ s.add_runtime_dependency(%q<oauth2>, [">= 0.1.1"])
196
215
  else
197
216
  s.add_dependency(%q<rails>, [">= 3.0.0"])
217
+ s.add_dependency(%q<json>, [">= 1.5.1"])
218
+ s.add_dependency(%q<oauth>, [">= 0.4.4"])
219
+ s.add_dependency(%q<oauth2>, [">= 0.1.1"])
198
220
  s.add_dependency(%q<rspec>, ["~> 2.3.0"])
199
221
  s.add_dependency(%q<rspec-rails>, [">= 0"])
200
222
  s.add_dependency(%q<ruby-debug19>, [">= 0"])
@@ -204,9 +226,14 @@ Gem::Specification.new do |s|
204
226
  s.add_dependency(%q<jeweler>, ["~> 1.5.2"])
205
227
  s.add_dependency(%q<simplecov>, [">= 0.3.8"])
206
228
  s.add_dependency(%q<bcrypt-ruby>, ["~> 2.1.4"])
229
+ s.add_dependency(%q<oauth>, [">= 0.4.4"])
230
+ s.add_dependency(%q<oauth2>, [">= 0.1.1"])
207
231
  end
208
232
  else
209
233
  s.add_dependency(%q<rails>, [">= 3.0.0"])
234
+ s.add_dependency(%q<json>, [">= 1.5.1"])
235
+ s.add_dependency(%q<oauth>, [">= 0.4.4"])
236
+ s.add_dependency(%q<oauth2>, [">= 0.1.1"])
210
237
  s.add_dependency(%q<rspec>, ["~> 2.3.0"])
211
238
  s.add_dependency(%q<rspec-rails>, [">= 0"])
212
239
  s.add_dependency(%q<ruby-debug19>, [">= 0"])
@@ -216,6 +243,8 @@ Gem::Specification.new do |s|
216
243
  s.add_dependency(%q<jeweler>, ["~> 1.5.2"])
217
244
  s.add_dependency(%q<simplecov>, [">= 0.3.8"])
218
245
  s.add_dependency(%q<bcrypt-ruby>, ["~> 2.1.4"])
246
+ s.add_dependency(%q<oauth>, [">= 0.4.4"])
247
+ s.add_dependency(%q<oauth2>, [">= 0.1.1"])
219
248
  end
220
249
  end
221
250
 
data/spec/Gemfile CHANGED
@@ -2,8 +2,9 @@ source 'http://rubygems.org'
2
2
 
3
3
  gem "rails", '3.0.3'
4
4
  gem 'bcrypt-ruby', :require => 'bcrypt'
5
- gem "sorcery", '0.1.3', :path => '../../../'
6
-
5
+ gem "sorcery", '0.2.1', :path => '../../../'
6
+ gem 'oauth', ">= 0.4.4"
7
+ gem 'oauth2', ">= 0.1.1"
7
8
  group :development do
8
9
  gem 'rspec'
9
10
  gem 'ruby-debug19'
data/spec/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: ../../../
3
3
  specs:
4
- sorcery (0.1.3)
4
+ sorcery (0.2.1)
5
5
 
6
6
  GEM
7
7
  remote: http://rubygems.org/
@@ -33,6 +33,7 @@ GEM
33
33
  activemodel (= 3.0.3)
34
34
  activesupport (= 3.0.3)
35
35
  activesupport (3.0.3)
36
+ addressable (2.2.4)
36
37
  archive-tar-minitar (0.5.2)
37
38
  arel (2.0.6)
38
39
  bcrypt-ruby (2.1.3)
@@ -41,6 +42,10 @@ GEM
41
42
  diff-lcs (1.1.2)
42
43
  erubis (2.6.6)
43
44
  abstract (>= 1.0.0)
45
+ faraday (0.5.5)
46
+ addressable (~> 2.2.4)
47
+ multipart-post (~> 1.1.0)
48
+ rack (< 2, >= 1.1.0)
44
49
  i18n (0.5.0)
45
50
  linecache19 (0.5.11)
46
51
  ruby_core_source (>= 0.1.4)
@@ -50,6 +55,12 @@ GEM
50
55
  mime-types (~> 1.16)
51
56
  treetop (~> 1.4.8)
52
57
  mime-types (1.16)
58
+ multi_json (0.0.5)
59
+ multipart-post (1.1.0)
60
+ oauth (0.4.4)
61
+ oauth2 (0.1.1)
62
+ faraday (~> 0.5.0)
63
+ multi_json (~> 0.0.4)
53
64
  polyglot (0.3.1)
54
65
  rack (1.2.1)
55
66
  rack-mount (0.6.13)
@@ -101,8 +112,10 @@ PLATFORMS
101
112
 
102
113
  DEPENDENCIES
103
114
  bcrypt-ruby
115
+ oauth (>= 0.4.4)
116
+ oauth2 (>= 0.1.1)
104
117
  rails (= 3.0.3)
105
118
  rspec
106
119
  ruby-debug19
107
120
  simplecov (>= 0.3.8)
108
- sorcery (= 0.1.3)!
121
+ sorcery (= 0.2.1)!
@@ -0,0 +1 @@
1
+ --colour
@@ -2,12 +2,14 @@ source 'http://rubygems.org'
2
2
 
3
3
  gem 'rails', '3.0.3'
4
4
  gem 'sqlite3-ruby', :require => 'sqlite3'
5
- gem "sorcery", '0.1.3', :path => '../../../'
5
+ gem "sorcery", '0.2.1', :path => '../../../'
6
6
  gem 'bcrypt-ruby', '~> 2.1.4', :require => 'bcrypt'
7
-
8
- group :development do
7
+ gem 'oauth', ">= 0.4.4"
8
+ gem 'oauth2', ">= 0.1.1"
9
+ group :development, :test do
9
10
  gem 'rspec'
10
11
  gem 'rspec-rails'
11
12
  gem 'ruby-debug19'
12
13
  gem 'simplecov', '>= 0.3.8', :require => false # Will install simplecov-html as a dependency
14
+ gem 'spork', '~> 0.9.0.rc'
13
15
  end
@@ -1,7 +1,14 @@
1
1
  PATH
2
2
  remote: ../../../
3
3
  specs:
4
- sorcery (0.1.3)
4
+ sorcery (0.2.1)
5
+ bcrypt-ruby (~> 2.1.4)
6
+ json (>= 1.5.1)
7
+ oauth (>= 0.4.4)
8
+ oauth (>= 0.4.4)
9
+ oauth2 (>= 0.1.1)
10
+ oauth2 (>= 0.1.1)
11
+ rails (>= 3.0.0)
5
12
 
6
13
  GEM
7
14
  remote: http://rubygems.org/
@@ -33,6 +40,7 @@ GEM
33
40
  activemodel (= 3.0.3)
34
41
  activesupport (= 3.0.3)
35
42
  activesupport (3.0.3)
43
+ addressable (2.2.4)
36
44
  archive-tar-minitar (0.5.2)
37
45
  arel (2.0.6)
38
46
  bcrypt-ruby (2.1.4)
@@ -41,7 +49,12 @@ GEM
41
49
  diff-lcs (1.1.2)
42
50
  erubis (2.6.6)
43
51
  abstract (>= 1.0.0)
52
+ faraday (0.5.5)
53
+ addressable (~> 2.2.4)
54
+ multipart-post (~> 1.1.0)
55
+ rack (< 2, >= 1.1.0)
44
56
  i18n (0.5.0)
57
+ json (1.5.1)
45
58
  linecache19 (0.5.11)
46
59
  ruby_core_source (>= 0.1.4)
47
60
  mail (2.2.13)
@@ -50,6 +63,12 @@ GEM
50
63
  mime-types (~> 1.16)
51
64
  treetop (~> 1.4.8)
52
65
  mime-types (1.16)
66
+ multi_json (0.0.5)
67
+ multipart-post (1.1.0)
68
+ oauth (0.4.4)
69
+ oauth2 (0.1.1)
70
+ faraday (~> 0.5.0)
71
+ multi_json (~> 0.0.4)
53
72
  polyglot (0.3.1)
54
73
  rack (1.2.1)
55
74
  rack-mount (0.6.13)
@@ -96,6 +115,7 @@ GEM
96
115
  simplecov (0.3.9)
97
116
  simplecov-html (>= 0.3.7)
98
117
  simplecov-html (0.3.9)
118
+ spork (0.9.0.rc3)
99
119
  sqlite3-ruby (1.3.2)
100
120
  thor (0.14.6)
101
121
  treetop (1.4.9)
@@ -107,10 +127,13 @@ PLATFORMS
107
127
 
108
128
  DEPENDENCIES
109
129
  bcrypt-ruby (~> 2.1.4)
130
+ oauth (>= 0.4.4)
131
+ oauth2 (>= 0.1.1)
110
132
  rails (= 3.0.3)
111
133
  rspec
112
134
  rspec-rails
113
135
  ruby-debug19
114
136
  simplecov (>= 0.3.8)
115
- sorcery (= 0.1.3)!
137
+ sorcery (= 0.2.1)!
138
+ spork (~> 0.9.0.rc)
116
139
  sqlite3-ruby
@@ -1,3 +1,5 @@
1
+ require 'oauth'
2
+
1
3
  class ApplicationController < ActionController::Base
2
4
  protect_from_forgery
3
5
 
@@ -18,6 +20,11 @@ class ApplicationController < ActionController::Base
18
20
  render :text => ""
19
21
  end
20
22
 
23
+ def test_return_to
24
+ @user = login(params[:username], params[:password])
25
+ return_or_redirect_to(:index, :notice => 'haha!')
26
+ end
27
+
21
28
  def test_logout
22
29
  logout
23
30
  render :text => ""
@@ -43,7 +50,7 @@ class ApplicationController < ActionController::Base
43
50
  end
44
51
 
45
52
  def test_login_from_cookie
46
- @user = logged_in_user
53
+ @user = current_user
47
54
  render :text => ""
48
55
  end
49
56
 
@@ -59,6 +66,40 @@ class ApplicationController < ActionController::Base
59
66
  render :text => "HTTP Basic Auth"
60
67
  end
61
68
 
69
+ def auth_at_provider_test
70
+ auth_at_provider(:twitter)
71
+ end
72
+
73
+ def auth_at_provider_test2
74
+ auth_at_provider(:facebook)
75
+ end
76
+
77
+ def test_login_from_access_token
78
+ if @user = login_from_access_token(:twitter)
79
+ redirect_to "bla", :notice => "Success!"
80
+ else
81
+ redirect_to "blu", :alert => "Failed!"
82
+ end
83
+ end
84
+
85
+ def test_login_from_access_token2
86
+ if @user = login_from_access_token(:facebook)
87
+ redirect_to "bla", :notice => "Success!"
88
+ else
89
+ redirect_to "blu", :alert => "Failed!"
90
+ end
91
+ end
92
+
93
+ def test_create_from_provider
94
+ provider = params[:provider]
95
+ login_from_access_token(provider)
96
+ if @user = create_from_provider!(provider)
97
+ redirect_to "bla", :notice => "Success!"
98
+ else
99
+ redirect_to "blu", :alert => "Failed!"
100
+ end
101
+ end
102
+
62
103
  protected
63
104
 
64
105
 
@@ -0,0 +1,3 @@
1
+ class Authentication < ActiveRecord::Base
2
+ belongs_to :user
3
+ end
@@ -1,3 +1,6 @@
1
1
  class User < ActiveRecord::Base
2
- #activate_sorcery!
2
+ attr_accessible :email, :password, :password_confirmation, :authentications_attributes
3
+
4
+ has_many :authentications, :dependent => :destroy
5
+ accepts_nested_attributes_for :authentications
3
6
  end
@@ -38,9 +38,7 @@ module AppRoot
38
38
 
39
39
  # Configure sensitive parameters which will be filtered from the log file.
40
40
  config.filter_parameters += [:password]
41
-
42
- config.root = File.expand_path('../..', __FILE__)
43
-
41
+
44
42
  config.action_mailer.delivery_method = :test
45
43
 
46
44
  config.active_support.deprecation = :stderr
@@ -1,14 +1,5 @@
1
1
  AppRoot::Application.routes.draw do
2
2
  root :to => "application#index"
3
- match '/test_login', :to => "application#test_login"
4
- match '/test_logout', :to => "application#test_logout"
5
- match '/some_action', :to => "application#some_action"
6
- match '/test_logout_with_remember', :to => "application#test_logout_with_remember"
7
- match '/test_login_with_remember', :to => 'application#test_login_with_remember'
8
- match '/test_login_with_remember_in_login', :to => 'application#test_login_with_remember_in_login'
9
- match '/test_login_from_cookie', :to => 'application#test_login_from_cookie'
10
- match '/test_should_be_logged_in', :to => 'application#test_should_be_logged_in'
11
- match '/test_http_basic_auth', :to => 'application#test_http_basic_auth'
12
3
  # The priority is based upon order of creation:
13
4
  # first created -> highest priority.
14
5
 
@@ -64,5 +55,5 @@ AppRoot::Application.routes.draw do
64
55
 
65
56
  # This is a legacy wild controller route that's not recommended for RESTful applications.
66
57
  # Note: This route will make all actions in every controller accessible via GET requests.
67
- # match ':controller(/:action(/:id(.:format)))'
58
+ match ':controller(/:action(/:id(.:format)))'
68
59
  end
@@ -1,15 +1,17 @@
1
1
  class AddActivationToUsers < ActiveRecord::Migration
2
2
  def self.up
3
3
  add_column :users, :activation_state, :string, :default => nil
4
- add_column :users, :activation_code, :string, :default => nil
4
+ add_column :users, :activation_token, :string, :default => nil
5
+ add_column :users, :activation_token_expires_at, :datetime, :default => nil
5
6
 
6
- add_index :users, :activation_code
7
+ add_index :users, :activation_token
7
8
  end
8
9
 
9
10
  def self.down
10
- remove_index :users, :activation_code
11
+ remove_index :users, :activation_token
11
12
 
12
- remove_column :users, :activation_code
13
+ remove_column :users, :activation_token_expires_at
14
+ remove_column :users, :activation_token
13
15
  remove_column :users, :activation_state
14
16
  end
15
17
  end
@@ -1,10 +1,10 @@
1
1
  class CreateUsers < ActiveRecord::Migration
2
2
  def self.up
3
3
  create_table :users do |t|
4
- t.string :username
5
- t.string :email, :null => false
6
- t.string :crypted_password
7
- t.string :salt
4
+ t.string :username, :null => false
5
+ t.string :email, :default => nil
6
+ t.string :crypted_password, :default => nil
7
+ t.string :salt, :default => nil
8
8
 
9
9
  t.timestamps
10
10
  end
@@ -0,0 +1,14 @@
1
+ class CreateAuthentications < ActiveRecord::Migration
2
+ def self.up
3
+ create_table :authentications do |t|
4
+ t.integer :user_id, :null => false
5
+ t.string :provider, :uid, :null => false
6
+
7
+ t.timestamps
8
+ end
9
+ end
10
+
11
+ def self.down
12
+ drop_table :authentications
13
+ end
14
+ end