devise_ldap_authenticatable 0.4.3 → 0.4.4

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -32,7 +32,7 @@ This will *only* work for Rails 3 applications.
32
32
  In the Gemfile for your application:
33
33
 
34
34
  gem "devise", "1.1.1"
35
- gem "devise_ldap_authenticatable", "0.4.3"
35
+ gem "devise_ldap_authenticatable", "0.4.4"
36
36
 
37
37
  To get the latest version, pull directly from github instead of the gem:
38
38
 
@@ -44,17 +44,18 @@ Setup
44
44
 
45
45
  Run the rails generator
46
46
 
47
- rails generate devise_ldap_authenticatable:install
47
+ rails generate devise_ldap_authenticatable:install [options]
48
48
 
49
49
  This will install the sample.yml, update the devise.rb initializer, and update your user model. There are some options you can pass to it:
50
50
 
51
- [--user-model=USER_MODEL] # Model to update
52
- # Default: user
53
- [--update-model] # Update model to change from database_authenticatable to ldap_authenticatable
54
- # Default: true
55
- [--add-rescue] # Update Application Controller with resuce_from for DeviseLdapAuthenticatable::LdapException
56
- # Default: true
57
-
51
+ Options:
52
+ [--user-model=USER_MODEL] # Model to update
53
+ # Default: user
54
+ [--update-model] # Update model to change from database_authenticatable to ldap_authenticatable
55
+ # Default: true
56
+ [--add-rescue] # Update Application Controller with resuce_from for DeviseLdapAuthenticatable::LdapException
57
+ # Default: true
58
+ [--advanced] # Add advanced config options to the devise initializer
58
59
 
59
60
 
60
61
  Usage
@@ -96,6 +97,15 @@ In initializer `config/initializers/devise.rb` :
96
97
  * ldap\_use\_admin\_to\_bind _(default: false)_
97
98
  * When set to true, the admin user will be used to bind to the LDAP server during authentication.
98
99
 
100
+
101
+ Advanced Configuration
102
+ ----------------------
103
+
104
+ These parameters will be added to `config/initializers/devise.rb` when you pass the `--advanced` switch to the generator:
105
+
106
+ * ldap\_auth\_username\_builder _(default: `Proc.new() {|attribute, login, ldap| "#{attribute}=#{login},#{ldap.base}" }`)_
107
+ * You can pass a proc to the username option to explicitly specify the format that you search for a users' DN on your LDAP server.
108
+
99
109
  Testing
100
110
  -------
101
111
 
@@ -139,7 +149,7 @@ This will allow requests to go to the test LDAP server without being signed by a
139
149
  References
140
150
  ----------
141
151
 
142
- * [Original Plugin](http://github.com/cschiewek/devise_ldap_authenticatable)
152
+ * [OpenLDAP](http://www.openldap.org/)
143
153
  * [Devise](http://github.com/plataformatec/devise)
144
154
  * [Warden](http://github.com/hassox/warden)
145
155
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.4.3
1
+ 0.4.4
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{devise_ldap_authenticatable}
8
- s.version = "0.4.3"
8
+ s.version = "0.4.4"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Curtis Schiewek", "Daniel McNevin"]
12
- s.date = %q{2010-08-05}
12
+ s.date = %q{2010-08-14}
13
13
  s.description = %q{LDAP authentication module for Devise}
14
14
  s.email = %q{curtis.schiewek@gmail.com}
15
15
  s.extra_rdoc_files = [
@@ -31,6 +31,9 @@ module Devise
31
31
 
32
32
  mattr_accessor :ldap_use_admin_to_bind
33
33
  @@ldap_use_admin_to_bind = false
34
+
35
+ mattr_accessor :ldap_auth_username_builder
36
+ @@ldap_auth_username_builder = Proc.new() {|attribute, login, ldap| "#{attribute}=#{login},#{ldap.base}" }
34
37
  end
35
38
 
36
39
  # Add ldap_authenticatable strategy to defaults.
@@ -5,8 +5,11 @@ module Devise
5
5
  module LdapAdapter
6
6
 
7
7
  def self.valid_credentials?(login, password_plaintext)
8
- options = {:login => login, :password => password_plaintext}
9
- options.merge!({ :admin => true }) if ::Devise.ldap_use_admin_to_bind
8
+ options = {:login => login,
9
+ :password => password_plaintext,
10
+ :ldap_auth_username_builder => ::Devise.ldap_auth_username_builder,
11
+ :admin => ::Devise.ldap_use_admin_to_bind}
12
+
10
13
  resource = LdapConnect.new(options)
11
14
  resource.authorized?
12
15
  end
@@ -35,6 +38,7 @@ module Devise
35
38
  @ldap.port = ldap_config["port"]
36
39
  @ldap.base = ldap_config["base"]
37
40
  @attribute = ldap_config["attribute"]
41
+ @ldap_auth_username_builder = params[:ldap_auth_username_builder]
38
42
 
39
43
  @group_base = ldap_config["group_base"]
40
44
  @required_groups = ldap_config["required_groups"]
@@ -53,7 +57,7 @@ module Devise
53
57
  ldap_entry = nil
54
58
  @ldap.search(:filter => filter) {|entry| ldap_entry = entry}
55
59
  if ldap_entry.nil?
56
- "#{@attribute}=#{@login},#{@ldap.base}"
60
+ @ldap_auth_username_builder.call(@attribute,@login,@ldap)
57
61
  else
58
62
  ldap_entry.dn
59
63
  end
@@ -1,4 +1,4 @@
1
1
  module DeviseLdapAuthenticatable
2
- VERSION = "0.4.3"
2
+ VERSION = "0.4.4"
3
3
  end
4
4
 
@@ -5,6 +5,7 @@ module DeviseLdapAuthenticatable
5
5
  class_option :user_model, :type => :string, :default => "user", :desc => "Model to update"
6
6
  class_option :update_model, :type => :boolean, :default => true, :desc => "Update model to change from database_authenticatable to ldap_authenticatable"
7
7
  class_option :add_rescue, :type => :boolean, :default => true, :desc => "Update Application Controller with resuce_from for DeviseLdapAuthenticatable::LdapException"
8
+ class_option :advanced, :type => :boolean, :desc => "Add advanced config options to the devise initializer"
8
9
 
9
10
 
10
11
  def create_ldap_config
@@ -26,7 +27,7 @@ module DeviseLdapAuthenticatable
26
27
  private
27
28
 
28
29
  def default_devise_settings
29
- <<-eof
30
+ settings = <<-eof
30
31
  # ==> LDAP Configuration
31
32
  # config.ldap_logger = true
32
33
  # config.ldap_create_user = false
@@ -37,6 +38,15 @@ module DeviseLdapAuthenticatable
37
38
  # config.ldap_use_admin_to_bind = false
38
39
 
39
40
  eof
41
+ if options.advanced?
42
+ settings << <<-eof
43
+ # ==> Advanced LDAP Configuration
44
+ # config.ldap_auth_username_builder = Proc.new() {|attribute, login, ldap| "\#{attribute}=\#{login},\#{ldap.base}" }
45
+
46
+ eof
47
+ end
48
+
49
+ settings
40
50
  end
41
51
 
42
52
  def rescue_from_exception
@@ -48,4 +58,4 @@ module DeviseLdapAuthenticatable
48
58
  end
49
59
 
50
60
  end
51
- end
61
+ end
@@ -10,6 +10,10 @@ dn: ou=people,dc=test,dc=com
10
10
  objectClass: organizationalUnit
11
11
  ou: people
12
12
 
13
+ dn: ou=others,dc=test,dc=com
14
+ objectClass: organizationalUnit
15
+ ou: others
16
+
13
17
  dn: ou=groups,dc=test,dc=com
14
18
  objectClass: organizationalUnit
15
19
  ou: groups
@@ -26,6 +30,19 @@ authorizationRole: blogUser
26
30
  userPassword:: e1NTSEF9ZXRYaE9NcjRjOGFiTjlqYUxyczZKSll5MFlaZUF1NURCVWhhY0E9PQ=
27
31
  =
28
32
 
33
+ # other.user@test.com
34
+ dn: cn=other.user@test.com,ou=others,dc=test,dc=com
35
+ objectClass: inetOrgPerson
36
+ objectClass: authorizations
37
+ objectClass: organizationalPerson
38
+ objectClass: person
39
+ objectClass: top
40
+ sn: Other
41
+ uid: other_user
42
+ cn: other.user@test.com
43
+ authorizationRole: blogUser
44
+ userPassword:: e1NIQX1IQXdtdk13RGF1ZUpyZDhwakxXMzZ6Yi9jTUU9
45
+
29
46
  # example.admin@test.com, people, test.com
30
47
  dn: cn=example.admin@test.com,ou=people,dc=test,dc=com
31
48
  objectClass: inetOrgPerson
@@ -10,11 +10,17 @@ changetype: delete
10
10
  dn: cn=example.user@test.com,ou=people,dc=test,dc=com
11
11
  changetype: delete
12
12
 
13
+ dn: cn=other.user@test.com,ou=others,dc=test,dc=com
14
+ changetype: delete
15
+
13
16
  dn: ou=groups,dc=test,dc=com
14
17
  changetype: delete
15
18
 
16
19
  dn: ou=people,dc=test,dc=com
17
20
  changetype: delete
18
21
 
22
+ dn: ou=others,dc=test,dc=com
23
+ changetype: delete
24
+
19
25
  dn: dc=test,dc=com
20
26
  changetype: delete
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: /Users/dpmcnevin/Rails/devise_ldap_authenticatable
3
3
  specs:
4
- devise_ldap_authenticatable (0.4.2)
4
+ devise_ldap_authenticatable (0.4.3)
5
5
  devise (> 1.0.4)
6
6
  net-ldap (>= 0.1.1)
7
7
 
@@ -6,4 +6,9 @@ end
6
6
  Factory.define :admin, :class => "user" do |f|
7
7
  f.email "example.admin@test.com"
8
8
  f.password "admin_secret"
9
+ end
10
+
11
+ Factory.define :other, :class => "user" do |f|
12
+ f.email "other.user@test.com"
13
+ f.password "other_secret"
9
14
  end
@@ -21,6 +21,7 @@ class ActiveSupport::TestCase
21
21
  ::Devise.ldap_config = "#{Rails.root}/config/#{"ssl_" if ENV["LDAP_SSL"]}ldap.yml"
22
22
  ::Devise.ldap_check_group_membership = false
23
23
  ::Devise.ldap_check_attributes = false
24
+ ::Devise.ldap_auth_username_builder = Proc.new() {|attribute, login, ldap| "#{attribute}=#{login},#{ldap.base}" }
24
25
  ::Devise.authentication_keys = [:email]
25
26
  end
26
27
 
@@ -20,7 +20,7 @@ class UserTest < ActiveSupport::TestCase
20
20
  setup do
21
21
  @user = Factory(:user)
22
22
  end
23
-
23
+
24
24
  should "check for password validation" do
25
25
  assert_equal(@user.email, "example.user@test.com")
26
26
  should_be_validated @user, "secret"
@@ -33,7 +33,7 @@ class UserTest < ActiveSupport::TestCase
33
33
  setup do
34
34
  @user = Factory(:user)
35
35
  end
36
-
36
+
37
37
  should "change password" do
38
38
  should_be_validated @user, "secret"
39
39
  @user.reset_password!("changed","changed")
@@ -70,7 +70,7 @@ class UserTest < ActiveSupport::TestCase
70
70
  assert_equal(User.all.size, 1)
71
71
  assert_contains(User.all.collect(&:email), "example.user@test.com", "user not in database")
72
72
  end
73
-
73
+
74
74
  should "not create a user in the database if the password is wrong_secret" do
75
75
  @user = User.authenticate_with_ldap(:email => "example.user", :password => "wrong_secret")
76
76
  assert(User.all.blank?, "There's users in the database")
@@ -91,7 +91,7 @@ class UserTest < ActiveSupport::TestCase
91
91
  ::Devise.authentication_keys = [:email]
92
92
  ::Devise.ldap_check_group_membership = true
93
93
  end
94
-
94
+
95
95
  should "admin should be allowed in" do
96
96
  should_be_validated @admin, "admin_secret"
97
97
  end
@@ -111,7 +111,7 @@ class UserTest < ActiveSupport::TestCase
111
111
  @user = Factory(:user)
112
112
  ::Devise.ldap_check_attributes = true
113
113
  end
114
-
114
+
115
115
  should "admin should be allowed in" do
116
116
  should_be_validated @admin, "admin_secret"
117
117
  end
@@ -127,7 +127,7 @@ class UserTest < ActiveSupport::TestCase
127
127
  @user = Factory(:user)
128
128
  ::Devise.ldap_use_admin_to_bind = true
129
129
  end
130
-
130
+
131
131
  should "description" do
132
132
  should_be_validated @admin, "admin_secret"
133
133
  end
@@ -142,13 +142,13 @@ class UserTest < ActiveSupport::TestCase
142
142
  ::Devise.ldap_config = "#{Rails.root}/config/#{"ssl_" if ENV["LDAP_SSL"]}ldap_with_uid.yml"
143
143
  ::Devise.authentication_keys = [:uid]
144
144
  end
145
-
145
+
146
146
  context "description" do
147
147
  setup do
148
148
  @admin = Factory(:admin)
149
149
  @user = Factory(:user, :uid => "example_user")
150
150
  end
151
-
151
+
152
152
  should "be able to authenticate using uid" do
153
153
  should_be_validated @user, "secret"
154
154
  should_not_be_validated @admin, "admin_secret"
@@ -159,7 +159,7 @@ class UserTest < ActiveSupport::TestCase
159
159
  setup do
160
160
  ::Devise.ldap_create_user = true
161
161
  end
162
-
162
+
163
163
  should "create a user in the database" do
164
164
  @user = User.authenticate_with_ldap(:uid => "example_user", :password => "secret")
165
165
  assert_equal(User.all.size, 1)
@@ -174,13 +174,13 @@ class UserTest < ActiveSupport::TestCase
174
174
  reset_ldap_server!
175
175
  ::Devise.ldap_config = "#{Rails.root}/config/#{"ssl_" if ENV["LDAP_SSL"]}ldap_with_erb.yml"
176
176
  end
177
-
177
+
178
178
  context "authenticate" do
179
179
  setup do
180
180
  @admin = Factory(:admin)
181
181
  @user = Factory(:user)
182
182
  end
183
-
183
+
184
184
  should "be able to authenticate" do
185
185
  should_be_validated @user, "secret"
186
186
  should_be_validated @admin, "admin_secret"
@@ -188,6 +188,19 @@ class UserTest < ActiveSupport::TestCase
188
188
  end
189
189
  end
190
190
 
191
-
191
+ context "use username builder" do
192
+ setup do
193
+ default_devise_settings!
194
+ reset_ldap_server!
195
+ ::Devise.ldap_auth_username_builder = Proc.new() do |attribute, login, ldap|
196
+ "#{attribute}=#{login},ou=others,dc=test,dc=com"
197
+ end
198
+ @other = Factory(:other)
199
+ end
200
+
201
+ should "be able to authenticate" do
202
+ should_be_validated @other, "other_secret"
203
+ end
204
+ end
192
205
 
193
206
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: devise_ldap_authenticatable
3
3
  version: !ruby/object:Gem::Version
4
- hash: 9
4
+ hash: 7
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 4
9
- - 3
10
- version: 0.4.3
9
+ - 4
10
+ version: 0.4.4
11
11
  platform: ruby
12
12
  authors:
13
13
  - Curtis Schiewek
@@ -16,7 +16,7 @@ autorequire:
16
16
  bindir: bin
17
17
  cert_chain: []
18
18
 
19
- date: 2010-08-05 00:00:00 -04:00
19
+ date: 2010-08-14 00:00:00 -04:00
20
20
  default_executable:
21
21
  dependencies:
22
22
  - !ruby/object:Gem::Dependency