devise_ldap_authenticatable 0.4.0 → 0.4.1
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +5 -0
- data/MIT-LICENSE +20 -0
- data/README.md +4 -1
- data/Rakefile +52 -0
- data/VERSION +1 -0
- data/devise_ldap_authenticatable.gemspec +166 -0
- data/lib/devise_ldap_authenticatable.rb +3 -0
- data/lib/devise_ldap_authenticatable/ldap_adapter.rb +14 -4
- data/lib/devise_ldap_authenticatable/model.rb +26 -26
- data/lib/devise_ldap_authenticatable/version.rb +1 -1
- data/lib/generators/devise_ldap_authenticatable/install_generator.rb +2 -0
- data/rails/init.rb +2 -0
- data/test/devise_ldap_authenticatable_test.rb +8 -0
- data/test/ldap/base.ldif +54 -0
- data/test/ldap/clear.ldif +20 -0
- data/test/ldap/local.schema +6 -0
- data/test/ldap/run-server.sh +4 -0
- data/test/ldap/slapd-test.conf +106 -0
- data/test/rails_app/Gemfile +22 -0
- data/test/rails_app/Rakefile +7 -0
- data/test/rails_app/app/controllers/application_controller.rb +4 -0
- data/test/rails_app/app/controllers/posts_controller.rb +15 -0
- data/test/rails_app/app/helpers/application_helper.rb +2 -0
- data/test/rails_app/app/helpers/posts_helper.rb +2 -0
- data/test/rails_app/app/models/post.rb +2 -0
- data/test/rails_app/app/models/user.rb +10 -0
- data/test/rails_app/app/views/layouts/application.html.erb +26 -0
- data/test/rails_app/app/views/posts/index.html.erb +2 -0
- data/test/rails_app/config.ru +4 -0
- data/test/rails_app/config/application.rb +46 -0
- data/test/rails_app/config/boot.rb +13 -0
- data/test/rails_app/config/cucumber.yml +8 -0
- data/test/rails_app/config/database.yml +25 -0
- data/test/rails_app/config/environment.rb +5 -0
- data/test/rails_app/config/environments/development.rb +22 -0
- data/test/rails_app/config/environments/production.rb +46 -0
- data/test/rails_app/config/environments/test.rb +34 -0
- data/test/rails_app/config/initializers/backtrace_silencers.rb +7 -0
- data/test/rails_app/config/initializers/devise.rb +140 -0
- data/test/rails_app/config/initializers/inflections.rb +10 -0
- data/test/rails_app/config/initializers/mime_types.rb +5 -0
- data/test/rails_app/config/initializers/secret_token.rb +7 -0
- data/test/rails_app/config/initializers/session_store.rb +8 -0
- data/test/rails_app/config/ldap.yml +33 -0
- data/test/rails_app/config/ldap_with_uid.yml +30 -0
- data/test/rails_app/config/locales/devise.en.yml +39 -0
- data/test/rails_app/config/locales/en.yml +5 -0
- data/test/rails_app/config/routes.rb +64 -0
- data/test/rails_app/db/migrate/20100708120302_create_posts.rb +14 -0
- data/test/rails_app/db/migrate/20100708120448_devise_create_users.rb +26 -0
- data/test/rails_app/db/schema.rb +41 -0
- data/test/rails_app/db/seeds.rb +7 -0
- data/test/rails_app/features/manage_logins.feature +34 -0
- data/test/rails_app/features/step_definitions/login_steps.rb +16 -0
- data/test/rails_app/features/step_definitions/web_steps.rb +219 -0
- data/test/rails_app/features/support/env.rb +58 -0
- data/test/rails_app/features/support/paths.rb +38 -0
- data/test/rails_app/lib/tasks/.gitkeep +0 -0
- data/test/rails_app/lib/tasks/cucumber.rake +53 -0
- data/test/rails_app/public/404.html +26 -0
- data/test/rails_app/public/422.html +26 -0
- data/test/rails_app/public/500.html +26 -0
- data/test/rails_app/public/images/rails.png +0 -0
- data/test/rails_app/public/javascripts/application.js +2 -0
- data/test/rails_app/public/javascripts/controls.js +965 -0
- data/test/rails_app/public/javascripts/dragdrop.js +974 -0
- data/test/rails_app/public/javascripts/effects.js +1123 -0
- data/test/rails_app/public/javascripts/prototype.js +4874 -0
- data/test/rails_app/public/javascripts/rails.js +118 -0
- data/test/rails_app/public/stylesheets/.gitkeep +0 -0
- data/test/rails_app/script/cucumber +10 -0
- data/test/rails_app/script/rails +6 -0
- data/test/rails_app/test/factories/users.rb +9 -0
- data/test/rails_app/test/functional/posts_controller_test.rb +58 -0
- data/test/rails_app/test/performance/browsing_test.rb +9 -0
- data/test/rails_app/test/test_helper.rb +22 -0
- data/test/rails_app/test/unit/helpers/posts_helper_test.rb +4 -0
- data/test/rails_app/test/unit/post_test.rb +8 -0
- data/test/rails_app/test/unit/user_test.rb +172 -0
- data/test/test_helper.rb +3 -0
- metadata +140 -30
data/test/ldap/base.ldif
ADDED
@@ -0,0 +1,54 @@
|
|
1
|
+
# ldapadd -x -h localhost -p 3389 -D "cn=admin,dc=test,dc=com" -w secret -f base.ldif
|
2
|
+
|
3
|
+
dn: dc=test,dc=com
|
4
|
+
objectClass: dcObject
|
5
|
+
objectClass: organizationalUnit
|
6
|
+
dc: test
|
7
|
+
ou: Test
|
8
|
+
|
9
|
+
dn: ou=people,dc=test,dc=com
|
10
|
+
objectClass: organizationalUnit
|
11
|
+
ou: people
|
12
|
+
|
13
|
+
dn: ou=groups,dc=test,dc=com
|
14
|
+
objectClass: organizationalUnit
|
15
|
+
ou: groups
|
16
|
+
|
17
|
+
# example.user@test.com, people, test.com
|
18
|
+
dn: cn=example.user@test.com,ou=people,dc=test,dc=com
|
19
|
+
objectClass: inetOrgPerson
|
20
|
+
objectClass: authorizations
|
21
|
+
sn: User
|
22
|
+
uid: example_user
|
23
|
+
mail: example.user@test.com
|
24
|
+
cn: example.user@test.com
|
25
|
+
authorizationRole: blogUser
|
26
|
+
userPassword:: e1NTSEF9ZXRYaE9NcjRjOGFiTjlqYUxyczZKSll5MFlaZUF1NURCVWhhY0E9PQ=
|
27
|
+
=
|
28
|
+
|
29
|
+
# example.admin@test.com, people, test.com
|
30
|
+
dn: cn=example.admin@test.com,ou=people,dc=test,dc=com
|
31
|
+
objectClass: inetOrgPerson
|
32
|
+
objectClass: authorizations
|
33
|
+
objectClass: organizationalPerson
|
34
|
+
objectClass: person
|
35
|
+
objectClass: top
|
36
|
+
sn: Admin
|
37
|
+
uid: example_admin
|
38
|
+
cn: example.admin@test.com
|
39
|
+
authorizationRole: blogAdmin
|
40
|
+
userPassword:: e1NIQX0wcUNXaERISGFwWmc3ekJxZWRRanBzNW1EUDA9
|
41
|
+
|
42
|
+
# users, groups, test.com
|
43
|
+
dn: cn=users,ou=groups,dc=test,dc=com
|
44
|
+
objectClass: groupOfUniqueNames
|
45
|
+
objectClass: top
|
46
|
+
uniqueMember: cn=example.user@test.com,ou=people,dc=test,dc=com
|
47
|
+
cn: users
|
48
|
+
|
49
|
+
# users, groups, test.com
|
50
|
+
dn: cn=admins,ou=groups,dc=test,dc=com
|
51
|
+
objectClass: groupOfUniqueNames
|
52
|
+
objectClass: top
|
53
|
+
uniqueMember: cn=example.admin@test.com,ou=people,dc=test,dc=com
|
54
|
+
cn: admins
|
@@ -0,0 +1,20 @@
|
|
1
|
+
dn: cn=admins,ou=groups,dc=test,dc=com
|
2
|
+
changetype: delete
|
3
|
+
|
4
|
+
dn: cn=users,ou=groups,dc=test,dc=com
|
5
|
+
changetype: delete
|
6
|
+
|
7
|
+
dn: cn=example.admin@test.com,ou=people,dc=test,dc=com
|
8
|
+
changetype: delete
|
9
|
+
|
10
|
+
dn: cn=example.user@test.com,ou=people,dc=test,dc=com
|
11
|
+
changetype: delete
|
12
|
+
|
13
|
+
dn: ou=groups,dc=test,dc=com
|
14
|
+
changetype: delete
|
15
|
+
|
16
|
+
dn: ou=people,dc=test,dc=com
|
17
|
+
changetype: delete
|
18
|
+
|
19
|
+
dn: dc=test,dc=com
|
20
|
+
changetype: delete
|
@@ -0,0 +1,106 @@
|
|
1
|
+
#
|
2
|
+
# See slapd.conf(5) for details on configuration options.
|
3
|
+
# This file should NOT be world readable.
|
4
|
+
#
|
5
|
+
include /etc/openldap/schema/core.schema
|
6
|
+
include /etc/openldap/schema/cosine.schema
|
7
|
+
include /etc/openldap/schema/inetorgperson.schema
|
8
|
+
include /etc/openldap/schema/nis.schema
|
9
|
+
|
10
|
+
## Local definitions
|
11
|
+
# include /etc/openldap/schema/local.schema
|
12
|
+
include local.schema
|
13
|
+
|
14
|
+
# Allow LDAPv2 client connections. This is NOT the default.
|
15
|
+
allow bind_v2
|
16
|
+
|
17
|
+
# Do not enable referrals until AFTER you have a working directory
|
18
|
+
# service AND an understanding of referrals.
|
19
|
+
#referral ldap://root.openldap.org
|
20
|
+
|
21
|
+
pidfile openldap-data/run/slapd.pid
|
22
|
+
argsfile openldap-data/run/slapd.args
|
23
|
+
|
24
|
+
# Load dynamic backend modules:
|
25
|
+
modulepath /usr/lib/openldap
|
26
|
+
|
27
|
+
# modules available in openldap-servers-overlays RPM package:
|
28
|
+
# moduleload accesslog.la
|
29
|
+
# moduleload auditlog.la
|
30
|
+
# moduleload denyop.la
|
31
|
+
# moduleload dyngroup.la
|
32
|
+
# moduleload dynlist.la
|
33
|
+
# moduleload lastmod.la
|
34
|
+
# moduleload pcache.la
|
35
|
+
# moduleload ppolicy.la
|
36
|
+
# moduleload refint.la
|
37
|
+
# moduleload retcode.la
|
38
|
+
# moduleload rwm.la
|
39
|
+
# moduleload smbk5pwd.la
|
40
|
+
# moduleload syncprov.la
|
41
|
+
# moduleload translucent.la
|
42
|
+
# moduleload unique.la
|
43
|
+
# moduleload valsort.la
|
44
|
+
|
45
|
+
# modules available in openldap-servers-sql RPM package:
|
46
|
+
# moduleload back_sql.la
|
47
|
+
|
48
|
+
# The next three lines allow use of TLS for encrypting connections using a
|
49
|
+
# dummy test certificate which you can generate by changing to
|
50
|
+
# /etc/pki/tls/certs, running "make slapd.pem", and fixing permissions on
|
51
|
+
# slapd.pem so that the ldap user or group can read it. Your client software
|
52
|
+
# may balk at self-signed certificates, however.
|
53
|
+
|
54
|
+
# TLSCACertificateFile /etc/pki/tls/certs/ca-bundle.crt
|
55
|
+
# TLSCertificateFile /etc/pki/tls/certs/slapd.pem
|
56
|
+
# TLSCertificateKeyFile /etc/pki/tls/certs/slapd.pem
|
57
|
+
|
58
|
+
# TLSVerifyClient demand
|
59
|
+
|
60
|
+
# Sample security restrictions
|
61
|
+
# Require integrity protection (prevent hijacking)
|
62
|
+
# Require 112-bit (3DES or better) encryption for updates
|
63
|
+
# Require 63-bit encryption for simple bind
|
64
|
+
# security ssf=1 update_ssf=112 simple_bind=64
|
65
|
+
|
66
|
+
# Sample access control policy:
|
67
|
+
# Root DSE: allow anyone to read it
|
68
|
+
# Subschema (sub)entry DSE: allow anyone to read it
|
69
|
+
# Other DSEs:
|
70
|
+
# Allow self write access
|
71
|
+
# Allow authenticated users read access
|
72
|
+
# Allow anonymous users to authenticate
|
73
|
+
# Directives needed to implement policy:
|
74
|
+
|
75
|
+
# access to dn.base="dc=esc" by * read
|
76
|
+
# access to dn.base="cn=Subschema" by * read
|
77
|
+
access to *
|
78
|
+
by self write
|
79
|
+
by * read
|
80
|
+
by anonymous auth
|
81
|
+
|
82
|
+
#
|
83
|
+
# if no access controls are present, the default policy
|
84
|
+
# allows anyone and everyone to read anything but restricts
|
85
|
+
# updates to rootdn. (e.g., "access to * by * read")
|
86
|
+
#
|
87
|
+
# rootdn can always read and write EVERYTHING!
|
88
|
+
|
89
|
+
#######################################################################
|
90
|
+
# ldbm and/or bdb database definitions
|
91
|
+
#######################################################################
|
92
|
+
|
93
|
+
database bdb
|
94
|
+
|
95
|
+
suffix "dc=test,dc=com"
|
96
|
+
directory openldap-data
|
97
|
+
rootdn "cn=admin,dc=test,dc=com"
|
98
|
+
## rootpw = secret
|
99
|
+
rootpw {SSHA}fFjKcZb4cfOAcwSjJer8nCGOEVRUnwCC
|
100
|
+
|
101
|
+
# Indices to maintain for this database
|
102
|
+
index objectClass eq,pres
|
103
|
+
index ou,cn,mail,surname,givenname eq,pres,sub
|
104
|
+
index uidNumber,gidNumber,loginShell eq,pres
|
105
|
+
index uid,memberUid eq,pres,sub
|
106
|
+
index nisMapName,nisMapEntry eq,pres,sub
|
@@ -0,0 +1,22 @@
|
|
1
|
+
source 'http://rubygems.org'
|
2
|
+
|
3
|
+
gem 'rails', '3.0.0.rc'
|
4
|
+
gem 'sqlite3-ruby', :require => 'sqlite3'
|
5
|
+
|
6
|
+
gem "devise", "1.1.rc2"
|
7
|
+
gem "devise_ldap_authenticatable", :path => "../../"
|
8
|
+
|
9
|
+
group :test do
|
10
|
+
gem "ruby-debug"
|
11
|
+
gem "mocha"
|
12
|
+
gem "shoulda"
|
13
|
+
gem 'factory_girl_rails'
|
14
|
+
gem "cucumber-rails"
|
15
|
+
gem "database_cleaner"
|
16
|
+
gem "capybara"
|
17
|
+
gem "launchy"
|
18
|
+
gem "autotest-rails"
|
19
|
+
gem "ZenTest"
|
20
|
+
gem "redgreen"
|
21
|
+
gem "autotest-growl"
|
22
|
+
end
|
@@ -0,0 +1,7 @@
|
|
1
|
+
# Add your own tasks in files placed in lib/tasks ending in .rake,
|
2
|
+
# for example lib/tasks/capistrano.rake, and they will automatically be available to Rake.
|
3
|
+
|
4
|
+
require File.expand_path('../config/application', __FILE__)
|
5
|
+
require 'rake'
|
6
|
+
|
7
|
+
RailsApp::Application.load_tasks
|
@@ -0,0 +1,15 @@
|
|
1
|
+
class PostsController < ApplicationController
|
2
|
+
|
3
|
+
before_filter :authenticate_user!, :except => [:index]
|
4
|
+
|
5
|
+
def index
|
6
|
+
# render :inline => "posts#index", :layout => "application"
|
7
|
+
render :text => "posts#index"
|
8
|
+
end
|
9
|
+
|
10
|
+
def new
|
11
|
+
# render :inline => "posts#new", :layout => "application"
|
12
|
+
render :text => "posts#new"
|
13
|
+
end
|
14
|
+
|
15
|
+
end
|
@@ -0,0 +1,10 @@
|
|
1
|
+
class User < ActiveRecord::Base
|
2
|
+
|
3
|
+
# Include default devise modules. Others available are:
|
4
|
+
# :token_authenticatable, :confirmable, :lockable and :timeoutable
|
5
|
+
devise :ldap_authenticatable, :registerable,
|
6
|
+
:recoverable, :rememberable, :trackable# , :validatable
|
7
|
+
|
8
|
+
# Setup accessible (or protected) attributes for your model
|
9
|
+
attr_accessible :email, :password, :password_confirmation
|
10
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html>
|
3
|
+
<head>
|
4
|
+
<title>RailsApp</title>
|
5
|
+
<%= stylesheet_link_tag :all %>
|
6
|
+
<%= javascript_include_tag :defaults %>
|
7
|
+
<%= csrf_meta_tag %>
|
8
|
+
</head>
|
9
|
+
<body>
|
10
|
+
|
11
|
+
<% if user_signed_in? %>
|
12
|
+
<%= link_to "sign out", destroy_user_session_path %>
|
13
|
+
<% else %>
|
14
|
+
<%= link_to "sign in", new_user_session_path %>
|
15
|
+
<% end %>
|
16
|
+
|
17
|
+
<p />
|
18
|
+
|
19
|
+
<% flash.each do |name, message| %>
|
20
|
+
<p id="<%= name %>" class="flash"><%= message %></p>
|
21
|
+
<% end %>
|
22
|
+
|
23
|
+
<%= yield %>
|
24
|
+
|
25
|
+
</body>
|
26
|
+
</html>
|
@@ -0,0 +1,46 @@
|
|
1
|
+
require File.expand_path('../boot', __FILE__)
|
2
|
+
|
3
|
+
require 'rails/all'
|
4
|
+
|
5
|
+
# If you have a Gemfile, require the gems listed there, including any gems
|
6
|
+
# you've limited to :test, :development, or :production.
|
7
|
+
Bundler.require(:default, Rails.env) if defined?(Bundler)
|
8
|
+
|
9
|
+
module RailsApp
|
10
|
+
class Application < Rails::Application
|
11
|
+
# Settings in config/environments/* take precedence over those specified here.
|
12
|
+
# Application configuration should go into files in config/initializers
|
13
|
+
# -- all .rb files in that directory are automatically loaded.
|
14
|
+
|
15
|
+
# Add additional load paths for your own custom dirs
|
16
|
+
# config.load_paths += %W( #{config.root}/extras )
|
17
|
+
|
18
|
+
# Only load the plugins named here, in the order given (default is alphabetical).
|
19
|
+
# :all can be used as a placeholder for all plugins not explicitly named
|
20
|
+
# config.plugins = [ :exception_notification, :ssl_requirement, :all ]
|
21
|
+
|
22
|
+
# Activate observers that should always be running
|
23
|
+
# config.active_record.observers = :cacher, :garbage_collector, :forum_observer
|
24
|
+
|
25
|
+
# Set Time.zone default to the specified zone and make Active Record auto-convert to this zone.
|
26
|
+
# Run "rake -D time" for a list of tasks for finding time zone names. Default is UTC.
|
27
|
+
# config.time_zone = 'Central Time (US & Canada)'
|
28
|
+
|
29
|
+
# The default locale is :en and all translations from config/locales/*.rb,yml are auto loaded.
|
30
|
+
# config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s]
|
31
|
+
# config.i18n.default_locale = :de
|
32
|
+
|
33
|
+
# Configure generators values. Many other options are available, be sure to check the documentation.
|
34
|
+
# config.generators do |g|
|
35
|
+
# g.orm :active_record
|
36
|
+
# g.template_engine :erb
|
37
|
+
# g.test_framework :test_unit, :fixture => true
|
38
|
+
# end
|
39
|
+
|
40
|
+
# Configure the default encoding used in templates for Ruby 1.9.
|
41
|
+
config.encoding = "utf-8"
|
42
|
+
|
43
|
+
# Configure sensitive parameters which will be filtered from the log file.
|
44
|
+
config.filter_parameters += [:password]
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
|
3
|
+
# Set up gems listed in the Gemfile.
|
4
|
+
gemfile = File.expand_path('../../Gemfile', __FILE__)
|
5
|
+
begin
|
6
|
+
ENV['BUNDLE_GEMFILE'] = gemfile
|
7
|
+
require 'bundler'
|
8
|
+
Bundler.setup
|
9
|
+
rescue Bundler::GemNotFound => e
|
10
|
+
STDERR.puts e.message
|
11
|
+
STDERR.puts "Try running `bundle install`."
|
12
|
+
exit!
|
13
|
+
end if File.exist?(gemfile)
|
@@ -0,0 +1,8 @@
|
|
1
|
+
<%
|
2
|
+
rerun = File.file?('rerun.txt') ? IO.read('rerun.txt') : ""
|
3
|
+
rerun_opts = rerun.to_s.strip.empty? ? "--format #{ENV['CUCUMBER_FORMAT'] || 'progress'} features" : "--format #{ENV['CUCUMBER_FORMAT'] || 'pretty'} #{rerun}"
|
4
|
+
std_opts = "--format #{ENV['CUCUMBER_FORMAT'] || 'progress'} --strict --tags ~@wip"
|
5
|
+
%>
|
6
|
+
default: <%= std_opts %> features
|
7
|
+
wip: --tags @wip:3 --wip features
|
8
|
+
rerun: <%= rerun_opts %> --format rerun --out rerun.txt --strict --tags ~@wip
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# SQLite version 3.x
|
2
|
+
# gem install sqlite3-ruby (not necessary on OS X Leopard)
|
3
|
+
development:
|
4
|
+
adapter: sqlite3
|
5
|
+
database: db/development.sqlite3
|
6
|
+
pool: 5
|
7
|
+
timeout: 5000
|
8
|
+
|
9
|
+
# Warning: The database defined as "test" will be erased and
|
10
|
+
# re-generated from your development database when you run "rake".
|
11
|
+
# Do not set this db to the same as development or production.
|
12
|
+
test: &test
|
13
|
+
adapter: sqlite3
|
14
|
+
database: db/test.sqlite3
|
15
|
+
pool: 5
|
16
|
+
timeout: 5000
|
17
|
+
|
18
|
+
production:
|
19
|
+
adapter: sqlite3
|
20
|
+
database: db/production.sqlite3
|
21
|
+
pool: 5
|
22
|
+
timeout: 5000
|
23
|
+
|
24
|
+
cucumber:
|
25
|
+
<<: *test
|
@@ -0,0 +1,22 @@
|
|
1
|
+
RailsApp::Application.configure do
|
2
|
+
# Settings specified here will take precedence over those in config/environment.rb
|
3
|
+
|
4
|
+
# In the development environment your application's code is reloaded on
|
5
|
+
# every request. This slows down response time but is perfect for development
|
6
|
+
# since you don't have to restart the webserver when you make code changes.
|
7
|
+
config.cache_classes = false
|
8
|
+
|
9
|
+
# Log error messages when you accidentally call methods on nil.
|
10
|
+
config.whiny_nils = true
|
11
|
+
|
12
|
+
# Show full error reports and disable caching
|
13
|
+
config.consider_all_requests_local = true
|
14
|
+
config.action_view.debug_rjs = true
|
15
|
+
config.action_controller.perform_caching = false
|
16
|
+
|
17
|
+
# Don't care if the mailer can't send
|
18
|
+
config.action_mailer.raise_delivery_errors = false
|
19
|
+
config.active_support.deprecation = :log
|
20
|
+
|
21
|
+
config.action_mailer.default_url_options = { :host => 'localhost:3000' }
|
22
|
+
end
|