sorcery 0.8.1 → 0.8.2

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of sorcery might be problematic. Click here for more details.

Files changed (43) hide show
  1. data/Gemfile +4 -4
  2. data/Gemfile.lock +5 -22
  3. data/README.rdoc +2 -2
  4. data/Rakefile +1 -0
  5. data/VERSION +1 -1
  6. data/lib/generators/sorcery/templates/initializer.rb +24 -13
  7. data/lib/generators/sorcery/templates/migration/activity_logging.rb +2 -0
  8. data/lib/sorcery/controller/submodules/activity_logging.rb +12 -1
  9. data/lib/sorcery/controller/submodules/external/protocols/oauth1.rb +14 -3
  10. data/lib/sorcery/controller/submodules/external/protocols/oauth2.rb +5 -1
  11. data/lib/sorcery/controller/submodules/external/providers/base.rb +21 -0
  12. data/lib/sorcery/controller/submodules/external/providers/facebook.rb +13 -12
  13. data/lib/sorcery/controller/submodules/external/providers/github.rb +4 -3
  14. data/lib/sorcery/controller/submodules/external/providers/google.rb +4 -3
  15. data/lib/sorcery/controller/submodules/external/providers/linkedin.rb +13 -12
  16. data/lib/sorcery/controller/submodules/external/providers/liveid.rb +5 -4
  17. data/lib/sorcery/controller/submodules/external/providers/twitter.rb +15 -14
  18. data/lib/sorcery/controller/submodules/external/providers/vk.rb +6 -5
  19. data/lib/sorcery/controller/submodules/external/providers/xing.rb +97 -0
  20. data/lib/sorcery/controller/submodules/external.rb +72 -39
  21. data/lib/sorcery/controller.rb +5 -2
  22. data/lib/sorcery/model/submodules/activity_logging.rb +3 -0
  23. data/lib/sorcery/model/submodules/brute_force_protection.rb +14 -12
  24. data/lib/sorcery/model.rb +1 -1
  25. data/lib/sorcery/railties/tasks.rake +1 -7
  26. data/lib/sorcery.rb +3 -1
  27. data/sorcery.gemspec +11 -12
  28. data/spec/Gemfile +1 -1
  29. data/spec/Gemfile.lock +1 -1
  30. data/spec/rails3/Gemfile.lock +3 -3
  31. data/spec/rails3/app/models/user.rb +1 -1
  32. data/spec/rails3/app/views/sorcery_mailer/send_unlock_token_email.text.erb +1 -1
  33. data/spec/rails3/db/migrate/activity_logging/20101224223624_add_activity_logging_to_users.rb +2 -0
  34. data/spec/rails3/spec/controller_activity_logging_spec.rb +15 -0
  35. data/spec/rails3/spec/controller_brute_force_protection_spec.rb +14 -6
  36. data/spec/rails3/spec/controller_spec.rb +32 -27
  37. data/spec/rails3_mongo_mapper/Gemfile.lock +3 -3
  38. data/spec/rails3_mongo_mapper/spec/controller_spec.rb +32 -27
  39. data/spec/rails3_mongoid/Gemfile.lock +3 -3
  40. data/spec/rails3_mongoid/spec/controller_activity_logging_spec.rb +6 -0
  41. data/spec/rails3_mongoid/spec/controller_spec.rb +33 -28
  42. data/spec/shared_examples/user_activity_logging_shared_examples.rb +5 -0
  43. metadata +138 -59
@@ -1,28 +1,28 @@
1
1
  require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
2
 
3
3
  describe ApplicationController do
4
-
4
+
5
5
  # ----------------- PLUGIN CONFIGURATION -----------------------
6
6
  describe ApplicationController, "plugin configuration" do
7
7
  before(:all) do
8
8
  sorcery_reload!
9
9
  end
10
-
10
+
11
11
  after(:each) do
12
12
  Sorcery::Controller::Config.reset!
13
13
  sorcery_reload!
14
14
  end
15
-
15
+
16
16
  it "should enable configuration option 'user_class'" do
17
17
  sorcery_controller_property_set(:user_class, "TestUser")
18
18
  Sorcery::Controller::Config.user_class.should == "TestUser"
19
19
  end
20
-
20
+
21
21
  it "should enable configuration option 'not_authenticated_action'" do
22
22
  sorcery_controller_property_set(:not_authenticated_action, :my_action)
23
23
  Sorcery::Controller::Config.not_authenticated_action.should equal(:my_action)
24
24
  end
25
-
25
+
26
26
  end
27
27
 
28
28
  # ----------------- PLUGIN ACTIVATED -----------------------
@@ -35,7 +35,7 @@ describe ApplicationController do
35
35
  before(:each) do
36
36
  create_new_user
37
37
  end
38
-
38
+
39
39
  after(:each) do
40
40
  Sorcery::Controller::Config.reset!
41
41
  sorcery_reload!
@@ -43,27 +43,27 @@ describe ApplicationController do
43
43
  sorcery_controller_property_set(:user_class, User)
44
44
  sorcery_model_property_set(:username_attribute_names, [:username, :email])
45
45
  end
46
-
46
+
47
47
  specify { should respond_to(:login) }
48
48
 
49
49
  specify { should respond_to(:logout) }
50
-
50
+
51
51
  specify { should respond_to(:logged_in?) }
52
-
52
+
53
53
  specify { should respond_to(:current_user) }
54
-
54
+
55
55
  it "login(username,password) should return the user when success and set the session with user.id" do
56
56
  get :test_login, :username => 'gizmo', :password => 'secret'
57
57
  assigns[:user].should == @user
58
58
  session[:user_id].should == @user.id
59
59
  end
60
-
60
+
61
61
  it "login(email,password) should return the user when success and set the session with user.id" do
62
62
  get :test_login, :username => 'bla@bla.com', :password => 'secret'
63
63
  assigns[:user].should == @user
64
64
  session[:user_id].should == @user.id
65
65
  end
66
-
66
+
67
67
  it "login(username,password) should return nil and not set the session when failure" do
68
68
  get :test_login, :username => 'gizmo', :password => 'opensesame!'
69
69
  assigns[:user].should be_nil
@@ -75,14 +75,19 @@ describe ApplicationController do
75
75
  assigns[:user].should be_nil
76
76
  session[:user_id].should be_nil
77
77
  end
78
-
78
+
79
+ it "login(email,password) should return the user when success and set the session with the _csrf_token" do
80
+ get :test_login, :username => 'gizmo', :password => 'secret'
81
+ session[:_csrf_token].should_not be_nil
82
+ end
83
+
79
84
  it "login(username,password) should return the user and set the session with user.id when upper case username and config is downcase before authenticating" do
80
85
  sorcery_model_property_set(:downcase_username_before_authenticating, true)
81
86
  get :test_login, :username => 'GIZMO', :password => 'secret'
82
87
  assigns[:user].should == @user
83
88
  session[:user_id].should == @user.id
84
89
  end
85
-
90
+
86
91
  it "login(username,password) should return nil and not set the session when user was created with upper case username, config is default, and log in username is lower case" do
87
92
  create_new_user({:username => 'GIZMO1', :email => "bla1@bla.com", :password => 'secret1'})
88
93
  get :test_login, :username => 'gizmo1', :password => 'secret1'
@@ -104,28 +109,28 @@ describe ApplicationController do
104
109
  get :test_logout
105
110
  session[:user_id].should be_nil
106
111
  end
107
-
112
+
108
113
  it "logged_in? should return true if logged in" do
109
114
  session[:user_id] = @user.id
110
115
  subject.logged_in?.should be_true
111
116
  end
112
-
117
+
113
118
  it "logged_in? should return false if not logged in" do
114
119
  session[:user_id] = nil
115
120
  subject.logged_in?.should be_false
116
121
  end
117
-
122
+
118
123
  it "current_user should return the user instance if logged in" do
119
124
  create_new_user
120
125
  session[:user_id] = @user.id
121
126
  subject.current_user.should == @user
122
127
  end
123
-
128
+
124
129
  it "current_user should return false if not logged in" do
125
130
  session[:user_id] = nil
126
131
  subject.current_user.should == false
127
132
  end
128
-
133
+
129
134
  specify { should respond_to(:require_login) }
130
135
 
131
136
  it "should call the configured 'not_authenticated_action' when session[:user_id] isn't found" do
@@ -136,40 +141,40 @@ describe ApplicationController do
136
141
  user.destroy
137
142
  sorcery_controller_property_set(:not_authenticated_action, :test_not_authenticated_action)
138
143
  get :test_logout
139
- response.body.should == "test_not_authenticated_action"
144
+ response.body.should == "test_not_authenticated_action"
140
145
  end
141
-
146
+
142
147
  it "should call the configured 'not_authenticated_action' when authenticate before_filter fails" do
143
148
  session[:user_id] = nil
144
149
  sorcery_controller_property_set(:not_authenticated_action, :test_not_authenticated_action)
145
150
  get :test_logout
146
151
  response.body.should == "test_not_authenticated_action"
147
152
  end
148
-
153
+
149
154
  it "require_login before_filter should save the url that the user originally wanted" do
150
155
  get :some_action
151
156
  session[:return_to_url].should == "http://test.host/application/some_action"
152
157
  response.should redirect_to("http://test.host/")
153
158
  end
154
-
159
+
155
160
  it "require_login before_filter should not save the url that the user originally wanted upon all non-get http methods" do
156
161
  [:post, :put, :delete].each do |m|
157
162
  self.send(m, :some_action)
158
163
  session[:return_to_url].should be_nil
159
164
  end
160
165
  end
161
-
166
+
162
167
  it "on successful login the user should be redirected to the url he originally wanted" do
163
168
  session[:return_to_url] = "http://test.host/some_action"
164
169
  post :test_return_to, :username => 'gizmo', :password => 'secret'
165
170
  response.should redirect_to("http://test.host/some_action")
166
171
  flash[:notice].should == "haha!"
167
172
  end
168
-
169
-
173
+
174
+
170
175
  # --- login_user(user) ---
171
176
  specify { should respond_to(:auto_login) }
172
-
177
+
173
178
  it "auto_login(user) should login a user instance" do
174
179
  create_new_user
175
180
  session[:user_id] = nil
@@ -177,5 +182,5 @@ describe ApplicationController do
177
182
  subject.logged_in?.should be_true
178
183
  end
179
184
  end
180
-
185
+
181
186
  end
@@ -23,5 +23,10 @@ shared_examples_for "rails_3_activity_logging_model" do
23
23
  sorcery_model_property_set(:last_activity_at_attribute_name, :activity_time)
24
24
  User.sorcery_config.last_activity_at_attribute_name.should equal(:activity_time)
25
25
  end
26
+
27
+ it "should allow configuration option 'last_login_from_ip_adress'" do
28
+ sorcery_model_property_set(:last_login_from_ip_address_name, :ip_address)
29
+ User.sorcery_config.last_login_from_ip_address_name.should equal(:ip_address)
30
+ end
26
31
  end
27
32
  end
metadata CHANGED
@@ -1,8 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sorcery
3
3
  version: !ruby/object:Gem::Version
4
+ hash: 59
4
5
  prerelease:
5
- version: 0.8.1
6
+ segments:
7
+ - 0
8
+ - 8
9
+ - 2
10
+ version: 0.8.2
6
11
  platform: ruby
7
12
  authors:
8
13
  - Noam Ben Ari
@@ -10,206 +15,272 @@ autorequire:
10
15
  bindir: bin
11
16
  cert_chain: []
12
17
 
13
- date: 2013-01-25 00:00:00 Z
18
+ date: 2013-07-05 00:00:00 Z
14
19
  dependencies:
15
20
  - !ruby/object:Gem::Dependency
16
- name: oauth
21
+ prerelease: false
17
22
  requirement: &id001 !ruby/object:Gem::Requirement
18
23
  none: false
19
24
  requirements:
20
25
  - - ~>
21
26
  - !ruby/object:Gem::Version
27
+ hash: 7
28
+ segments:
29
+ - 0
30
+ - 4
31
+ - 4
22
32
  version: 0.4.4
23
33
  type: :runtime
24
- prerelease: false
34
+ name: oauth
25
35
  version_requirements: *id001
26
36
  - !ruby/object:Gem::Dependency
27
- name: oauth2
37
+ prerelease: false
28
38
  requirement: &id002 !ruby/object:Gem::Requirement
29
39
  none: false
30
40
  requirements:
31
41
  - - ~>
32
42
  - !ruby/object:Gem::Version
43
+ hash: 63
44
+ segments:
45
+ - 0
46
+ - 8
47
+ - 0
33
48
  version: 0.8.0
34
49
  type: :runtime
35
- prerelease: false
50
+ name: oauth2
36
51
  version_requirements: *id002
37
52
  - !ruby/object:Gem::Dependency
38
- name: bcrypt-ruby
53
+ prerelease: false
39
54
  requirement: &id003 !ruby/object:Gem::Requirement
40
55
  none: false
41
56
  requirements:
42
57
  - - ~>
43
58
  - !ruby/object:Gem::Version
59
+ hash: 7
60
+ segments:
61
+ - 3
62
+ - 0
63
+ - 0
44
64
  version: 3.0.0
45
65
  type: :runtime
46
- prerelease: false
66
+ name: bcrypt-ruby
47
67
  version_requirements: *id003
48
68
  - !ruby/object:Gem::Dependency
49
- name: abstract
69
+ prerelease: false
50
70
  requirement: &id004 !ruby/object:Gem::Requirement
51
71
  none: false
52
72
  requirements:
53
73
  - - ">="
54
74
  - !ruby/object:Gem::Version
75
+ hash: 23
76
+ segments:
77
+ - 1
78
+ - 0
79
+ - 0
55
80
  version: 1.0.0
56
81
  type: :development
57
- prerelease: false
82
+ name: abstract
58
83
  version_requirements: *id004
59
84
  - !ruby/object:Gem::Dependency
60
- name: rails
85
+ prerelease: false
61
86
  requirement: &id005 !ruby/object:Gem::Requirement
62
87
  none: false
63
88
  requirements:
64
89
  - - ">="
65
90
  - !ruby/object:Gem::Version
91
+ hash: 7
92
+ segments:
93
+ - 3
94
+ - 0
95
+ - 0
66
96
  version: 3.0.0
67
97
  type: :development
68
- prerelease: false
98
+ name: rails
69
99
  version_requirements: *id005
70
100
  - !ruby/object:Gem::Dependency
71
- name: json
101
+ prerelease: false
72
102
  requirement: &id006 !ruby/object:Gem::Requirement
73
103
  none: false
74
104
  requirements:
75
105
  - - ">="
76
106
  - !ruby/object:Gem::Version
77
- version: 1.5.1
107
+ hash: 5
108
+ segments:
109
+ - 1
110
+ - 7
111
+ - 7
112
+ version: 1.7.7
78
113
  type: :development
79
- prerelease: false
114
+ name: json
80
115
  version_requirements: *id006
81
116
  - !ruby/object:Gem::Dependency
82
- name: rspec
117
+ prerelease: false
83
118
  requirement: &id007 !ruby/object:Gem::Requirement
84
119
  none: false
85
120
  requirements:
86
121
  - - ~>
87
122
  - !ruby/object:Gem::Version
123
+ hash: 27
124
+ segments:
125
+ - 2
126
+ - 5
127
+ - 0
88
128
  version: 2.5.0
89
129
  type: :development
90
- prerelease: false
130
+ name: rspec
91
131
  version_requirements: *id007
92
132
  - !ruby/object:Gem::Dependency
93
- name: rspec-rails
133
+ prerelease: false
94
134
  requirement: &id008 !ruby/object:Gem::Requirement
95
135
  none: false
96
136
  requirements:
97
137
  - - ~>
98
138
  - !ruby/object:Gem::Version
139
+ hash: 27
140
+ segments:
141
+ - 2
142
+ - 5
143
+ - 0
99
144
  version: 2.5.0
100
145
  type: :development
101
- prerelease: false
146
+ name: rspec-rails
102
147
  version_requirements: *id008
103
148
  - !ruby/object:Gem::Dependency
104
- name: ruby-debug19
149
+ prerelease: false
105
150
  requirement: &id009 !ruby/object:Gem::Requirement
106
151
  none: false
107
152
  requirements:
108
153
  - - ">="
109
154
  - !ruby/object:Gem::Version
155
+ hash: 3
156
+ segments:
157
+ - 0
110
158
  version: "0"
111
159
  type: :development
112
- prerelease: false
160
+ name: sqlite3
113
161
  version_requirements: *id009
114
162
  - !ruby/object:Gem::Dependency
115
- name: sqlite3-ruby
163
+ prerelease: false
116
164
  requirement: &id010 !ruby/object:Gem::Requirement
117
165
  none: false
118
166
  requirements:
119
- - - ">="
167
+ - - ~>
120
168
  - !ruby/object:Gem::Version
121
- version: "0"
169
+ hash: 7
170
+ segments:
171
+ - 0
172
+ - 6
173
+ - 0
174
+ version: 0.6.0
122
175
  type: :development
123
- prerelease: false
176
+ name: yard
124
177
  version_requirements: *id010
125
178
  - !ruby/object:Gem::Dependency
126
- name: yard
179
+ prerelease: false
127
180
  requirement: &id011 !ruby/object:Gem::Requirement
128
181
  none: false
129
182
  requirements:
130
- - - ~>
183
+ - - ">="
131
184
  - !ruby/object:Gem::Version
132
- version: 0.6.0
185
+ hash: 19
186
+ segments:
187
+ - 1
188
+ - 1
189
+ - 0
190
+ version: 1.1.0
133
191
  type: :development
134
- prerelease: false
192
+ name: bundler
135
193
  version_requirements: *id011
136
194
  - !ruby/object:Gem::Dependency
137
- name: bundler
195
+ prerelease: false
138
196
  requirement: &id012 !ruby/object:Gem::Requirement
139
197
  none: false
140
198
  requirements:
141
- - - ">="
199
+ - - ~>
142
200
  - !ruby/object:Gem::Version
143
- version: 1.1.0
201
+ hash: 49
202
+ segments:
203
+ - 1
204
+ - 8
205
+ - 3
206
+ version: 1.8.3
144
207
  type: :development
145
- prerelease: false
208
+ name: jeweler
146
209
  version_requirements: *id012
147
210
  - !ruby/object:Gem::Dependency
148
- name: jeweler
211
+ prerelease: false
149
212
  requirement: &id013 !ruby/object:Gem::Requirement
150
213
  none: false
151
214
  requirements:
152
- - - ~>
215
+ - - ">="
153
216
  - !ruby/object:Gem::Version
154
- version: 1.8.3
217
+ hash: 3
218
+ segments:
219
+ - 0
220
+ - 3
221
+ - 8
222
+ version: 0.3.8
155
223
  type: :development
156
- prerelease: false
224
+ name: simplecov
157
225
  version_requirements: *id013
158
226
  - !ruby/object:Gem::Dependency
159
- name: simplecov
227
+ prerelease: false
160
228
  requirement: &id014 !ruby/object:Gem::Requirement
161
229
  none: false
162
230
  requirements:
163
231
  - - ">="
164
232
  - !ruby/object:Gem::Version
165
- version: 0.3.8
233
+ hash: 3
234
+ segments:
235
+ - 0
236
+ version: "0"
166
237
  type: :development
167
- prerelease: false
238
+ name: timecop
168
239
  version_requirements: *id014
169
240
  - !ruby/object:Gem::Dependency
170
- name: timecop
241
+ prerelease: false
171
242
  requirement: &id015 !ruby/object:Gem::Requirement
172
243
  none: false
173
244
  requirements:
174
245
  - - ">="
175
246
  - !ruby/object:Gem::Version
247
+ hash: 3
248
+ segments:
249
+ - 0
176
250
  version: "0"
177
251
  type: :development
178
- prerelease: false
252
+ name: capybara
179
253
  version_requirements: *id015
180
254
  - !ruby/object:Gem::Dependency
181
- name: capybara
255
+ prerelease: false
182
256
  requirement: &id016 !ruby/object:Gem::Requirement
183
257
  none: false
184
258
  requirements:
185
259
  - - ">="
186
260
  - !ruby/object:Gem::Version
261
+ hash: 3
262
+ segments:
263
+ - 0
187
264
  version: "0"
188
265
  type: :development
189
- prerelease: false
266
+ name: mongo_mapper
190
267
  version_requirements: *id016
191
268
  - !ruby/object:Gem::Dependency
192
- name: mongo_mapper
193
- requirement: &id017 !ruby/object:Gem::Requirement
194
- none: false
195
- requirements:
196
- - - ">="
197
- - !ruby/object:Gem::Version
198
- version: "0"
199
- type: :development
200
269
  prerelease: false
201
- version_requirements: *id017
202
- - !ruby/object:Gem::Dependency
203
- name: mongoid
204
- requirement: &id018 !ruby/object:Gem::Requirement
270
+ requirement: &id017 !ruby/object:Gem::Requirement
205
271
  none: false
206
272
  requirements:
207
273
  - - ~>
208
274
  - !ruby/object:Gem::Version
275
+ hash: 23
276
+ segments:
277
+ - 2
278
+ - 4
279
+ - 4
209
280
  version: 2.4.4
210
281
  type: :development
211
- prerelease: false
212
- version_requirements: *id018
282
+ name: mongoid
283
+ version_requirements: *id017
213
284
  description: Provides common authentication needs such as signing in/out, activating by email and resetting password.
214
285
  email: nbenari@gmail.com
215
286
  executables: []
@@ -247,6 +318,7 @@ files:
247
318
  - lib/sorcery/controller/submodules/external/protocols/certs/ca-bundle.crt
248
319
  - lib/sorcery/controller/submodules/external/protocols/oauth1.rb
249
320
  - lib/sorcery/controller/submodules/external/protocols/oauth2.rb
321
+ - lib/sorcery/controller/submodules/external/providers/base.rb
250
322
  - lib/sorcery/controller/submodules/external/providers/facebook.rb
251
323
  - lib/sorcery/controller/submodules/external/providers/github.rb
252
324
  - lib/sorcery/controller/submodules/external/providers/google.rb
@@ -254,6 +326,7 @@ files:
254
326
  - lib/sorcery/controller/submodules/external/providers/liveid.rb
255
327
  - lib/sorcery/controller/submodules/external/providers/twitter.rb
256
328
  - lib/sorcery/controller/submodules/external/providers/vk.rb
329
+ - lib/sorcery/controller/submodules/external/providers/xing.rb
257
330
  - lib/sorcery/controller/submodules/http_basic_auth.rb
258
331
  - lib/sorcery/controller/submodules/remember_me.rb
259
332
  - lib/sorcery/controller/submodules/session_timeout.rb
@@ -516,17 +589,23 @@ required_ruby_version: !ruby/object:Gem::Requirement
516
589
  requirements:
517
590
  - - ">="
518
591
  - !ruby/object:Gem::Version
592
+ hash: 3
593
+ segments:
594
+ - 0
519
595
  version: "0"
520
596
  required_rubygems_version: !ruby/object:Gem::Requirement
521
597
  none: false
522
598
  requirements:
523
599
  - - ">="
524
600
  - !ruby/object:Gem::Version
601
+ hash: 3
602
+ segments:
603
+ - 0
525
604
  version: "0"
526
605
  requirements: []
527
606
 
528
607
  rubyforge_project:
529
- rubygems_version: 1.8.21
608
+ rubygems_version: 1.8.24
530
609
  signing_key:
531
610
  specification_version: 3
532
611
  summary: Magical authentication for Rails 3 applications