Commit d711beb1d642c8ea42243dcae263e0a4d0944f1f
1 parent
18ea9ebe
Exists in
master
and in
29 other branches
adding plugin to give ldap support for noosfero
Showing
13 changed files
with
1193 additions
and
0 deletions
Show diff stats
@@ -0,0 +1,71 @@ | @@ -0,0 +1,71 @@ | ||
1 | +README - LDAP (LDAP Plugin) | ||
2 | +================================ | ||
3 | + | ||
4 | +LDAP is a plugin to allow ldap authentication to noosfero | ||
5 | + | ||
6 | + | ||
7 | +INSTALL | ||
8 | +======= | ||
9 | + | ||
10 | +Dependences | ||
11 | +----------- | ||
12 | + | ||
13 | +See the Noosfero install file. After install Noosfero, install Mezuro dependences: | ||
14 | + | ||
15 | +$ gem install net-ldap -v 0.3.1 | ||
16 | + | ||
17 | +Enable Plugin | ||
18 | +------------- | ||
19 | + | ||
20 | +Also, you need to enable LDAP Plugin at you Noosfero: | ||
21 | + | ||
22 | +cd <your_noosfero_dir> | ||
23 | +./script/noosfero-plugins enable ldap | ||
24 | + | ||
25 | +Active Plugin | ||
26 | +------------- | ||
27 | + | ||
28 | +As a Noosfero administrator user, go to administrator panel: | ||
29 | + | ||
30 | +- Click on "Enable/disable plugins" option | ||
31 | +- Click on "LDAP Plugin" check-box | ||
32 | + | ||
33 | + | ||
34 | +DEVELOPMENT | ||
35 | +=========== | ||
36 | + | ||
37 | +Get the LDAP (Noosfero with LDAP Plugin) development repository: | ||
38 | + | ||
39 | +$ git clone https://gitorious.org/+noosfero/noosfero/ldap | ||
40 | + | ||
41 | +Running Mezuro tests | ||
42 | +-------------------- | ||
43 | + | ||
44 | +Configure the ldap server creating the file 'plugins/ldap/fixtures/ldap.yml'. | ||
45 | +A sample file is offered in 'plugins/ldap/fixtures/ldap.yml.dist' | ||
46 | + | ||
47 | +$ rake test:noosfero_plugins:ldap | ||
48 | + | ||
49 | + | ||
50 | +Get Involved | ||
51 | +============ | ||
52 | + | ||
53 | +If you found any bug and/or want to collaborate, please send an e-mail to leandronunes@gmail.com | ||
54 | + | ||
55 | +LICENSE | ||
56 | +======= | ||
57 | + | ||
58 | +Copyright (c) The Author developers. | ||
59 | + | ||
60 | +See Noosfero license. | ||
61 | + | ||
62 | + | ||
63 | +AUTHORS | ||
64 | +======= | ||
65 | + | ||
66 | + Leandro Nunes dos Santos (leandronunes at gmail.com) | ||
67 | + | ||
68 | +ACKNOWLEDGMENTS | ||
69 | +=============== | ||
70 | + | ||
71 | +The author have been supported by Serpro |
plugins/ldap/controllers/ldap_plugin_admin_controller.rb
0 → 100644
@@ -0,0 +1,18 @@ | @@ -0,0 +1,18 @@ | ||
1 | +class LdapPluginAdminController < AdminController | ||
2 | + | ||
3 | + append_view_path File.join(File.dirname(__FILE__) + '/../views') | ||
4 | + | ||
5 | + def index | ||
6 | + end | ||
7 | + | ||
8 | + def update | ||
9 | + if @environment.update_attributes(params[:environment]) | ||
10 | + session[:notice] = _('Ldap configuration updated successfully.') | ||
11 | + else | ||
12 | + session[:notice] = _('Ldap configuration could not be saved.') | ||
13 | + end | ||
14 | + render :action => 'index' | ||
15 | + end | ||
16 | + | ||
17 | +end | ||
18 | + |
@@ -0,0 +1,15 @@ | @@ -0,0 +1,15 @@ | ||
1 | +server: | ||
2 | + host: "127.0.0.1" | ||
3 | + port: 389 | ||
4 | + account: "uid=ldap_user,,ou=person,dc=noosfero,dc=org" | ||
5 | + account_password: "ldap_pass" | ||
6 | + base_dn: "dc=noosfero,dc=org" | ||
7 | + attr_login: "uid" | ||
8 | + attr_fullname: "cn" | ||
9 | + attr_mail: "mail" | ||
10 | + onthefly_register: true | ||
11 | + filter: "" | ||
12 | + tls: false | ||
13 | +user: | ||
14 | + login: 'valid_ldap_login' | ||
15 | + password: 'valid_ldap_password' |
@@ -0,0 +1,114 @@ | @@ -0,0 +1,114 @@ | ||
1 | +require_dependency 'environment' | ||
2 | + | ||
3 | +class Environment | ||
4 | + | ||
5 | + settings_items :ldap_plugin, :type => :hash, :default => {} | ||
6 | + | ||
7 | + validates_presence_of :ldap_plugin_host, :if => lambda {|env| !env.ldap_plugin.blank? } | ||
8 | + | ||
9 | + def ldap_plugin_attributes | ||
10 | + self.ldap_plugin || {} | ||
11 | + end | ||
12 | + | ||
13 | + def ldap_plugin_host= host | ||
14 | + self.ldap_plugin = {} if self.ldap_plugin.blank? | ||
15 | + self.ldap_plugin['host'] = host | ||
16 | + end | ||
17 | + | ||
18 | + def ldap_plugin_host | ||
19 | + self.ldap_plugin['host'] | ||
20 | + end | ||
21 | + | ||
22 | + def ldap_plugin_port= port | ||
23 | + self.ldap_plugin = {} if self.ldap_plugin.blank? | ||
24 | + self.ldap_plugin['port'] = port | ||
25 | + end | ||
26 | + | ||
27 | + def ldap_plugin_port | ||
28 | + self.ldap_plugin = {} if self.ldap_plugin.blank? | ||
29 | + self.ldap_plugin['port'] ||= 389 | ||
30 | + self.ldap_plugin['port'] | ||
31 | + end | ||
32 | + | ||
33 | + def ldap_plugin_account | ||
34 | + self.ldap_plugin['account'] | ||
35 | + end | ||
36 | + | ||
37 | + def ldap_plugin_account= account | ||
38 | + self.ldap_plugin = {} if self.ldap_plugin.blank? | ||
39 | + self.ldap_plugin['account'] = account | ||
40 | + end | ||
41 | + | ||
42 | + def ldap_plugin_account_password | ||
43 | + self.ldap_plugin['account_password'] | ||
44 | + end | ||
45 | + | ||
46 | + def ldap_plugin_account_password= password | ||
47 | + self.ldap_plugin = {} if self.ldap_plugin.blank? | ||
48 | + self.ldap_plugin['account_password'] = password | ||
49 | + end | ||
50 | + | ||
51 | + def ldap_plugin_base_dn | ||
52 | + self.ldap_plugin['base_dn'] | ||
53 | + end | ||
54 | + | ||
55 | + def ldap_plugin_base_dn= base_dn | ||
56 | + self.ldap_plugin = {} if self.ldap_plugin.blank? | ||
57 | + self.ldap_plugin['base_dn'] = base_dn | ||
58 | + end | ||
59 | + | ||
60 | + def ldap_plugin_attr_login | ||
61 | + self.ldap_plugin['attr_login'] | ||
62 | + end | ||
63 | + | ||
64 | + def ldap_plugin_attr_login= login | ||
65 | + self.ldap_plugin = {} if self.ldap_plugin.blank? | ||
66 | + self.ldap_plugin['attr_login'] = login | ||
67 | + end | ||
68 | + | ||
69 | + def ldap_plugin_attr_fullname | ||
70 | + self.ldap_plugin['attr_fullname'] | ||
71 | + end | ||
72 | + | ||
73 | + def ldap_plugin_attr_fullname= fullname | ||
74 | + self.ldap_plugin = {} if self.ldap_plugin.blank? | ||
75 | + self.ldap_plugin['attr_fullname'] = fullname | ||
76 | + end | ||
77 | + | ||
78 | + def ldap_plugin_attr_mail | ||
79 | + self.ldap_plugin['attr_mail'] | ||
80 | + end | ||
81 | + | ||
82 | + def ldap_plugin_attr_mail= mail | ||
83 | + self.ldap_plugin = {} if self.ldap_plugin.blank? | ||
84 | + self.ldap_plugin['attr_mail'] = mail | ||
85 | + end | ||
86 | + | ||
87 | + def ldap_plugin_onthefly_register | ||
88 | + self.ldap_plugin['onthefly_register'].to_s == 'true' | ||
89 | + end | ||
90 | + | ||
91 | + def ldap_plugin_onthefly_register= value | ||
92 | + self.ldap_plugin = {} if self.ldap_plugin.blank? | ||
93 | + self.ldap_plugin['onthefly_register'] = (value.to_s == '1') ? true : false | ||
94 | + end | ||
95 | + | ||
96 | + def ldap_plugin_filter | ||
97 | + self.ldap_plugin['filter'] | ||
98 | + end | ||
99 | + | ||
100 | + def ldap_plugin_filter= filter | ||
101 | + self.ldap_plugin = {} if self.ldap_plugin.blank? | ||
102 | + self.ldap_plugin['filter'] = filter | ||
103 | + end | ||
104 | + | ||
105 | + def ldap_plugin_tls | ||
106 | + self.ldap_plugin['tls'] ||= false | ||
107 | + end | ||
108 | + | ||
109 | + def ldap_plugin_tls= value | ||
110 | + self.ldap_plugin = {} if self.ldap_plugin.blank? | ||
111 | + self.ldap_plugin['tls'] = (value.to_s == '1') ? true : false | ||
112 | + end | ||
113 | + | ||
114 | +end |
@@ -0,0 +1,137 @@ | @@ -0,0 +1,137 @@ | ||
1 | +# Redmine - project management software | ||
2 | +# Copyright (C) 2006-2011 Jean-Philippe Lang | ||
3 | +# | ||
4 | +# This program is free software; you can redistribute it and/or | ||
5 | +# modify it under the terms of the GNU General Public License | ||
6 | +# as published by the Free Software Foundation; either version 2 | ||
7 | +# of the License, or (at your option) any later version. | ||
8 | +# | ||
9 | +# This program is distributed in the hope that it will be useful, | ||
10 | +# but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
11 | +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
12 | +# GNU General Public License for more details. | ||
13 | +# | ||
14 | +# You should have received a copy of the GNU General Public License | ||
15 | +# along with this program; if not, write to the Free Software | ||
16 | +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | ||
17 | + | ||
18 | +require 'rubygems' | ||
19 | +require 'iconv' | ||
20 | +require 'net/ldap' | ||
21 | +require 'net/ldap/dn' | ||
22 | + | ||
23 | +class LdapAuthentication | ||
24 | + | ||
25 | + attr_accessor :host, :port, :account, :account_password, :base_dn, :attr_login, :attr_fullname, :attr_mail, :onthefly_register, :filter, :tls | ||
26 | + | ||
27 | + def initialize(attrs = {}) | ||
28 | + self.host = attrs['host'] | ||
29 | + self.port = attrs['port'].blank? ? 389 : attrs['port'] | ||
30 | + self.account = attrs['account'] | ||
31 | + self.account_password = attrs['account_password'] | ||
32 | + self.base_dn = attrs['base_dn'] | ||
33 | + self.attr_login = attrs['attr_login'] | ||
34 | + self.attr_fullname = attrs['attr_fullname'] | ||
35 | + self.attr_mail = attrs['attr_mail'] | ||
36 | + self.onthefly_register = attrs['onthefly_register'] | ||
37 | + self.filter = attrs['filter'] | ||
38 | + self.tls = attrs['tls'] | ||
39 | + end | ||
40 | + | ||
41 | + def onthefly_register? | ||
42 | + self.onthefly_register == true | ||
43 | + end | ||
44 | + | ||
45 | + def authenticate(login, password) | ||
46 | + return nil if login.blank? || password.blank? | ||
47 | + attrs = get_user_dn(login, password) | ||
48 | + | ||
49 | + if attrs && attrs[:dn] && authenticate_dn(attrs[:dn], password) | ||
50 | + return attrs.except(:dn) | ||
51 | + end | ||
52 | + end | ||
53 | + | ||
54 | + private | ||
55 | + | ||
56 | + def ldap_filter | ||
57 | + if filter.present? | ||
58 | + Net::LDAP::Filter.construct(filter) | ||
59 | + end | ||
60 | + rescue Net::LDAP::LdapError | ||
61 | + nil | ||
62 | + end | ||
63 | + | ||
64 | + def validate_filter | ||
65 | + if filter.present? && ldap_filter.nil? | ||
66 | + errors.add(:filter, :invalid) | ||
67 | + end | ||
68 | + end | ||
69 | + | ||
70 | + def initialize_ldap_con(ldap_user, ldap_password) | ||
71 | + options = { :host => self.host, | ||
72 | + :port => self.port, | ||
73 | + :encryption => (self.tls ? :simple_tls : nil) | ||
74 | + } | ||
75 | + options.merge!(:auth => { :method => :simple, :username => ldap_user, :password => ldap_password }) unless ldap_user.blank? && ldap_password.blank? | ||
76 | + Net::LDAP.new options | ||
77 | + end | ||
78 | + | ||
79 | + def get_user_attributes_from_ldap_entry(entry) | ||
80 | + { | ||
81 | + :dn => entry.dn, | ||
82 | + :fullname => LdapAuthentication.get_attr(entry, self.attr_fullname), | ||
83 | + :mail => LdapAuthentication.get_attr(entry, self.attr_mail), | ||
84 | + } | ||
85 | + end | ||
86 | + | ||
87 | + # Return the attributes needed for the LDAP search. It will only | ||
88 | + # include the user attributes if on-the-fly registration is enabled | ||
89 | + def search_attributes | ||
90 | + if onthefly_register? | ||
91 | + ['dn', self.attr_fullname, self.attr_mail] | ||
92 | + else | ||
93 | + ['dn'] | ||
94 | + end | ||
95 | + end | ||
96 | + | ||
97 | + # Check if a DN (user record) authenticates with the password | ||
98 | + def authenticate_dn(dn, password) | ||
99 | + if dn.present? && password.present? | ||
100 | + initialize_ldap_con(dn, password).bind | ||
101 | + end | ||
102 | + end | ||
103 | + | ||
104 | + # Get the user's dn and any attributes for them, given their login | ||
105 | + def get_user_dn(login, password) | ||
106 | + ldap_con = nil | ||
107 | + if self.account && self.account.include?("$login") | ||
108 | + ldap_con = initialize_ldap_con(self.account.sub("$login", Net::LDAP::DN.escape(login)), password) | ||
109 | + else | ||
110 | + ldap_con = initialize_ldap_con(self.account, self.account_password) | ||
111 | + end | ||
112 | + login_filter = Net::LDAP::Filter.eq( self.attr_login, login ) | ||
113 | + object_filter = Net::LDAP::Filter.eq( "objectClass", "*" ) | ||
114 | + attrs = {} | ||
115 | + | ||
116 | + search_filter = object_filter & login_filter | ||
117 | + if f = ldap_filter | ||
118 | + search_filter = search_filter & f | ||
119 | + end | ||
120 | + | ||
121 | + ldap_con.search( :base => self.base_dn, :filter => search_filter, :attributes=> search_attributes) do |entry| | ||
122 | + if onthefly_register? | ||
123 | + attrs = get_user_attributes_from_ldap_entry(entry) | ||
124 | + else | ||
125 | + attrs = {:dn => entry.dn} | ||
126 | + end | ||
127 | + end | ||
128 | + | ||
129 | + attrs | ||
130 | + end | ||
131 | + | ||
132 | + def self.get_attr(entry, attr_name) | ||
133 | + if !attr_name.blank? | ||
134 | + entry[attr_name].is_a?(Array) ? entry[attr_name].first : entry[attr_name] | ||
135 | + end | ||
136 | + end | ||
137 | +end |
@@ -0,0 +1,80 @@ | @@ -0,0 +1,80 @@ | ||
1 | +require_dependency File.dirname(__FILE__) + '/ext/environment' | ||
2 | +require File.dirname(__FILE__) + '/ldap_authentication.rb' | ||
3 | + | ||
4 | + | ||
5 | +class LdapPlugin < Noosfero::Plugin | ||
6 | + | ||
7 | + def self.plugin_name | ||
8 | + "LdapPlugin" | ||
9 | + end | ||
10 | + | ||
11 | + def self.plugin_description | ||
12 | + _("A plugin that add ldap support.") | ||
13 | + end | ||
14 | + | ||
15 | + def allow_user_registration | ||
16 | + false | ||
17 | + end | ||
18 | + | ||
19 | + def allow_password_recovery | ||
20 | + false | ||
21 | + end | ||
22 | + | ||
23 | + def alternative_authentication | ||
24 | + login = context.params[:user][:login] | ||
25 | + password = context.params[:user][:password] | ||
26 | + ldap = LdapAuthentication.new(context.environment.ldap_plugin_attributes) | ||
27 | + | ||
28 | + user = User.find_or_initialize_by_login(login) | ||
29 | + | ||
30 | + if user.new_record? | ||
31 | + # user is not yet registered, try to authenticate | ||
32 | + begin | ||
33 | + attrs = ldap.authenticate(login, password) | ||
34 | + rescue Net::LDAP::LdapError => e | ||
35 | + puts "LDAP is not configured correctly" | ||
36 | + end | ||
37 | + | ||
38 | + if attrs | ||
39 | + user.login = login | ||
40 | + user.email = attrs[:mail] | ||
41 | + user.name = attrs[:fullname] | ||
42 | + user.password = password | ||
43 | + user.password_confirmation = password | ||
44 | + user.person_data = context.params[:profile_data] | ||
45 | + user.activated_at = Time.now.utc | ||
46 | + user.activation_code = nil | ||
47 | + | ||
48 | + ldap = LdapAuthentication.new(context.environment.ldap_plugin_attributes) | ||
49 | + begin | ||
50 | + user = nil unless user.save | ||
51 | + rescue | ||
52 | + #User not saved | ||
53 | + end | ||
54 | + end | ||
55 | + else | ||
56 | + | ||
57 | + return nil if !user.activated? | ||
58 | + | ||
59 | + begin | ||
60 | + # user si defined as nil if ldap authentication failed | ||
61 | + user = nil if ldap.authenticate(login, password).nil? | ||
62 | + rescue Net::LDAP::LdapError => e | ||
63 | + puts "LDAP is not configured correctly" | ||
64 | + end | ||
65 | + end | ||
66 | + | ||
67 | + user | ||
68 | + end | ||
69 | + | ||
70 | + def login_extra_contents | ||
71 | + lambda do | ||
72 | + @person = Person.new(:environment => @environment) | ||
73 | + @profile_data = @person | ||
74 | + labelled_fields_for :profile_data, @person do |f| | ||
75 | + render :partial => 'profile_editor/person_form', :locals => {:f => f} | ||
76 | + end | ||
77 | + end | ||
78 | + end | ||
79 | + | ||
80 | +end |
plugins/ldap/test/functional/account_controller_plugin_test.rb
0 → 100644
@@ -0,0 +1,81 @@ | @@ -0,0 +1,81 @@ | ||
1 | +require File.dirname(__FILE__) + '/../test_helper' | ||
2 | + | ||
3 | +# Re-raise errors caught by the controller. | ||
4 | +class AccountController; def rescue_action(e) raise e end; end | ||
5 | + | ||
6 | +class AccountControllerPluginTest < ActionController::TestCase | ||
7 | + | ||
8 | + def setup | ||
9 | + @controller = AccountController.new | ||
10 | + @request = ActionController::TestRequest.new | ||
11 | + @response = ActionController::TestResponse.new | ||
12 | + | ||
13 | + @environment = Environment.default | ||
14 | + @environment.enabled_plugins = ['LdapPlugin'] | ||
15 | + @ldap_config = load_ldap_config | ||
16 | + @environment.ldap_plugin= @ldap_config['server'] unless @ldap_config.nil? | ||
17 | + @environment.save! | ||
18 | + end | ||
19 | + | ||
20 | + should 'not authenticate user if its not a local user or a ldap user' do | ||
21 | + post :login, :user => {:login => 'someuser', :password => 'somepass'} | ||
22 | + assert_nil session[:user] | ||
23 | + end | ||
24 | + | ||
25 | + should 'authenticate user if its a local user but is not a ldap user' do | ||
26 | + user = create_user('testuser', :email => 'testuser@example.com', :password => 'test', :password_confirmation => 'test') | ||
27 | + user.activate | ||
28 | + post :login, :user => {:login => 'testuser', :password => 'test'} | ||
29 | + assert session[:user] | ||
30 | + end | ||
31 | + | ||
32 | + should 'display required fields on user login' do | ||
33 | + @environment.custom_person_fields = {"contact_phone"=>{"required"=>"true", "signup"=>"false", "active"=>"true"}} | ||
34 | + @environment.save | ||
35 | + get :login | ||
36 | + assert_tag(:input, :attributes => {:id => 'profile_data_contact_phone'}) | ||
37 | + end | ||
38 | + | ||
39 | + if ldap_configured? | ||
40 | + | ||
41 | + should 'authenticate an existing noosfero user with ldap and loggin' do | ||
42 | + user = create_user(@ldap_config['user']['login'], :email => 'testuser@example.com', :password => 'test', :password_confirmation => 'test') | ||
43 | + user.activate | ||
44 | + count = User.count | ||
45 | + post :login, :user => @ldap_config['user'] | ||
46 | + assert session[:user] | ||
47 | + assert_equal count, User.count | ||
48 | + end | ||
49 | + | ||
50 | + should 'login and create a new noosfero user if ldap authentication works properly' do | ||
51 | + count = User.count | ||
52 | + post :login, :user => @ldap_config['user'] | ||
53 | + assert session[:user] | ||
54 | + assert_equal count + 1, User.count | ||
55 | + end | ||
56 | + | ||
57 | + should 'login on ldap if required fields are defined' do | ||
58 | + count = User.count | ||
59 | + @environment.custom_person_fields = {"contact_phone"=>{"required"=>"true", "signup"=>"false", "active"=>"true"}} | ||
60 | + @environment.save | ||
61 | + post :login, :user => @ldap_config['user'], :profile_data => {:contact_phone => '11111111'} | ||
62 | + assert session[:user] | ||
63 | + end | ||
64 | + | ||
65 | + should 'not login on ldap if required fields are not defined' do | ||
66 | + @environment.custom_person_fields = {"contact_phone"=>{"required"=>"true", "signup"=>"false", "active"=>"true"}} | ||
67 | + @environment.save | ||
68 | + post :login, :user => @ldap_config['user'] | ||
69 | + assert_nil session[:user] | ||
70 | + end | ||
71 | + | ||
72 | + should 'authenticate user if its not a local user but is a ldap user' do | ||
73 | + post :login, :user => @ldap_config['user'] | ||
74 | + assert session[:user] | ||
75 | + end | ||
76 | + | ||
77 | + else | ||
78 | + puts LDAP_SERVER_ERROR_MESSAGE | ||
79 | + end | ||
80 | + | ||
81 | +end |
plugins/ldap/test/functional/ldap_plugin_admin_controller_test.rb
0 → 100644
@@ -0,0 +1,204 @@ | @@ -0,0 +1,204 @@ | ||
1 | +require File.dirname(__FILE__) + '/../../../../test/test_helper' | ||
2 | +require File.dirname(__FILE__) + '/../../controllers/ldap_plugin_admin_controller' | ||
3 | + | ||
4 | +# Re-raise errors caught by the controller. | ||
5 | +class LdapPluginAdminController; def rescue_action(e) raise e end; end | ||
6 | + | ||
7 | +class LdapPluginAdminControllerTest < ActionController::TestCase | ||
8 | + | ||
9 | + def setup | ||
10 | + @controller = LdapPluginAdminController.new | ||
11 | + @request = ActionController::TestRequest.new | ||
12 | + @response = ActionController::TestResponse.new | ||
13 | + | ||
14 | + @environment = Environment.default | ||
15 | + user_login = create_admin_user(@environment) | ||
16 | + login_as(user_login) | ||
17 | + @admin = User[user_login].person | ||
18 | + @environment.enabled_plugins = ['LdapPlugin'] | ||
19 | + @environment.ldap_plugin_host="http://somehost" | ||
20 | + @environment.save! | ||
21 | + end | ||
22 | + | ||
23 | + attr_accessor :admin | ||
24 | + | ||
25 | + should 'access index action' do | ||
26 | + get :index | ||
27 | + assert_template 'index' | ||
28 | + assert_response :success | ||
29 | + end | ||
30 | + | ||
31 | + should 'update ldap successfully display a message successfully' do | ||
32 | + @environment.ldap_plugin_host = nil | ||
33 | + @environment.save | ||
34 | + assert_nil @environment.ldap_plugin_host | ||
35 | + post :update, :environment => { :ldap_plugin_host => 'http://something' } | ||
36 | + assert_equal 'Ldap configuration updated successfully.', @response.session[:notice] | ||
37 | + end | ||
38 | + | ||
39 | + should 'wrong ldap update display a message unsuccessfully' do | ||
40 | + @environment.ldap_plugin_host = nil | ||
41 | + @environment.save | ||
42 | + assert_nil @environment.ldap_plugin_host | ||
43 | + post :update, :environment => { :ldap_plugin_host => '' } | ||
44 | + assert_equal 'Ldap configuration could not be saved.', @response.session[:notice] | ||
45 | + end | ||
46 | + | ||
47 | + should 'update ldap successfully render index template' do | ||
48 | + post :update, :environment => { :ldap_plugin_host => 'http://something' } | ||
49 | + | ||
50 | + assert_template 'index' | ||
51 | + end | ||
52 | + | ||
53 | + should 'update ldap unsuccessfully render index template' do | ||
54 | + post :update, :environment => { :ldap_plugin_port => '3434' } | ||
55 | + | ||
56 | + assert_template 'index' | ||
57 | + end | ||
58 | + | ||
59 | + should 'update ldap host' do | ||
60 | + @environment.ldap_plugin_host = nil | ||
61 | + @environment.save | ||
62 | + assert_nil @environment.ldap_plugin_host | ||
63 | + post :update, :environment => { :ldap_plugin_host => 'http://something' } | ||
64 | + | ||
65 | + @environment.reload | ||
66 | + assert_not_nil @environment.ldap_plugin_host | ||
67 | + end | ||
68 | + | ||
69 | + should 'update ldap port' do | ||
70 | + post :update, :environment => { :ldap_plugin_port => '245' } | ||
71 | + | ||
72 | + @environment.reload | ||
73 | + assert_not_nil @environment.ldap_plugin_port | ||
74 | + end | ||
75 | + | ||
76 | + should 'update ldap account' do | ||
77 | + assert_nil @environment.ldap_plugin_account | ||
78 | + post :update, :environment => { :ldap_plugin_account => 'uid=sector,ou=Service,ou=corp,dc=company,dc=com,dc=br' } | ||
79 | + | ||
80 | + @environment.reload | ||
81 | + assert_not_nil @environment.ldap_plugin_account | ||
82 | + end | ||
83 | + | ||
84 | + should 'update ldap acccount_password' do | ||
85 | + assert_nil @environment.ldap_plugin_account_password | ||
86 | + post :update, :environment => { :ldap_plugin_account_password => 'password' } | ||
87 | + | ||
88 | + @environment.reload | ||
89 | + assert_not_nil @environment.ldap_plugin_account_password | ||
90 | + end | ||
91 | + | ||
92 | + should 'update ldap base_dn' do | ||
93 | + assert_nil @environment.ldap_plugin_base_dn | ||
94 | + post :update, :environment => { :ldap_plugin_base_dn => 'dc=company,dc=com,dc=br' } | ||
95 | + | ||
96 | + @environment.reload | ||
97 | + assert_not_nil @environment.ldap_plugin_base_dn | ||
98 | + end | ||
99 | + | ||
100 | + should 'update ldap attr_login' do | ||
101 | + assert_nil @environment.ldap_plugin_attr_login | ||
102 | + post :update, :environment => { :ldap_plugin_attr_login => 'uid' } | ||
103 | + | ||
104 | + @environment.reload | ||
105 | + assert_not_nil @environment.ldap_plugin_attr_login | ||
106 | + end | ||
107 | + | ||
108 | + should 'update ldap attr_mail' do | ||
109 | + assert_nil @environment.ldap_plugin_attr_mail | ||
110 | + post :update, :environment => { :ldap_plugin_attr_mail => 'test@noosfero.com' } | ||
111 | + | ||
112 | + @environment.reload | ||
113 | + assert_not_nil @environment.ldap_plugin_attr_mail | ||
114 | + end | ||
115 | + | ||
116 | + should 'update ldap onthefly_register' do | ||
117 | + post :update, :environment => { :ldap_plugin_onthefly_register => '1' } | ||
118 | + | ||
119 | + @environment.reload | ||
120 | + assert_not_nil @environment.ldap_plugin_onthefly_register | ||
121 | + end | ||
122 | + | ||
123 | + should 'update ldap filter' do | ||
124 | + assert_nil @environment.ldap_plugin_filter | ||
125 | + post :update, :environment => { :ldap_plugin_filter => 'test' } | ||
126 | + | ||
127 | + @environment.reload | ||
128 | + assert_not_nil @environment.ldap_plugin_filter | ||
129 | + end | ||
130 | + | ||
131 | + should 'update ldap tls' do | ||
132 | + post :update, :environment => { :ldap_plugin_tls => '1' } | ||
133 | + | ||
134 | + @environment.reload | ||
135 | + assert_not_nil @environment.ldap_plugin_tls | ||
136 | + end | ||
137 | + | ||
138 | + should 'have a field to manage the host' do | ||
139 | + get :index | ||
140 | + | ||
141 | + assert_tag :tag => 'input', :attributes => {:id => 'environment_ldap_plugin_host'} | ||
142 | + end | ||
143 | + | ||
144 | + should 'have a field to manage the port' do | ||
145 | + get :index | ||
146 | + | ||
147 | + assert_tag :tag => 'input', :attributes => {:id => 'environment_ldap_plugin_port'} | ||
148 | + end | ||
149 | + | ||
150 | + should 'have a field to manage the account' do | ||
151 | + get :index | ||
152 | + | ||
153 | + assert_tag :tag => 'input', :attributes => {:id => 'environment_ldap_plugin_account'} | ||
154 | + end | ||
155 | + | ||
156 | + should 'have a field to manage the account_password' do | ||
157 | + get :index | ||
158 | + | ||
159 | + assert_tag :tag => 'input', :attributes => {:id => 'environment_ldap_plugin_account_password'} | ||
160 | + end | ||
161 | + | ||
162 | + should 'have a field to manage the base_dn' do | ||
163 | + get :index | ||
164 | + | ||
165 | + assert_tag :tag => 'input', :attributes => {:id => 'environment_ldap_plugin_base_dn'} | ||
166 | + end | ||
167 | + | ||
168 | + should 'have a field to manage the attr_login' do | ||
169 | + get :index | ||
170 | + | ||
171 | + assert_tag :tag => 'input', :attributes => {:id => 'environment_ldap_plugin_attr_login'} | ||
172 | + end | ||
173 | + | ||
174 | + should 'have a field to manage the attr_fullname' do | ||
175 | + get :index | ||
176 | + | ||
177 | + assert_tag :tag => 'input', :attributes => {:id => 'environment_ldap_plugin_attr_fullname'} | ||
178 | + end | ||
179 | + | ||
180 | + should 'have a field to manage the attr_mail' do | ||
181 | + get :index | ||
182 | + | ||
183 | + assert_tag :tag => 'input', :attributes => {:id => 'environment_ldap_plugin_attr_mail'} | ||
184 | + end | ||
185 | + | ||
186 | + should 'have a field to manage the onthefly_register' do | ||
187 | + get :index | ||
188 | + | ||
189 | + assert_tag :tag => 'input', :attributes => {:id => 'environment_ldap_plugin_onthefly_register'} | ||
190 | + end | ||
191 | + | ||
192 | + should 'have a field to manage the filter' do | ||
193 | + get :index | ||
194 | + | ||
195 | + assert_tag :tag => 'input', :attributes => {:id => 'environment_ldap_plugin_filter'} | ||
196 | + end | ||
197 | + | ||
198 | + should 'have a field to manage the tls' do | ||
199 | + get :index | ||
200 | + | ||
201 | + assert_tag :tag => 'input', :attributes => {:id => 'environment_ldap_plugin_tls'} | ||
202 | + end | ||
203 | + | ||
204 | +end |
@@ -0,0 +1,23 @@ | @@ -0,0 +1,23 @@ | ||
1 | +require File.dirname(__FILE__) + '/../../../test/test_helper' | ||
2 | + | ||
3 | +def load_ldap_config | ||
4 | + begin | ||
5 | + YAML.load_file(File.dirname(__FILE__) + '/../fixtures/ldap.yml') | ||
6 | + rescue Errno::ENOENT => e | ||
7 | + # There is no config file | ||
8 | + return nil | ||
9 | + end | ||
10 | +end | ||
11 | + | ||
12 | +def ldap_configured? | ||
13 | + ldap_config = load_ldap_config | ||
14 | + begin | ||
15 | + test_ldap = Net::LDAP.new(:host => ldap_config['server']['host'], :port => ldap_config['server']['port']) | ||
16 | + return test_ldap.bind | ||
17 | + rescue Exception => e | ||
18 | + #LDAP is not listening | ||
19 | + return nil | ||
20 | + end | ||
21 | +end | ||
22 | + | ||
23 | +LDAP_SERVER_ERROR_MESSAGE = "\n\nWARNING: LDAP test server is not configured properly. Please see the file fixtures/ldap.yml on ldap plugin\n\n" |
@@ -0,0 +1,186 @@ | @@ -0,0 +1,186 @@ | ||
1 | +require File.dirname(__FILE__) + '/../../../../../test/test_helper' | ||
2 | + | ||
3 | +class EnvironmentTest < ActiveSupport::TestCase | ||
4 | + | ||
5 | + def setup | ||
6 | + @enviroment = Environment.default | ||
7 | + end | ||
8 | + | ||
9 | + should 'have ldap_plugin variable defined' do | ||
10 | + assert_equal Hash, @enviroment.ldap_plugin.class | ||
11 | + end | ||
12 | + | ||
13 | + should 'return an empty hash by default on ldap_plugin_attributes method' do | ||
14 | + assert_equal Hash.new, @enviroment.ldap_plugin_attributes | ||
15 | + end | ||
16 | + | ||
17 | + should 'ldap_plugin_host= define the ldap host' do | ||
18 | + host = "http://something" | ||
19 | + @enviroment.ldap_plugin_host= host | ||
20 | + assert_equal host, @enviroment.ldap_plugin['host'] | ||
21 | + end | ||
22 | + | ||
23 | + should 'ldap_plugin_host return the defined ldap host' do | ||
24 | + host = "http://something" | ||
25 | + @enviroment.ldap_plugin_host= host | ||
26 | + assert_equal host, @enviroment.ldap_plugin_host | ||
27 | + end | ||
28 | + | ||
29 | + should 'ldap_plugin_port= define the ldap port' do | ||
30 | + value = 255 | ||
31 | + @enviroment.ldap_plugin_port= value | ||
32 | + assert_equal value, @enviroment.ldap_plugin['port'] | ||
33 | + end | ||
34 | + | ||
35 | + should 'ldap_plugin_port return the defined ldap port' do | ||
36 | + value = 255 | ||
37 | + @enviroment.ldap_plugin_port= value | ||
38 | + assert_equal value, @enviroment.ldap_plugin_port | ||
39 | + end | ||
40 | + | ||
41 | + should 'default ldap_plugin_port be 389' do | ||
42 | + assert_equal 389, @enviroment.ldap_plugin_port | ||
43 | + end | ||
44 | + | ||
45 | + should 'ldap_plugin_account= define the ldap acccount' do | ||
46 | + value = 'uid=sector,ou=Service,ou=corp,dc=company,dc=com,dc=br' | ||
47 | + @enviroment.ldap_plugin_account= value | ||
48 | + assert_equal value, @enviroment.ldap_plugin['account'] | ||
49 | + end | ||
50 | + | ||
51 | + should 'ldap_plugin_account return the defined ldap account' do | ||
52 | + value = 'uid=sector,ou=Service,ou=corp,dc=company,dc=com,dc=br' | ||
53 | + @enviroment.ldap_plugin_account= value | ||
54 | + assert_equal value, @enviroment.ldap_plugin_account | ||
55 | + end | ||
56 | + | ||
57 | + should 'ldap_plugin_account_password= define the ldap acccount_password' do | ||
58 | + value = 'password' | ||
59 | + @enviroment.ldap_plugin_account_password= value | ||
60 | + assert_equal value, @enviroment.ldap_plugin['account_password'] | ||
61 | + end | ||
62 | + | ||
63 | + should 'ldap_plugin_account_password return the defined ldap account password' do | ||
64 | + value = 'password' | ||
65 | + @enviroment.ldap_plugin_account_password= value | ||
66 | + assert_equal value, @enviroment.ldap_plugin_account_password | ||
67 | + end | ||
68 | + | ||
69 | + should 'ldap_plugin_base_dn= define the ldap base_dn' do | ||
70 | + value = 'dc=company,dc=com,dc=br' | ||
71 | + @enviroment.ldap_plugin_base_dn= value | ||
72 | + assert_equal value, @enviroment.ldap_plugin['base_dn'] | ||
73 | + end | ||
74 | + | ||
75 | + should 'ldap_plugin_base_dn return the defined ldap base_dn' do | ||
76 | + value = 'dc=company,dc=com,dc=br' | ||
77 | + @enviroment.ldap_plugin_base_dn= value | ||
78 | + assert_equal value, @enviroment.ldap_plugin_base_dn | ||
79 | + end | ||
80 | + | ||
81 | + should 'ldap_plugin_attr_login= define the ldap attr_login' do | ||
82 | + value = 'uid' | ||
83 | + @enviroment.ldap_plugin_attr_login= value | ||
84 | + assert_equal value, @enviroment.ldap_plugin['attr_login'] | ||
85 | + end | ||
86 | + | ||
87 | + should 'ldap_plugin_attr_login return the defined ldap attr_login' do | ||
88 | + value = 'uid' | ||
89 | + @enviroment.ldap_plugin_attr_login= value | ||
90 | + assert_equal value, @enviroment.ldap_plugin_attr_login | ||
91 | + end | ||
92 | + | ||
93 | + should 'ldap_plugin_attr_fullname= define the ldap attr_fullname' do | ||
94 | + value = 'Noosfero System' | ||
95 | + @enviroment.ldap_plugin_attr_fullname= value | ||
96 | + assert_equal value, @enviroment.ldap_plugin['attr_fullname'] | ||
97 | + end | ||
98 | + | ||
99 | + should 'ldap_plugin_attr_fullname return the defined ldap attr_fullname' do | ||
100 | + value = 'uid' | ||
101 | + @enviroment.ldap_plugin_attr_fullname= value | ||
102 | + assert_equal value, @enviroment.ldap_plugin_attr_fullname | ||
103 | + end | ||
104 | + | ||
105 | + | ||
106 | + should 'ldap_plugin_attr_mail= define the ldap attr_mail' do | ||
107 | + value = 'test@noosfero.com' | ||
108 | + @enviroment.ldap_plugin_attr_mail= value | ||
109 | + assert_equal value, @enviroment.ldap_plugin['attr_mail'] | ||
110 | + end | ||
111 | + | ||
112 | + should 'ldap_plugin_attr_mail return the defined ldap attr_mail' do | ||
113 | + value = 'test@noosfero.com' | ||
114 | + @enviroment.ldap_plugin_attr_mail= value | ||
115 | + assert_equal value, @enviroment.ldap_plugin_attr_mail | ||
116 | + end | ||
117 | + | ||
118 | + should 'ldap_plugin_onthefly_register= define the ldap onthefly_register' do | ||
119 | + value = '1' | ||
120 | + @enviroment.ldap_plugin_onthefly_register= value | ||
121 | + assert @enviroment.ldap_plugin['onthefly_register'] | ||
122 | + end | ||
123 | + | ||
124 | + should 'ldap_plugin_onthefly_register return true if ldap onthefly_register variable is defined as true' do | ||
125 | + value = '1' | ||
126 | + @enviroment.ldap_plugin_onthefly_register= value | ||
127 | + assert @enviroment.ldap_plugin_onthefly_register | ||
128 | + end | ||
129 | + | ||
130 | + should 'ldap_plugin_onthefly_register return false if ldap onthefly_register variable is defined as false' do | ||
131 | + value = '0' | ||
132 | + @enviroment.ldap_plugin_onthefly_register= value | ||
133 | + assert !@enviroment.ldap_plugin_onthefly_register | ||
134 | + end | ||
135 | + | ||
136 | + should 'ldap_plugin_filter= define the ldap filter' do | ||
137 | + value = 'test' | ||
138 | + @enviroment.ldap_plugin_filter= value | ||
139 | + assert_equal value, @enviroment.ldap_plugin['filter'] | ||
140 | + end | ||
141 | + | ||
142 | + should 'ldap_plugin_filter return the defined ldap filter' do | ||
143 | + value = 'test' | ||
144 | + @enviroment.ldap_plugin_filter= value | ||
145 | + assert_equal value, @enviroment.ldap_plugin_filter | ||
146 | + end | ||
147 | + | ||
148 | + should 'ldap_plugin_tls= define the ldap tls' do | ||
149 | + value = '1' | ||
150 | + @enviroment.ldap_plugin_tls= value | ||
151 | + assert @enviroment.ldap_plugin['tls'] | ||
152 | + end | ||
153 | + | ||
154 | + should 'tls return true if ldap tls variable is defined as true' do | ||
155 | + value = '1' | ||
156 | + @enviroment.ldap_plugin_tls= value | ||
157 | + assert @enviroment.ldap_plugin_tls | ||
158 | + end | ||
159 | + | ||
160 | + should 'tls return false if ldap tls variable is defined as false' do | ||
161 | + value = '0' | ||
162 | + @enviroment.ldap_plugin_tls= value | ||
163 | + assert !@enviroment.ldap_plugin_tls | ||
164 | + end | ||
165 | + | ||
166 | + should 'validates presence of host' do | ||
167 | + @enviroment.ldap_plugin= {:port => 3000} | ||
168 | + @enviroment.valid? | ||
169 | + | ||
170 | + assert @enviroment.errors.invalid?(:ldap_plugin_host) | ||
171 | + | ||
172 | + @enviroment.ldap_plugin_host= "http://somehost.com" | ||
173 | + @enviroment.valid? | ||
174 | + assert !@enviroment.errors.invalid?(:ldap_plugin_host) | ||
175 | + end | ||
176 | + | ||
177 | + should 'validates presence of host only if some ldap configuration is defined' do | ||
178 | + @enviroment.valid? | ||
179 | + assert !@enviroment.errors.invalid?(:ldap_plugin_host) | ||
180 | + | ||
181 | + @enviroment.ldap_plugin= {:port => 3000} | ||
182 | + @enviroment.valid? | ||
183 | + assert @enviroment.errors.invalid?(:ldap_plugin_host) | ||
184 | + end | ||
185 | + | ||
186 | +end |
@@ -0,0 +1,180 @@ | @@ -0,0 +1,180 @@ | ||
1 | +require File.dirname(__FILE__) + '/../test_helper' | ||
2 | + | ||
3 | +class LdapAuthenticationTest < ActiveSupport::TestCase | ||
4 | + | ||
5 | + def setup | ||
6 | + @ldap_config = load_ldap_config | ||
7 | + end | ||
8 | + | ||
9 | + should "host be nil as default" do | ||
10 | + ldap = LdapAuthentication.new | ||
11 | + assert_nil ldap.host | ||
12 | + end | ||
13 | + | ||
14 | + should "create with host passed as parameter" do | ||
15 | + value = 'http://myhost.com' | ||
16 | + ldap = LdapAuthentication.new('host' => value) | ||
17 | + assert_equal value, ldap.host | ||
18 | + end | ||
19 | + | ||
20 | + should "port be 389 as default" do | ||
21 | + ldap = LdapAuthentication.new | ||
22 | + assert_equal 389, ldap.port | ||
23 | + end | ||
24 | + | ||
25 | + should "create with port passed as parameter" do | ||
26 | + value = 555 | ||
27 | + ldap = LdapAuthentication.new('port' => value) | ||
28 | + assert_equal value, ldap.port | ||
29 | + end | ||
30 | + | ||
31 | + should "account be nil as default" do | ||
32 | + ldap = LdapAuthentication.new | ||
33 | + assert_nil ldap.account | ||
34 | + end | ||
35 | + | ||
36 | + should "create with account passed as parameter" do | ||
37 | + value = 'uid=sector,ou=Service,ou=corp,dc=company,dc=com,dc=br' | ||
38 | + ldap = LdapAuthentication.new('account' => value) | ||
39 | + assert_equal value, ldap.account | ||
40 | + end | ||
41 | + | ||
42 | + should "account_password be nil as default" do | ||
43 | + ldap = LdapAuthentication.new | ||
44 | + assert_nil ldap.account_password | ||
45 | + end | ||
46 | + | ||
47 | + should "create with account_password passed as parameter" do | ||
48 | + value = 'password' | ||
49 | + ldap = LdapAuthentication.new('account_password' => value) | ||
50 | + assert_equal value, ldap.account_password | ||
51 | + end | ||
52 | + | ||
53 | + should "base_dn be nil as default" do | ||
54 | + ldap = LdapAuthentication.new | ||
55 | + assert_nil ldap.base_dn | ||
56 | + end | ||
57 | + | ||
58 | + should "create with base_dn passed as parameter" do | ||
59 | + value = 'dc=company,dc=com,dc=br' | ||
60 | + ldap = LdapAuthentication.new('base_dn' => value) | ||
61 | + assert_equal value, ldap.base_dn | ||
62 | + end | ||
63 | + | ||
64 | + should "attr_login be nil as default" do | ||
65 | + ldap = LdapAuthentication.new | ||
66 | + assert_nil ldap.attr_login | ||
67 | + end | ||
68 | + | ||
69 | + should "create with attr_login passed as parameter" do | ||
70 | + value = 'uid' | ||
71 | + ldap = LdapAuthentication.new('attr_login' => value) | ||
72 | + assert_equal value, ldap.attr_login | ||
73 | + end | ||
74 | + | ||
75 | + should "attr_fullname be nil as default" do | ||
76 | + ldap = LdapAuthentication.new | ||
77 | + assert_nil ldap.attr_fullname | ||
78 | + end | ||
79 | + | ||
80 | + should "create with attr_fullname passed as parameter" do | ||
81 | + value = 'Noosfero System' | ||
82 | + ldap = LdapAuthentication.new('attr_fullname' => value) | ||
83 | + assert_equal value, ldap.attr_fullname | ||
84 | + end | ||
85 | + | ||
86 | + should "attr_mail be nil as default" do | ||
87 | + ldap = LdapAuthentication.new | ||
88 | + assert_nil ldap.attr_mail | ||
89 | + end | ||
90 | + | ||
91 | + should "create with attr_mail passed as parameter" do | ||
92 | + value = 'test@noosfero.com' | ||
93 | + ldap = LdapAuthentication.new('attr_mail' => value) | ||
94 | + assert_equal value, ldap.attr_mail | ||
95 | + end | ||
96 | + | ||
97 | + should "onthefly_register be false as default" do | ||
98 | + ldap = LdapAuthentication.new | ||
99 | + assert !ldap.onthefly_register | ||
100 | + end | ||
101 | + | ||
102 | + should "create with onthefly_register passed as parameter" do | ||
103 | + value = true | ||
104 | + ldap = LdapAuthentication.new('onthefly_register' => value) | ||
105 | + assert_equal value, ldap.onthefly_register | ||
106 | + end | ||
107 | + | ||
108 | + should "filter be nil as default" do | ||
109 | + ldap = LdapAuthentication.new | ||
110 | + assert_nil ldap.filter | ||
111 | + end | ||
112 | + | ||
113 | + should "create with filter passed as parameter" do | ||
114 | + value = 'test' | ||
115 | + ldap = LdapAuthentication.new('filter' => value) | ||
116 | + assert_equal value, ldap.filter | ||
117 | + end | ||
118 | + | ||
119 | + should "tls be false as default" do | ||
120 | + ldap = LdapAuthentication.new | ||
121 | + assert !ldap.tls | ||
122 | + end | ||
123 | + | ||
124 | + should "create with tls passed as parameter" do | ||
125 | + value = true | ||
126 | + ldap = LdapAuthentication.new('tls' => value) | ||
127 | + assert_equal value, ldap.tls | ||
128 | + end | ||
129 | + | ||
130 | + should "onthefly_register? return true if onthefly_register is true" do | ||
131 | + ldap = LdapAuthentication.new('onthefly_register' => true) | ||
132 | + assert ldap.onthefly_register? | ||
133 | + end | ||
134 | + | ||
135 | + should "onthefly_register? return false if onthefly_register is false" do | ||
136 | + ldap = LdapAuthentication.new('onthefly_register' => false) | ||
137 | + assert !ldap.onthefly_register? | ||
138 | + end | ||
139 | + | ||
140 | + if ldap_configured? | ||
141 | + should 'return the user attributes' do | ||
142 | + auth = LdapAuthentication.new(@ldap_config['server']) | ||
143 | + attributes = auth.authenticate(@ldap_config['user']['login'],@ldap_config['user']['password']) | ||
144 | + assert attributes.is_a?(Hash), "An hash was not returned" | ||
145 | + assert_not_nil attributes[:fullname] | ||
146 | + assert_not_nil attributes[:mail] | ||
147 | + end | ||
148 | + | ||
149 | + should 'return nil with a invalid ldap user' do | ||
150 | + auth = LdapAuthentication.new(@ldap_config['server']) | ||
151 | + assert_equal nil, auth.authenticate('nouser','123456') | ||
152 | + end | ||
153 | + | ||
154 | + should 'return nil without a login' do | ||
155 | + auth = LdapAuthentication.new(@ldap_config['server']) | ||
156 | + assert_equal nil, auth.authenticate('', @ldap_config['user']['password']) | ||
157 | + end | ||
158 | + | ||
159 | + should 'return nil without a password' do | ||
160 | + auth = LdapAuthentication.new(@ldap_config['server']) | ||
161 | + assert_equal nil, auth.authenticate(@ldap_config['user']['login'],'') | ||
162 | + end | ||
163 | + | ||
164 | + should 'return any user without filter' do | ||
165 | + auth = LdapAuthentication.new(@ldap_config['server']) | ||
166 | + assert auth.authenticate(@ldap_config['user']['login'], @ldap_config['user']['password']) | ||
167 | + end | ||
168 | + | ||
169 | + should 'not return a valid ldap user if a filter is defined' do | ||
170 | + auth = LdapAuthentication.new(@ldap_config['server']) | ||
171 | + auth.filter = '(mail=*@test.org)' | ||
172 | + assert_nil auth.authenticate(@ldap_config['user']['login'], @ldap_config['user']['password']) | ||
173 | + end | ||
174 | + | ||
175 | + else | ||
176 | + puts LDAP_SERVER_ERROR_MESSAGE | ||
177 | + end | ||
178 | + | ||
179 | + | ||
180 | +end |
@@ -0,0 +1,15 @@ | @@ -0,0 +1,15 @@ | ||
1 | +require File.dirname(__FILE__) + '/../../../../test/test_helper' | ||
2 | + | ||
3 | +class LdapPluginTest < ActiveSupport::TestCase | ||
4 | + | ||
5 | + should "not allow user registration" do | ||
6 | + plugin = LdapPlugin.new | ||
7 | + assert !plugin.allow_user_registration | ||
8 | + end | ||
9 | + | ||
10 | + should "not allow password recovery" do | ||
11 | + plugin = LdapPlugin.new | ||
12 | + assert !plugin.allow_password_recovery | ||
13 | + end | ||
14 | + | ||
15 | +end |
@@ -0,0 +1,69 @@ | @@ -0,0 +1,69 @@ | ||
1 | +<h1><%= _("Ldap Management") %> </h1> | ||
2 | + | ||
3 | +<% labelled_form_for(:environment, @environment, :url => {:action => 'update'}) do |f| %> | ||
4 | + | ||
5 | +<table> | ||
6 | + <tr> | ||
7 | + <th><%= _('Configuration') %></th> | ||
8 | + <th><%= _('Value') %></th> | ||
9 | + </tr> | ||
10 | + <tr> | ||
11 | + <td><%= _('Host') %></td> | ||
12 | + <td><%= text_field :environment, :ldap_plugin_host %></td> | ||
13 | + </tr> | ||
14 | + <tr> | ||
15 | + <td><%= _('Port') %></td> | ||
16 | + <td><%= text_field :environment, :ldap_plugin_port %></td> | ||
17 | + </tr> | ||
18 | + <tr> | ||
19 | + <td><%= _('Account') %></td> | ||
20 | + <td><%= text_field :environment, :ldap_plugin_account %></td> | ||
21 | + </tr> | ||
22 | + <tr> | ||
23 | + <td><%= _('Account Password') %></td> | ||
24 | + <td><%= password_field :environment, :ldap_plugin_account_password %></td> | ||
25 | + </tr> | ||
26 | + <tr> | ||
27 | + <td><%= _('Base DN') %></td> | ||
28 | + <td><%= text_field :environment, :ldap_plugin_base_dn %></td> | ||
29 | + </tr> | ||
30 | + <tr> | ||
31 | + <td><%= _('LDAP Filter') %></td> | ||
32 | + <td><%= text_field :environment, :ldap_plugin_filter %></td> | ||
33 | + </tr> | ||
34 | + <tr> | ||
35 | + <td><%= _('On the fly creation') %></td> | ||
36 | + <td><%= check_box :environment, :ldap_plugin_onthefly_register, {}, '1', '0' %></td> | ||
37 | + </tr> | ||
38 | + <tr> | ||
39 | + <td><%= _('LDAPS') %></td> | ||
40 | + <td><%= check_box :environment, :ldap_plugin_tls, {}, '1', '0' %></td> | ||
41 | + </tr> | ||
42 | +</table> | ||
43 | + | ||
44 | +<table> | ||
45 | + <tr> | ||
46 | + <th colspan='2'> <%= _('Attributes') %> </th> | ||
47 | + </tr> | ||
48 | + <tr> | ||
49 | + <td><%= _('Login') %></td> | ||
50 | + <td><%= text_field :environment, :ldap_plugin_attr_login %></td> | ||
51 | + </tr> | ||
52 | + <tr> | ||
53 | + <td><%= _('Fullname') %></td> | ||
54 | + <td><%= text_field :environment, :ldap_plugin_attr_fullname %></td> | ||
55 | + </tr> | ||
56 | + <tr> | ||
57 | + <td><%= _('Mail') %></td> | ||
58 | + <td><%= text_field :environment, :ldap_plugin_attr_mail %></td> | ||
59 | + </tr> | ||
60 | +</table> | ||
61 | + | ||
62 | +<div> | ||
63 | + <% button_bar do %> | ||
64 | + <%= submit_button('save', _('Save changes')) %> | ||
65 | + <%= button :back, _('Back to plugins administration panel'), :controller => 'plugins' %> | ||
66 | + <% end %> | ||
67 | +</div> | ||
68 | + | ||
69 | +<% end %> |