devise_ldap_authenticatable 0.8.1 → 0.8.7

Sign up to get free protection for your applications and to get access to all the features.
@@ -16,7 +16,7 @@ describe 'Users' do
16
16
  reset_ldap_server!
17
17
  end
18
18
 
19
- describe "look up and ldap user" do
19
+ describe "look up an ldap user" do
20
20
  it "should return true for a user that does exist in LDAP" do
21
21
  assert_equal true, ::Devise::LDAP::Adapter.valid_login?('example.user@test.com')
22
22
  end
@@ -48,7 +48,7 @@ describe 'Users' do
48
48
  should_be_validated @user, "secret"
49
49
  @user.password = "changed"
50
50
  @user.change_password!("secret")
51
- should_be_validated @user, "changed", "password was not changed properly on the LDAP sevrer"
51
+ should_be_validated @user, "changed", "password was not changed properly on the LDAP server"
52
52
  end
53
53
 
54
54
  it "should not allow to change password if setting is false" do
@@ -66,9 +66,10 @@ describe 'Users' do
66
66
  assert(User.all.blank?, "There shouldn't be any users in the database")
67
67
  end
68
68
 
69
- it "should don't create user in the database" do
70
- @user = User.authenticate_with_ldap(:email => "example.user@test.com", :password => "secret")
69
+ it "should not create user in the database" do
70
+ @user = User.find_for_ldap_authentication(:email => "example.user@test.com", :password => "secret")
71
71
  assert(User.all.blank?)
72
+ assert(@user.new_record?)
72
73
  end
73
74
 
74
75
  describe "creating users is enabled" do
@@ -77,18 +78,19 @@ describe 'Users' do
77
78
  end
78
79
 
79
80
  it "should create a user in the database" do
80
- @user = User.authenticate_with_ldap(:email => "example.user@test.com", :password => "secret")
81
+ @user = User.find_for_ldap_authentication(:email => "example.user@test.com", :password => "secret")
81
82
  assert_equal(User.all.size, 1)
82
- User.all.collect(&:email).should include("example.user@test.com")
83
+ expect(User.all.collect(&:email)).to include("example.user@test.com")
84
+ assert(@user.persisted?)
83
85
  end
84
86
 
85
87
  it "should not create a user in the database if the password is wrong_secret" do
86
- @user = User.authenticate_with_ldap(:email => "example.user", :password => "wrong_secret")
88
+ @user = User.find_for_ldap_authentication(:email => "example.user", :password => "wrong_secret")
87
89
  assert(User.all.blank?, "There's users in the database")
88
90
  end
89
91
 
90
- it "should create a user if the user is not in LDAP" do
91
- @user = User.authenticate_with_ldap(:email => "wrong_secret.user@test.com", :password => "wrong_secret")
92
+ it "should not create a user if the user is not in LDAP" do
93
+ @user = User.find_for_ldap_authentication(:email => "wrong_secret.user@test.com", :password => "wrong_secret")
92
94
  assert(User.all.blank?, "There's users in the database")
93
95
  end
94
96
 
@@ -97,7 +99,7 @@ describe 'Users' do
97
99
  @user = Factory.create(:user)
98
100
 
99
101
  expect do
100
- User.authenticate_with_ldap(:email => "EXAMPLE.user@test.com", :password => "secret")
102
+ User.find_for_ldap_authentication(:email => "EXAMPLE.user@test.com", :password => "secret")
101
103
  end.to change { User.count }.by(1)
102
104
  end
103
105
 
@@ -106,15 +108,15 @@ describe 'Users' do
106
108
  @user = Factory.create(:user)
107
109
 
108
110
  expect do
109
- User.authenticate_with_ldap(:email => "EXAMPLE.user@test.com", :password => "secret")
111
+ User.find_for_ldap_authentication(:email => "EXAMPLE.user@test.com", :password => "secret")
110
112
  end.to_not change { User.count }
111
113
  end
112
114
 
113
115
  it "should create a user with downcased email in the database if case insensitivity matters" do
114
116
  ::Devise.case_insensitive_keys = [:email]
115
117
 
116
- @user = User.authenticate_with_ldap(:email => "EXAMPLE.user@test.com", :password => "secret")
117
- User.all.collect(&:email).should include("example.user@test.com")
118
+ @user = User.find_for_ldap_authentication(:email => "EXAMPLE.user@test.com", :password => "secret")
119
+ expect(User.all.collect(&:email)).to include("example.user@test.com")
118
120
  end
119
121
  end
120
122
 
@@ -133,32 +135,55 @@ describe 'Users' do
133
135
  end
134
136
 
135
137
  it "should admin should have the proper groups set" do
136
- @admin.ldap_groups.should include('cn=admins,ou=groups,dc=test,dc=com')
138
+ expect(@admin.ldap_groups).to include('cn=admins,ou=groups,dc=test,dc=com')
137
139
  end
138
140
 
139
141
  it "should user should not be allowed in" do
140
142
  should_not_be_validated @user, "secret"
141
143
  end
142
144
  end
143
-
145
+
144
146
  describe "check group membership" do
145
147
  before do
146
148
  @admin = Factory.create(:admin)
147
149
  @user = Factory.create(:user)
148
150
  end
149
-
151
+
150
152
  it "should return true for admin being in the admins group" do
151
153
  assert_equal true, @admin.in_ldap_group?('cn=admins,ou=groups,dc=test,dc=com')
152
154
  end
153
-
155
+
154
156
  it "should return false for admin being in the admins group using the 'foobar' group attribute" do
155
157
  assert_equal false, @admin.in_ldap_group?('cn=admins,ou=groups,dc=test,dc=com', 'foobar')
156
158
  end
157
-
159
+
160
+ it "should return true for user being in the users group" do
161
+ assert_equal true, @user.in_ldap_group?('cn=users,ou=groups,dc=test,dc=com')
162
+ end
163
+
164
+ it "should return false for user being in the admins group" do
165
+ assert_equal false, @user.in_ldap_group?('cn=admins,ou=groups,dc=test,dc=com')
166
+ end
167
+
168
+ it "should return false for a user being in a nonexistent group" do
169
+ assert_equal false, @user.in_ldap_group?('cn=thisgroupdoesnotexist,ou=groups,dc=test,dc=com')
170
+ end
171
+ end
172
+
173
+ describe "check group membership w/out admin bind" do
174
+ before do
175
+ @user = Factory.create(:user)
176
+ ::Devise.ldap_check_group_membership_without_admin = true
177
+ end
178
+
179
+ after do
180
+ ::Devise.ldap_check_group_membership_without_admin = false
181
+ end
182
+
158
183
  it "should return true for user being in the users group" do
159
184
  assert_equal true, @user.in_ldap_group?('cn=users,ou=groups,dc=test,dc=com')
160
- end
161
-
185
+ end
186
+
162
187
  it "should return false for user being in the admins group" do
163
188
  assert_equal false, @user.in_ldap_group?('cn=admins,ou=groups,dc=test,dc=com')
164
189
  end
@@ -166,8 +191,15 @@ describe 'Users' do
166
191
  it "should return false for a user being in a nonexistent group" do
167
192
  assert_equal false, @user.in_ldap_group?('cn=thisgroupdoesnotexist,ou=groups,dc=test,dc=com')
168
193
  end
194
+
195
+ # TODO: add a test that confirms the user's own binding is used rather
196
+ # than the admin binding by creating an LDAP user who can't do group
197
+ # lookups perhaps?
198
+
199
+ # TODO: add a test to demonstrate this function won't work on a user
200
+ # after the initial login request if the password isn't available. This
201
+ # might have to be more of a full stack test.
169
202
  end
170
-
171
203
 
172
204
  describe "use role attribute for authorization" do
173
205
  before do
@@ -185,6 +217,26 @@ describe 'Users' do
185
217
  end
186
218
  end
187
219
 
220
+ describe "use attribute presence for authorization" do
221
+ before do
222
+ @admin = Factory.create(:admin)
223
+ @user = Factory.create(:user)
224
+ ::Devise.ldap_check_attributes_presence = true
225
+ end
226
+
227
+ after do
228
+ ::Devise.ldap_check_attributes_presence = false
229
+ end
230
+
231
+ it "should admin should not be allowed in" do
232
+ should_not_be_validated @admin, "admin_secret"
233
+ end
234
+
235
+ it "should user should be allowed in" do
236
+ should_be_validated @user, "secret"
237
+ end
238
+ end
239
+
188
240
  describe "use admin setting to bind" do
189
241
  before do
190
242
  @admin = Factory.create(:admin)
@@ -197,6 +249,19 @@ describe 'Users' do
197
249
  end
198
250
  end
199
251
 
252
+ describe 'check password expiration' do
253
+ before { allow_any_instance_of(Devise::LDAP::Connection).to receive(:authenticated?).and_return(false) }
254
+
255
+ it 'should return false for a user that has a fresh password' do
256
+ allow_any_instance_of(Devise::LDAP::Connection).to receive(:last_message_expired_credentials?).and_return(false)
257
+ assert_equal false, ::Devise::LDAP::Adapter.expired_valid_credentials?('example.user@test.com','secret')
258
+ end
259
+
260
+ it 'should return true for a user that has an expired password' do
261
+ allow_any_instance_of(Devise::LDAP::Connection).to receive(:last_message_expired_credentials?).and_return(true)
262
+ assert_equal true, ::Devise::LDAP::Adapter.expired_valid_credentials?('example.user@test.com','secret')
263
+ end
264
+ end
200
265
  end
201
266
 
202
267
  describe "use uid for login" do
@@ -225,9 +290,9 @@ describe 'Users' do
225
290
  end
226
291
 
227
292
  it "should create a user in the database" do
228
- @user = User.authenticate_with_ldap(:uid => "example_user", :password => "secret")
293
+ @user = User.find_for_ldap_authentication(:uid => "example_user", :password => "secret")
229
294
  assert_equal(User.all.size, 1)
230
- User.all.collect(&:uid).should include("example_user")
295
+ expect(User.all.collect(&:uid)).to include("example_user")
231
296
  end
232
297
 
233
298
  it "should call ldap_before_save hooks" do
@@ -236,7 +301,7 @@ describe 'Users' do
236
301
  @foobar = 'foobar'
237
302
  end
238
303
  end
239
- user = User.authenticate_with_ldap(:uid => "example_user", :password => "secret")
304
+ user = User.find_for_ldap_authentication(:uid => "example_user", :password => "secret")
240
305
  assert_equal 'foobar', user.instance_variable_get(:"@foobar")
241
306
  User.class_eval do
242
307
  undef ldap_before_save
@@ -244,9 +309,7 @@ describe 'Users' do
244
309
  end
245
310
 
246
311
  it "should not call ldap_before_save hook if not defined" do
247
- assert_nothing_raised do
248
- should_be_validated Factory.create(:user, :uid => "example_user"), "secret"
249
- end
312
+ should_be_validated Factory.create(:user, :uid => "example_user"), "secret"
250
313
  end
251
314
  end
252
315
  end
@@ -279,9 +342,7 @@ describe 'Users' do
279
342
  end
280
343
 
281
344
  it "should not fail if config file has ssl: true" do
282
- assert_nothing_raised do
283
- Devise::LDAP::Connection.new
284
- end
345
+ Devise::LDAP::Connection.new
285
346
  end
286
347
  end
287
348
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: devise_ldap_authenticatable
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.1
4
+ version: 0.8.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Curtis Schiewek
@@ -10,180 +10,174 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2013-07-24 00:00:00.000000000 Z
13
+ date: 2020-07-23 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: devise
17
17
  requirement: !ruby/object:Gem::Requirement
18
18
  requirements:
19
- - - '>='
19
+ - - ">="
20
20
  - !ruby/object:Gem::Version
21
- version: '3.0'
21
+ version: 3.4.1
22
22
  type: :runtime
23
23
  prerelease: false
24
24
  version_requirements: !ruby/object:Gem::Requirement
25
25
  requirements:
26
- - - '>='
26
+ - - ">="
27
27
  - !ruby/object:Gem::Version
28
- version: '3.0'
28
+ version: 3.4.1
29
29
  - !ruby/object:Gem::Dependency
30
30
  name: net-ldap
31
31
  requirement: !ruby/object:Gem::Requirement
32
32
  requirements:
33
- - - '>='
33
+ - - ">="
34
34
  - !ruby/object:Gem::Version
35
- version: 0.3.1
36
- - - <
37
- - !ruby/object:Gem::Version
38
- version: 0.6.0
35
+ version: 0.16.0
39
36
  type: :runtime
40
37
  prerelease: false
41
38
  version_requirements: !ruby/object:Gem::Requirement
42
39
  requirements:
43
- - - '>='
44
- - !ruby/object:Gem::Version
45
- version: 0.3.1
46
- - - <
40
+ - - ">="
47
41
  - !ruby/object:Gem::Version
48
- version: 0.6.0
42
+ version: 0.16.0
49
43
  - !ruby/object:Gem::Dependency
50
44
  name: rake
51
45
  requirement: !ruby/object:Gem::Requirement
52
46
  requirements:
53
- - - '>='
47
+ - - ">="
54
48
  - !ruby/object:Gem::Version
55
49
  version: '0.9'
56
50
  type: :development
57
51
  prerelease: false
58
52
  version_requirements: !ruby/object:Gem::Requirement
59
53
  requirements:
60
- - - '>='
54
+ - - ">="
61
55
  - !ruby/object:Gem::Version
62
56
  version: '0.9'
63
57
  - !ruby/object:Gem::Dependency
64
58
  name: rdoc
65
59
  requirement: !ruby/object:Gem::Requirement
66
60
  requirements:
67
- - - '>='
61
+ - - ">="
68
62
  - !ruby/object:Gem::Version
69
63
  version: '3'
70
64
  type: :development
71
65
  prerelease: false
72
66
  version_requirements: !ruby/object:Gem::Requirement
73
67
  requirements:
74
- - - '>='
68
+ - - ">="
75
69
  - !ruby/object:Gem::Version
76
70
  version: '3'
77
71
  - !ruby/object:Gem::Dependency
78
72
  name: rails
79
73
  requirement: !ruby/object:Gem::Requirement
80
74
  requirements:
81
- - - '>='
75
+ - - ">="
82
76
  - !ruby/object:Gem::Version
83
77
  version: '4.0'
84
78
  type: :development
85
79
  prerelease: false
86
80
  version_requirements: !ruby/object:Gem::Requirement
87
81
  requirements:
88
- - - '>='
82
+ - - ">="
89
83
  - !ruby/object:Gem::Version
90
84
  version: '4.0'
91
85
  - !ruby/object:Gem::Dependency
92
86
  name: sqlite3
93
87
  requirement: !ruby/object:Gem::Requirement
94
88
  requirements:
95
- - - '>='
89
+ - - ">="
96
90
  - !ruby/object:Gem::Version
97
91
  version: '0'
98
92
  type: :development
99
93
  prerelease: false
100
94
  version_requirements: !ruby/object:Gem::Requirement
101
95
  requirements:
102
- - - '>='
96
+ - - ">="
103
97
  - !ruby/object:Gem::Version
104
98
  version: '0'
105
99
  - !ruby/object:Gem::Dependency
106
100
  name: factory_girl_rails
107
101
  requirement: !ruby/object:Gem::Requirement
108
102
  requirements:
109
- - - ~>
103
+ - - "~>"
110
104
  - !ruby/object:Gem::Version
111
105
  version: '1.0'
112
106
  type: :development
113
107
  prerelease: false
114
108
  version_requirements: !ruby/object:Gem::Requirement
115
109
  requirements:
116
- - - ~>
110
+ - - "~>"
117
111
  - !ruby/object:Gem::Version
118
112
  version: '1.0'
119
113
  - !ruby/object:Gem::Dependency
120
114
  name: factory_girl
121
115
  requirement: !ruby/object:Gem::Requirement
122
116
  requirements:
123
- - - ~>
117
+ - - "~>"
124
118
  - !ruby/object:Gem::Version
125
119
  version: '2.0'
126
120
  type: :development
127
121
  prerelease: false
128
122
  version_requirements: !ruby/object:Gem::Requirement
129
123
  requirements:
130
- - - ~>
124
+ - - "~>"
131
125
  - !ruby/object:Gem::Version
132
126
  version: '2.0'
133
127
  - !ruby/object:Gem::Dependency
134
128
  name: rspec-rails
135
129
  requirement: !ruby/object:Gem::Requirement
136
130
  requirements:
137
- - - '>='
131
+ - - ">="
138
132
  - !ruby/object:Gem::Version
139
133
  version: '0'
140
134
  type: :development
141
135
  prerelease: false
142
136
  version_requirements: !ruby/object:Gem::Requirement
143
137
  requirements:
144
- - - '>='
138
+ - - ">="
145
139
  - !ruby/object:Gem::Version
146
140
  version: '0'
147
141
  - !ruby/object:Gem::Dependency
148
142
  name: database_cleaner
149
143
  requirement: !ruby/object:Gem::Requirement
150
144
  requirements:
151
- - - '>='
145
+ - - ">="
152
146
  - !ruby/object:Gem::Version
153
147
  version: '0'
154
148
  type: :development
155
149
  prerelease: false
156
150
  version_requirements: !ruby/object:Gem::Requirement
157
151
  requirements:
158
- - - '>='
152
+ - - ">="
159
153
  - !ruby/object:Gem::Version
160
154
  version: '0'
161
155
  - !ruby/object:Gem::Dependency
162
156
  name: capybara
163
157
  requirement: !ruby/object:Gem::Requirement
164
158
  requirements:
165
- - - '>='
159
+ - - ">="
166
160
  - !ruby/object:Gem::Version
167
161
  version: '0'
168
162
  type: :development
169
163
  prerelease: false
170
164
  version_requirements: !ruby/object:Gem::Requirement
171
165
  requirements:
172
- - - '>='
166
+ - - ">="
173
167
  - !ruby/object:Gem::Version
174
168
  version: '0'
175
169
  - !ruby/object:Gem::Dependency
176
170
  name: launchy
177
171
  requirement: !ruby/object:Gem::Requirement
178
172
  requirements:
179
- - - '>='
173
+ - - ">="
180
174
  - !ruby/object:Gem::Version
181
175
  version: '0'
182
176
  type: :development
183
177
  prerelease: false
184
178
  version_requirements: !ruby/object:Gem::Requirement
185
179
  requirements:
186
- - - '>='
180
+ - - ">="
187
181
  - !ruby/object:Gem::Version
188
182
  version: '0'
189
183
  description: Devise extension to allow authentication via LDAP
@@ -192,7 +186,7 @@ executables: []
192
186
  extensions: []
193
187
  extra_rdoc_files: []
194
188
  files:
195
- - .gitignore
189
+ - ".gitignore"
196
190
  - CHANGELOG.md
197
191
  - Gemfile
198
192
  - MIT-LICENSE
@@ -277,6 +271,8 @@ files:
277
271
  - spec/rails_app/script/rails
278
272
  - spec/spec_helper.rb
279
273
  - spec/support/factories.rb
274
+ - spec/unit/adapter_spec.rb
275
+ - spec/unit/connection_spec.rb
280
276
  - spec/unit/user_spec.rb
281
277
  homepage: https://github.com/cschiewek/devise_ldap_authenticatable
282
278
  licenses:
@@ -288,17 +284,16 @@ require_paths:
288
284
  - lib
289
285
  required_ruby_version: !ruby/object:Gem::Requirement
290
286
  requirements:
291
- - - '>='
287
+ - - ">="
292
288
  - !ruby/object:Gem::Version
293
289
  version: '0'
294
290
  required_rubygems_version: !ruby/object:Gem::Requirement
295
291
  requirements:
296
- - - '>='
292
+ - - ">="
297
293
  - !ruby/object:Gem::Version
298
294
  version: '0'
299
295
  requirements: []
300
- rubyforge_project:
301
- rubygems_version: 2.0.3
296
+ rubygems_version: 3.1.2
302
297
  signing_key:
303
298
  specification_version: 4
304
299
  summary: Devise extension to allow authentication via LDAP