devise_ldap_authenticatable 0.6.1 → 0.7.0
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.
- checksums.yaml +7 -0
- data/.gitignore +1 -0
- data/CHANGELOG.md +7 -0
- data/Gemfile +1 -4
- data/README.md +45 -92
- data/Rakefile +8 -7
- data/devise_ldap_authenticatable.gemspec +15 -3
- data/lib/devise_ldap_authenticatable/ldap_adapter.rb +51 -27
- data/lib/devise_ldap_authenticatable/model.rb +5 -1
- data/lib/devise_ldap_authenticatable/strategy.rb +3 -1
- data/lib/devise_ldap_authenticatable/version.rb +1 -1
- data/lib/generators/devise_ldap_authenticatable/templates/ldap.yml +3 -3
- data/spec/ldap/.gitignore +2 -0
- data/{test → spec}/ldap/base.ldif +0 -0
- data/{test → spec}/ldap/clear.ldif +0 -0
- data/{test → spec}/ldap/local.schema +0 -0
- data/spec/ldap/openldap-data/.gitignore +2 -0
- data/spec/ldap/openldap-data/run/.gitignore +2 -0
- data/{test → spec}/ldap/openldap-data/run/.gitkeep +0 -0
- data/spec/ldap/run-server +31 -0
- data/{test → spec}/ldap/server.pem +0 -0
- data/{test/ldap/slapd-test.conf → spec/ldap/slapd-test.conf.erb} +16 -16
- data/{test → spec}/rails_app/Rakefile +0 -0
- data/spec/rails_app/app/controllers/application_controller.rb +7 -0
- data/{test → spec}/rails_app/app/controllers/posts_controller.rb +0 -0
- data/{test → spec}/rails_app/app/helpers/application_helper.rb +0 -0
- data/{test → spec}/rails_app/app/helpers/posts_helper.rb +0 -0
- data/{test → spec}/rails_app/app/models/post.rb +0 -0
- data/{test → spec}/rails_app/app/models/user.rb +0 -0
- data/{test → spec}/rails_app/app/views/layouts/application.html.erb +0 -0
- data/{test → spec}/rails_app/app/views/posts/index.html.erb +0 -0
- data/{test → spec}/rails_app/config.ru +0 -0
- data/{test → spec}/rails_app/config/application.rb +0 -0
- data/{test → spec}/rails_app/config/boot.rb +1 -1
- data/{test → spec}/rails_app/config/cucumber.yml +0 -0
- data/{test → spec}/rails_app/config/database.yml +0 -0
- data/{test → spec}/rails_app/config/environment.rb +0 -0
- data/{test → spec}/rails_app/config/environments/development.rb +0 -1
- data/{test → spec}/rails_app/config/environments/production.rb +0 -0
- data/{test → spec}/rails_app/config/environments/test.rb +1 -1
- data/{test → spec}/rails_app/config/initializers/backtrace_silencers.rb +0 -0
- data/spec/rails_app/config/initializers/devise.rb +242 -0
- data/{test → spec}/rails_app/config/initializers/inflections.rb +0 -0
- data/{test → spec}/rails_app/config/initializers/mime_types.rb +0 -0
- data/{test → spec}/rails_app/config/initializers/secret_token.rb +0 -0
- data/{test → spec}/rails_app/config/initializers/session_store.rb +0 -0
- data/{test → spec}/rails_app/config/ldap.yml +0 -0
- data/{test → spec}/rails_app/config/ldap_with_boolean_ssl.yml +0 -0
- data/{test → spec}/rails_app/config/ldap_with_erb.yml +0 -0
- data/{test → spec}/rails_app/config/ldap_with_uid.yml +0 -0
- data/spec/rails_app/config/locales/devise.en.yml +58 -0
- data/{test → spec}/rails_app/config/locales/en.yml +0 -0
- data/{test → spec}/rails_app/config/routes.rb +0 -0
- data/{test → spec}/rails_app/config/ssl_ldap.yml +0 -0
- data/{test → spec}/rails_app/config/ssl_ldap_with_erb.yml +0 -0
- data/{test → spec}/rails_app/config/ssl_ldap_with_uid.yml +0 -0
- data/{test → spec}/rails_app/db/migrate/20100708120448_devise_create_users.rb +18 -4
- data/{test → spec}/rails_app/db/schema.rb +6 -13
- data/{test → spec}/rails_app/features/manage_logins.feature +0 -0
- data/{test → spec}/rails_app/features/step_definitions/login_steps.rb +0 -0
- data/{test → spec}/rails_app/features/step_definitions/web_steps.rb +0 -0
- data/{test → spec}/rails_app/features/support/env.rb +0 -0
- data/{test → spec}/rails_app/features/support/paths.rb +0 -0
- data/{test → spec}/rails_app/lib/tasks/.gitkeep +0 -0
- data/{test → spec}/rails_app/lib/tasks/cucumber.rake +0 -0
- data/{test → spec}/rails_app/public/404.html +0 -0
- data/{test → spec}/rails_app/public/422.html +0 -0
- data/{test → spec}/rails_app/public/500.html +0 -0
- data/{test → spec}/rails_app/public/images/rails.png +0 -0
- data/{test → spec}/rails_app/public/javascripts/application.js +0 -0
- data/{test → spec}/rails_app/public/javascripts/controls.js +0 -0
- data/{test → spec}/rails_app/public/javascripts/dragdrop.js +0 -0
- data/{test → spec}/rails_app/public/javascripts/effects.js +0 -0
- data/{test → spec}/rails_app/public/javascripts/prototype.js +0 -0
- data/{test → spec}/rails_app/public/javascripts/rails.js +0 -0
- data/{test → spec}/rails_app/public/stylesheets/.gitkeep +0 -0
- data/{test → spec}/rails_app/script/cucumber +0 -0
- data/{test → spec}/rails_app/script/rails +0 -0
- data/spec/spec_helper.rb +47 -0
- data/spec/support/factories.rb +16 -0
- data/spec/unit/user_spec.rb +303 -0
- metadata +292 -179
- data/Gemfile.lock +0 -92
- data/rails/init.rb +0 -2
- data/test/devise_ldap_authenticatable_test.rb +0 -8
- data/test/ldap/run-server.sh +0 -10
- data/test/ldap/slapd-ssl-test.conf +0 -107
- data/test/rails_app/Gemfile +0 -22
- data/test/rails_app/Gemfile.lock +0 -159
- data/test/rails_app/app/controllers/application_controller.rb +0 -4
- data/test/rails_app/config/initializers/devise.rb +0 -140
- data/test/rails_app/config/ldap_with_check_membership_off.yml +0 -23
- data/test/rails_app/config/ldap_with_check_membership_on.yml +0 -23
- data/test/rails_app/config/locales/devise.en.yml +0 -39
- data/test/rails_app/db/migrate/20100708120302_create_posts.rb +0 -14
- data/test/rails_app/db/seeds.rb +0 -7
- data/test/rails_app/test/factories/users.rb +0 -14
- data/test/rails_app/test/functional/posts_controller_test.rb +0 -58
- data/test/rails_app/test/performance/browsing_test.rb +0 -9
- data/test/rails_app/test/test_helper.rb +0 -36
- data/test/rails_app/test/unit/helpers/posts_helper_test.rb +0 -4
- data/test/rails_app/test/unit/post_test.rb +0 -4
- data/test/rails_app/test/unit/user_test.rb +0 -314
- data/test/test_helper.rb +0 -3
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
authorizations: &AUTHORIZATIONS
|
|
2
|
-
## Authorization
|
|
3
|
-
group_base: ou=groups,dc=test,dc=com
|
|
4
|
-
check_group_membership: false
|
|
5
|
-
required_groups:
|
|
6
|
-
- cn=admins,ou=groups,dc=test,dc=com
|
|
7
|
-
- ["authorizationRole", "cn=users,ou=groups,dc=test,dc=com"]
|
|
8
|
-
require_attribute:
|
|
9
|
-
objectClass: inetOrgPerson
|
|
10
|
-
authorizationRole: blogAdmin
|
|
11
|
-
|
|
12
|
-
test: &TEST
|
|
13
|
-
host: localhost
|
|
14
|
-
port: 3389
|
|
15
|
-
attribute: cn
|
|
16
|
-
base: ou=people,dc=test,dc=com
|
|
17
|
-
admin_user: cn=admin,dc=test,dc=com
|
|
18
|
-
admin_password: secret
|
|
19
|
-
ssl: false
|
|
20
|
-
<<: *AUTHORIZATIONS
|
|
21
|
-
|
|
22
|
-
development:
|
|
23
|
-
<<: *TEST
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
authorizations: &AUTHORIZATIONS
|
|
2
|
-
## Authorization
|
|
3
|
-
group_base: ou=groups,dc=test,dc=com
|
|
4
|
-
check_group_membership: true
|
|
5
|
-
required_groups:
|
|
6
|
-
- cn=admins,ou=groups,dc=test,dc=com
|
|
7
|
-
- ["authorizationRole", "cn=users,ou=groups,dc=test,dc=com"]
|
|
8
|
-
require_attribute:
|
|
9
|
-
objectClass: inetOrgPerson
|
|
10
|
-
authorizationRole: blogAdmin
|
|
11
|
-
|
|
12
|
-
test: &TEST
|
|
13
|
-
host: localhost
|
|
14
|
-
port: 3389
|
|
15
|
-
attribute: cn
|
|
16
|
-
base: ou=people,dc=test,dc=com
|
|
17
|
-
admin_user: cn=admin,dc=test,dc=com
|
|
18
|
-
admin_password: secret
|
|
19
|
-
ssl: false
|
|
20
|
-
<<: *AUTHORIZATIONS
|
|
21
|
-
|
|
22
|
-
development:
|
|
23
|
-
<<: *TEST
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
en:
|
|
2
|
-
errors:
|
|
3
|
-
messages:
|
|
4
|
-
not_found: "not found"
|
|
5
|
-
already_confirmed: "was already confirmed"
|
|
6
|
-
not_locked: "was not locked"
|
|
7
|
-
|
|
8
|
-
devise:
|
|
9
|
-
failure:
|
|
10
|
-
unauthenticated: 'You need to sign in or sign up before continuing.'
|
|
11
|
-
unconfirmed: 'You have to confirm your account before continuing.'
|
|
12
|
-
locked: 'Your account is locked.'
|
|
13
|
-
invalid: 'Invalid email or password.'
|
|
14
|
-
invalid_token: 'Invalid authentication token.'
|
|
15
|
-
timeout: 'Your session expired, please sign in again to continue.'
|
|
16
|
-
inactive: 'Your account was not activated yet.'
|
|
17
|
-
sessions:
|
|
18
|
-
signed_in: 'Signed in successfully.'
|
|
19
|
-
signed_out: 'Signed out successfully.'
|
|
20
|
-
passwords:
|
|
21
|
-
send_instructions: 'You will receive an email with instructions about how to reset your password in a few minutes.'
|
|
22
|
-
updated: 'Your password was changed successfully. You are now signed in.'
|
|
23
|
-
confirmations:
|
|
24
|
-
send_instructions: 'You will receive an email with instructions about how to confirm your account in a few minutes.'
|
|
25
|
-
confirmed: 'Your account was successfully confirmed. You are now signed in.'
|
|
26
|
-
registrations:
|
|
27
|
-
signed_up: 'You have signed up successfully. If enabled, a confirmation was sent to your e-mail.'
|
|
28
|
-
updated: 'You updated your account successfully.'
|
|
29
|
-
destroyed: 'Bye! Your account was successfully cancelled. We hope to see you again soon.'
|
|
30
|
-
unlocks:
|
|
31
|
-
send_instructions: 'You will receive an email with instructions about how to unlock your account in a few minutes.'
|
|
32
|
-
unlocked: 'Your account was successfully unlocked. You are now signed in.'
|
|
33
|
-
mailer:
|
|
34
|
-
confirmation_instructions:
|
|
35
|
-
subject: 'Confirmation instructions'
|
|
36
|
-
reset_password_instructions:
|
|
37
|
-
subject: 'Reset password instructions'
|
|
38
|
-
unlock_instructions:
|
|
39
|
-
subject: 'Unlock Instructions'
|
data/test/rails_app/db/seeds.rb
DELETED
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
# This file should contain all the record creation needed to seed the database with its default values.
|
|
2
|
-
# The data can then be loaded with the rake db:seed (or created alongside the db with db:setup).
|
|
3
|
-
#
|
|
4
|
-
# Examples:
|
|
5
|
-
#
|
|
6
|
-
# cities = City.create([{ :name => 'Chicago' }, { :name => 'Copenhagen' }])
|
|
7
|
-
# Mayor.create(:name => 'Daley', :city => cities.first)
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
Factory.define :user do |f|
|
|
2
|
-
f.email "example.user@test.com"
|
|
3
|
-
f.password "secret"
|
|
4
|
-
end
|
|
5
|
-
|
|
6
|
-
Factory.define :admin, :class => "user" do |f|
|
|
7
|
-
f.email "example.admin@test.com"
|
|
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"
|
|
14
|
-
end
|
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
require 'test_helper'
|
|
2
|
-
|
|
3
|
-
class PostsControllerTest < ActionController::TestCase
|
|
4
|
-
|
|
5
|
-
include Devise::TestHelpers
|
|
6
|
-
|
|
7
|
-
context "not logged in" do
|
|
8
|
-
should "should get INDEX" do
|
|
9
|
-
get :index
|
|
10
|
-
assert_response :success
|
|
11
|
-
assert_equal(response.body, "posts#index")
|
|
12
|
-
end
|
|
13
|
-
|
|
14
|
-
context "go to NEW page" do
|
|
15
|
-
setup do
|
|
16
|
-
get :new
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
should "not get NEW" do
|
|
20
|
-
assert_response :redirect
|
|
21
|
-
end
|
|
22
|
-
end
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
context "logged in" do
|
|
26
|
-
setup do
|
|
27
|
-
@user = Factory(:user)
|
|
28
|
-
sign_in(@user)
|
|
29
|
-
end
|
|
30
|
-
|
|
31
|
-
context "get NEW action" do
|
|
32
|
-
setup do
|
|
33
|
-
get :new
|
|
34
|
-
end
|
|
35
|
-
|
|
36
|
-
should "get the NEW action" do
|
|
37
|
-
assert_response :success
|
|
38
|
-
assert_equal(response.body, "posts#new")
|
|
39
|
-
end
|
|
40
|
-
end
|
|
41
|
-
|
|
42
|
-
context "log out user" do
|
|
43
|
-
setup do
|
|
44
|
-
sign_out(@user)
|
|
45
|
-
get :new
|
|
46
|
-
end
|
|
47
|
-
|
|
48
|
-
should "get redirected to the login page" do
|
|
49
|
-
assert_response :redirect
|
|
50
|
-
end
|
|
51
|
-
end
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
end
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
end
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
ENV["RAILS_ENV"] = "test"
|
|
2
|
-
require File.expand_path('../../config/environment', __FILE__)
|
|
3
|
-
require 'rails/test_help'
|
|
4
|
-
|
|
5
|
-
class ActiveSupport::TestCase
|
|
6
|
-
|
|
7
|
-
def ldap_connect_string
|
|
8
|
-
if ENV["LDAP_SSL"]
|
|
9
|
-
"-x -H ldaps://localhost:3389 -D 'cn=admin,dc=test,dc=com' -w secret"
|
|
10
|
-
else
|
|
11
|
-
"-x -h localhost -p 3389 -D 'cn=admin,dc=test,dc=com' -w secret"
|
|
12
|
-
end
|
|
13
|
-
end
|
|
14
|
-
|
|
15
|
-
def reset_ldap_server!
|
|
16
|
-
if ENV["LDAP_SSL"]
|
|
17
|
-
`ldapmodify #{ldap_connect_string} -f ../ldap/clear.ldif`
|
|
18
|
-
`ldapadd #{ldap_connect_string} -f ../ldap/base.ldif`
|
|
19
|
-
else
|
|
20
|
-
`ldapmodify #{ldap_connect_string} -f ../ldap/clear.ldif`
|
|
21
|
-
`ldapadd #{ldap_connect_string} -f ../ldap/base.ldif`
|
|
22
|
-
end
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
def default_devise_settings!
|
|
26
|
-
::Devise.ldap_logger = true
|
|
27
|
-
::Devise.ldap_create_user = false
|
|
28
|
-
::Devise.ldap_update_password = true
|
|
29
|
-
::Devise.ldap_config = "#{Rails.root}/config/#{"ssl_" if ENV["LDAP_SSL"]}ldap.yml"
|
|
30
|
-
::Devise.ldap_check_group_membership = false
|
|
31
|
-
::Devise.ldap_check_attributes = false
|
|
32
|
-
::Devise.ldap_auth_username_builder = Proc.new() {|attribute, login, ldap| "#{attribute}=#{login},#{ldap.base}" }
|
|
33
|
-
::Devise.authentication_keys = [:email]
|
|
34
|
-
end
|
|
35
|
-
|
|
36
|
-
end
|
|
@@ -1,314 +0,0 @@
|
|
|
1
|
-
require 'test_helper'
|
|
2
|
-
|
|
3
|
-
class UserTest < ActiveSupport::TestCase
|
|
4
|
-
|
|
5
|
-
def should_be_validated(user, password, message = "Password is invalid")
|
|
6
|
-
assert(user.valid_ldap_authentication?(password), message)
|
|
7
|
-
end
|
|
8
|
-
|
|
9
|
-
def should_not_be_validated(user, password, message = "Password is not properly set")
|
|
10
|
-
assert(!user.valid_ldap_authentication?(password), message)
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
context "With default settings" do
|
|
14
|
-
setup do
|
|
15
|
-
default_devise_settings!
|
|
16
|
-
reset_ldap_server!
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
context "look up and ldap user" do
|
|
20
|
-
should "return true for a user that does exist in LDAP" do
|
|
21
|
-
assert_equal true, ::Devise::LdapAdapter.valid_login?('example.user@test.com')
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
should "return false for a user that doesn't exist in LDAP" do
|
|
25
|
-
assert_equal false, ::Devise::LdapAdapter.valid_login?('barneystinson')
|
|
26
|
-
end
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
context "create a basic user" do
|
|
30
|
-
setup do
|
|
31
|
-
@user = Factory(:user)
|
|
32
|
-
end
|
|
33
|
-
|
|
34
|
-
should "check for password validation" do
|
|
35
|
-
assert_equal(@user.email, "example.user@test.com")
|
|
36
|
-
should_be_validated @user, "secret"
|
|
37
|
-
should_not_be_validated @user, "wrong_secret"
|
|
38
|
-
should_not_be_validated @user, "Secret"
|
|
39
|
-
end
|
|
40
|
-
end
|
|
41
|
-
|
|
42
|
-
context "change a LDAP password" do
|
|
43
|
-
setup do
|
|
44
|
-
@user = Factory(:user)
|
|
45
|
-
end
|
|
46
|
-
|
|
47
|
-
should "change password" do
|
|
48
|
-
should_be_validated @user, "secret"
|
|
49
|
-
@user.reset_password!("changed","changed")
|
|
50
|
-
should_be_validated @user, "changed", "password was not changed properly on the LDAP sevrer"
|
|
51
|
-
end
|
|
52
|
-
|
|
53
|
-
should "not allow to change password if setting is false" do
|
|
54
|
-
should_be_validated @user, "secret"
|
|
55
|
-
::Devise.ldap_update_password = false
|
|
56
|
-
@user.reset_password!("wrong_secret", "wrong_secret")
|
|
57
|
-
should_not_be_validated @user, "wrong_secret"
|
|
58
|
-
should_be_validated @user, "secret"
|
|
59
|
-
end
|
|
60
|
-
end
|
|
61
|
-
|
|
62
|
-
context "create new local user if user is in LDAP" do
|
|
63
|
-
|
|
64
|
-
setup do
|
|
65
|
-
assert(User.all.blank?, "There shouldn't be any users in the database")
|
|
66
|
-
end
|
|
67
|
-
|
|
68
|
-
should "don't create user in the database" do
|
|
69
|
-
@user = User.authenticate_with_ldap(:email => "example.user@test.com", :password => "secret")
|
|
70
|
-
assert(User.all.blank?)
|
|
71
|
-
end
|
|
72
|
-
|
|
73
|
-
context "creating users is enabled" do
|
|
74
|
-
setup do
|
|
75
|
-
::Devise.ldap_create_user = true
|
|
76
|
-
end
|
|
77
|
-
|
|
78
|
-
should "create a user in the database" do
|
|
79
|
-
@user = User.authenticate_with_ldap(:email => "example.user@test.com", :password => "secret")
|
|
80
|
-
assert_equal(User.all.size, 1)
|
|
81
|
-
assert_contains(User.all.collect(&:email), "example.user@test.com", "user not in database")
|
|
82
|
-
end
|
|
83
|
-
|
|
84
|
-
should "not create a user in the database if the password is wrong_secret" do
|
|
85
|
-
@user = User.authenticate_with_ldap(:email => "example.user", :password => "wrong_secret")
|
|
86
|
-
assert(User.all.blank?, "There's users in the database")
|
|
87
|
-
end
|
|
88
|
-
|
|
89
|
-
should "create a user if the user is not in LDAP" do
|
|
90
|
-
@user = User.authenticate_with_ldap(:email => "wrong_secret.user@test.com", :password => "wrong_secret")
|
|
91
|
-
assert(User.all.blank?, "There's users in the database")
|
|
92
|
-
end
|
|
93
|
-
|
|
94
|
-
should "create a user in the database if case insensitivity does not matter" do
|
|
95
|
-
::Devise.case_insensitive_keys = false
|
|
96
|
-
@user = Factory(:user)
|
|
97
|
-
|
|
98
|
-
assert_difference "User.count", +1 do
|
|
99
|
-
User.authenticate_with_ldap(:email => "EXAMPLE.user@test.com", :password => "secret")
|
|
100
|
-
end
|
|
101
|
-
end
|
|
102
|
-
|
|
103
|
-
should "not create a user in the database if case insensitivity matters" do
|
|
104
|
-
::Devise.case_insensitive_keys = [:email]
|
|
105
|
-
@user = Factory(:user)
|
|
106
|
-
|
|
107
|
-
assert_no_difference "User.count" do
|
|
108
|
-
User.authenticate_with_ldap(:email => "EXAMPLE.user@test.com", :password => "secret")
|
|
109
|
-
end
|
|
110
|
-
end
|
|
111
|
-
|
|
112
|
-
should "create a user with downcased email in the database if case insensitivity matters" do
|
|
113
|
-
::Devise.case_insensitive_keys = [:email]
|
|
114
|
-
|
|
115
|
-
@user = User.authenticate_with_ldap(:email => "EXAMPLE.user@test.com", :password => "secret")
|
|
116
|
-
assert_contains(User.all.collect(&:email), "example.user@test.com", "user not in database")
|
|
117
|
-
end
|
|
118
|
-
end
|
|
119
|
-
|
|
120
|
-
end
|
|
121
|
-
|
|
122
|
-
context "use groups for authorization" do
|
|
123
|
-
setup do
|
|
124
|
-
@admin = Factory(:admin)
|
|
125
|
-
@user = Factory(:user)
|
|
126
|
-
::Devise.authentication_keys = [:email]
|
|
127
|
-
::Devise.ldap_check_group_membership = true
|
|
128
|
-
end
|
|
129
|
-
|
|
130
|
-
context "config check_group_membership is not defined" do
|
|
131
|
-
should "admin should be allowed in" do
|
|
132
|
-
should_be_validated @admin, "admin_secret"
|
|
133
|
-
end
|
|
134
|
-
|
|
135
|
-
should "admin should have the proper groups set" do
|
|
136
|
-
assert_contains(@admin.ldap_groups, /cn=admins/, "groups attribute not being set properly")
|
|
137
|
-
end
|
|
138
|
-
|
|
139
|
-
should "user should not be allowed in" do
|
|
140
|
-
should_not_be_validated @user, "secret"
|
|
141
|
-
end
|
|
142
|
-
|
|
143
|
-
should "not be validated if group with different attribute is removed" do
|
|
144
|
-
`ldapmodify #{ldap_connect_string} -f ../ldap/delete_authorization_role.ldif`
|
|
145
|
-
should_not_be_validated @admin, "admin_secret"
|
|
146
|
-
end
|
|
147
|
-
end
|
|
148
|
-
|
|
149
|
-
context "config file check_group_membership is defined" do
|
|
150
|
-
setup do
|
|
151
|
-
default_devise_settings!
|
|
152
|
-
reset_ldap_server!
|
|
153
|
-
end
|
|
154
|
-
|
|
155
|
-
context "check_group_membership is turned on" do
|
|
156
|
-
setup do
|
|
157
|
-
::Devise.ldap_config = "#{Rails.root}/config/ldap_with_check_membership_on.yml"
|
|
158
|
-
|
|
159
|
-
::Devise.ldap_check_group_membership = false
|
|
160
|
-
end
|
|
161
|
-
|
|
162
|
-
# Config file value has precedence over ldap_check_group_membership
|
|
163
|
-
should "user should not be allowed in" do
|
|
164
|
-
should_not_be_validated @user, "secret"
|
|
165
|
-
end
|
|
166
|
-
end
|
|
167
|
-
|
|
168
|
-
context "check_group_membership is turned off" do
|
|
169
|
-
setup do
|
|
170
|
-
::Devise.ldap_config = "#{Rails.root}/config/ldap_with_check_membership_off.yml"
|
|
171
|
-
|
|
172
|
-
::Devise.ldap_check_group_membership = true
|
|
173
|
-
end
|
|
174
|
-
|
|
175
|
-
# Config file value has precedence over ldap_check_group_membership
|
|
176
|
-
should "user should be allowed in" do
|
|
177
|
-
should_be_validated @user, "secret"
|
|
178
|
-
end
|
|
179
|
-
end
|
|
180
|
-
end
|
|
181
|
-
end
|
|
182
|
-
|
|
183
|
-
context "use role attribute for authorization" do
|
|
184
|
-
setup do
|
|
185
|
-
@admin = Factory(:admin)
|
|
186
|
-
@user = Factory(:user)
|
|
187
|
-
::Devise.ldap_check_attributes = true
|
|
188
|
-
end
|
|
189
|
-
|
|
190
|
-
should "admin should be allowed in" do
|
|
191
|
-
should_be_validated @admin, "admin_secret"
|
|
192
|
-
end
|
|
193
|
-
|
|
194
|
-
should "user should not be allowed in" do
|
|
195
|
-
should_not_be_validated @user, "secret"
|
|
196
|
-
end
|
|
197
|
-
end
|
|
198
|
-
|
|
199
|
-
context "use admin setting to bind" do
|
|
200
|
-
setup do
|
|
201
|
-
@admin = Factory(:admin)
|
|
202
|
-
@user = Factory(:user)
|
|
203
|
-
::Devise.ldap_use_admin_to_bind = true
|
|
204
|
-
end
|
|
205
|
-
|
|
206
|
-
should "description" do
|
|
207
|
-
should_be_validated @admin, "admin_secret"
|
|
208
|
-
end
|
|
209
|
-
end
|
|
210
|
-
|
|
211
|
-
end
|
|
212
|
-
|
|
213
|
-
context "use uid for login" do
|
|
214
|
-
setup do
|
|
215
|
-
default_devise_settings!
|
|
216
|
-
reset_ldap_server!
|
|
217
|
-
::Devise.ldap_config = "#{Rails.root}/config/#{"ssl_" if ENV["LDAP_SSL"]}ldap_with_uid.yml"
|
|
218
|
-
::Devise.authentication_keys = [:uid]
|
|
219
|
-
end
|
|
220
|
-
|
|
221
|
-
context "description" do
|
|
222
|
-
setup do
|
|
223
|
-
@admin = Factory(:admin)
|
|
224
|
-
@user = Factory(:user, :uid => "example_user")
|
|
225
|
-
end
|
|
226
|
-
|
|
227
|
-
should "be able to authenticate using uid" do
|
|
228
|
-
should_be_validated @user, "secret"
|
|
229
|
-
should_not_be_validated @admin, "admin_secret"
|
|
230
|
-
end
|
|
231
|
-
end
|
|
232
|
-
|
|
233
|
-
context "create user" do
|
|
234
|
-
setup do
|
|
235
|
-
::Devise.ldap_create_user = true
|
|
236
|
-
end
|
|
237
|
-
|
|
238
|
-
should "create a user in the database" do
|
|
239
|
-
@user = User.authenticate_with_ldap(:uid => "example_user", :password => "secret")
|
|
240
|
-
assert_equal(User.all.size, 1)
|
|
241
|
-
assert_contains(User.all.collect(&:uid), "example_user", "user not in database")
|
|
242
|
-
end
|
|
243
|
-
|
|
244
|
-
should "call ldap_before_save hooks" do
|
|
245
|
-
User.class_eval do
|
|
246
|
-
def ldap_before_save
|
|
247
|
-
@foobar = 'foobar'
|
|
248
|
-
end
|
|
249
|
-
end
|
|
250
|
-
user = User.authenticate_with_ldap(:uid => "example_user", :password => "secret")
|
|
251
|
-
assert_equal 'foobar', user.instance_variable_get(:"@foobar")
|
|
252
|
-
User.class_eval do
|
|
253
|
-
undef ldap_before_save
|
|
254
|
-
end
|
|
255
|
-
end
|
|
256
|
-
|
|
257
|
-
should "not call ldap_before_save hook if not defined" do
|
|
258
|
-
assert_nothing_raised do
|
|
259
|
-
should_be_validated Factory(:user, :uid => "example_user"), "secret"
|
|
260
|
-
end
|
|
261
|
-
end
|
|
262
|
-
end
|
|
263
|
-
end
|
|
264
|
-
|
|
265
|
-
context "using ERB in the config file" do
|
|
266
|
-
setup do
|
|
267
|
-
default_devise_settings!
|
|
268
|
-
reset_ldap_server!
|
|
269
|
-
::Devise.ldap_config = "#{Rails.root}/config/#{"ssl_" if ENV["LDAP_SSL"]}ldap_with_erb.yml"
|
|
270
|
-
end
|
|
271
|
-
|
|
272
|
-
context "authenticate" do
|
|
273
|
-
setup do
|
|
274
|
-
@admin = Factory(:admin)
|
|
275
|
-
@user = Factory(:user)
|
|
276
|
-
end
|
|
277
|
-
|
|
278
|
-
should "be able to authenticate" do
|
|
279
|
-
should_be_validated @user, "secret"
|
|
280
|
-
should_be_validated @admin, "admin_secret"
|
|
281
|
-
end
|
|
282
|
-
end
|
|
283
|
-
end
|
|
284
|
-
|
|
285
|
-
context "using variants in the config file" do
|
|
286
|
-
setup do
|
|
287
|
-
default_devise_settings!
|
|
288
|
-
reset_ldap_server!
|
|
289
|
-
::Devise.ldap_config = Rails.root.join 'config', 'ldap_with_boolean_ssl.yml'
|
|
290
|
-
end
|
|
291
|
-
|
|
292
|
-
should "not fail if config file has ssl: true" do
|
|
293
|
-
assert_nothing_raised do
|
|
294
|
-
Devise::LdapAdapter::LdapConnect.new
|
|
295
|
-
end
|
|
296
|
-
end
|
|
297
|
-
end
|
|
298
|
-
|
|
299
|
-
context "use username builder" do
|
|
300
|
-
setup do
|
|
301
|
-
default_devise_settings!
|
|
302
|
-
reset_ldap_server!
|
|
303
|
-
::Devise.ldap_auth_username_builder = Proc.new() do |attribute, login, ldap|
|
|
304
|
-
"#{attribute}=#{login},ou=others,dc=test,dc=com"
|
|
305
|
-
end
|
|
306
|
-
@other = Factory(:other)
|
|
307
|
-
end
|
|
308
|
-
|
|
309
|
-
should "be able to authenticate" do
|
|
310
|
-
should_be_validated @other, "other_secret"
|
|
311
|
-
end
|
|
312
|
-
end
|
|
313
|
-
|
|
314
|
-
end
|