summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--app/controllers/auth_sources_controller.rb25
-rw-r--r--app/controllers/ldap_auth_sources_controller.rb26
-rw-r--r--app/helpers/auth_sources_helper.rb3
-rw-r--r--app/models/auth_source.rb1
-rw-r--r--app/views/auth_sources/_form_auth_source_ldap.html.erb (renamed from app/views/ldap_auth_sources/_form.html.erb)0
-rw-r--r--app/views/auth_sources/edit.html.erb3
-rw-r--r--app/views/auth_sources/new.html.erb3
-rw-r--r--config/routes.rb15
-rw-r--r--lib/redmine.rb2
-rw-r--r--test/functional/auth_sources_controller_test.rb89
-rw-r--r--test/functional/ldap_auth_sources_controller_test.rb114
-rw-r--r--test/integration/routing/ldap_auth_sources_test.rb55
12 files changed, 80 insertions, 256 deletions
diff --git a/app/controllers/auth_sources_controller.rb b/app/controllers/auth_sources_controller.rb
index b1150bf71..7a382eb43 100644
--- a/app/controllers/auth_sources_controller.rb
+++ b/app/controllers/auth_sources_controller.rb
@@ -17,32 +17,31 @@
class AuthSourcesController < ApplicationController
layout 'admin'
+ menu_item :ldap_authentication
before_filter :require_admin
def index
- @auth_source_pages, @auth_sources = paginate auth_source_class.name.tableize, :per_page => 10
- render "auth_sources/index"
+ @auth_source_pages, @auth_sources = paginate AuthSource, :per_page => 10
end
def new
- @auth_source = auth_source_class.new
- render 'auth_sources/new'
+ klass_name = params[:type] || 'AuthSourceLdap'
+ @auth_source = AuthSource.new_subclass_instance(klass_name, params[:auth_source])
end
def create
- @auth_source = auth_source_class.new(params[:auth_source])
+ @auth_source = AuthSource.new_subclass_instance(params[:type], params[:auth_source])
if @auth_source.save
flash[:notice] = l(:notice_successful_create)
redirect_to :action => 'index'
else
- render 'auth_sources/new'
+ render :action => 'new'
end
end
def edit
@auth_source = AuthSource.find(params[:id])
- render 'auth_sources/edit'
end
def update
@@ -51,14 +50,14 @@ class AuthSourcesController < ApplicationController
flash[:notice] = l(:notice_successful_update)
redirect_to :action => 'index'
else
- render 'auth_sources/edit'
+ render :action => 'edit'
end
end
def test_connection
- @auth_method = AuthSource.find(params[:id])
+ @auth_source = AuthSource.find(params[:id])
begin
- @auth_method.test_connection
+ @auth_source.test_connection
flash[:notice] = l(:notice_successful_connection)
rescue Exception => e
flash[:error] = l(:error_unable_to_connect, e.message)
@@ -74,10 +73,4 @@ class AuthSourcesController < ApplicationController
end
redirect_to :action => 'index'
end
-
- protected
-
- def auth_source_class
- AuthSource
- end
end
diff --git a/app/controllers/ldap_auth_sources_controller.rb b/app/controllers/ldap_auth_sources_controller.rb
deleted file mode 100644
index 29f1bc3d7..000000000
--- a/app/controllers/ldap_auth_sources_controller.rb
+++ /dev/null
@@ -1,26 +0,0 @@
-# Redmine - project management software
-# Copyright (C) 2006-2011 Jean-Philippe Lang
-#
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation; either version 2
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-
-class LdapAuthSourcesController < AuthSourcesController
- menu_item :ldap_authentication
-
- protected
-
- def auth_source_class
- AuthSourceLdap
- end
-end
diff --git a/app/helpers/auth_sources_helper.rb b/app/helpers/auth_sources_helper.rb
index bd4bca87e..8ef17b209 100644
--- a/app/helpers/auth_sources_helper.rb
+++ b/app/helpers/auth_sources_helper.rb
@@ -18,4 +18,7 @@
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
module AuthSourcesHelper
+ def auth_source_partial_name(auth_source)
+ "form_#{auth_source.class.name.underscore}"
+ end
end
diff --git a/app/models/auth_source.rb b/app/models/auth_source.rb
index 933be904a..63799f5cf 100644
--- a/app/models/auth_source.rb
+++ b/app/models/auth_source.rb
@@ -20,6 +20,7 @@
class AuthSourceException < Exception; end
class AuthSource < ActiveRecord::Base
+ include Redmine::SubclassFactory
include Redmine::Ciphering
has_many :users
diff --git a/app/views/ldap_auth_sources/_form.html.erb b/app/views/auth_sources/_form_auth_source_ldap.html.erb
index 3ddf43a9a..3ddf43a9a 100644
--- a/app/views/ldap_auth_sources/_form.html.erb
+++ b/app/views/auth_sources/_form_auth_source_ldap.html.erb
diff --git a/app/views/auth_sources/edit.html.erb b/app/views/auth_sources/edit.html.erb
index e2c99aa3c..87c72724d 100644
--- a/app/views/auth_sources/edit.html.erb
+++ b/app/views/auth_sources/edit.html.erb
@@ -1,7 +1,6 @@
<h2><%=l(:label_auth_source)%> (<%= h(@auth_source.auth_method_name) %>)</h2>
<% form_tag({:action => 'update', :id => @auth_source}, :class => "tabular") do %>
- <%= render :partial => 'form' %>
+ <%= render :partial => auth_source_partial_name(@auth_source) %>
<%= submit_tag l(:button_save) %>
<% end %>
-
diff --git a/app/views/auth_sources/new.html.erb b/app/views/auth_sources/new.html.erb
index d0b9b1d43..e5b9106bd 100644
--- a/app/views/auth_sources/new.html.erb
+++ b/app/views/auth_sources/new.html.erb
@@ -1,6 +1,7 @@
<h2><%=l(:label_auth_source_new)%> (<%= h(@auth_source.auth_method_name) %>)</h2>
<% form_tag({:action => 'create'}, :class => "tabular") do %>
- <%= render :partial => 'form' %>
+ <%= hidden_field_tag 'type', @auth_source.type %>
+ <%= render :partial => auth_source_partial_name(@auth_source) %>
<%= submit_tag l(:button_create) %>
<% end %>
diff --git a/config/routes.rb b/config/routes.rb
index 772447cae..abf91729a 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -370,21 +370,6 @@ ActionController::Routing::Routes.draw do |map|
map.connect 'auth_sources/update/:id', :controller => 'auth_sources',
:action => 'update', :id => /\d+/, :conditions => {:method => :post}
- map.connect 'ldap_auth_sources', :controller => 'ldap_auth_sources',
- :action => 'index', :conditions => {:method => :get}
- map.connect 'ldap_auth_sources/new', :controller => 'ldap_auth_sources',
- :action => 'new', :conditions => {:method => :get}
- map.connect 'ldap_auth_sources/create', :controller => 'ldap_auth_sources',
- :action => 'create', :conditions => {:method => :post}
- map.connect 'ldap_auth_sources/destroy/:id', :controller => 'ldap_auth_sources',
- :action => 'destroy', :id => /\d+/, :conditions => {:method => :post}
- map.connect 'ldap_auth_sources/test_connection/:id', :controller => 'ldap_auth_sources',
- :action => 'test_connection', :conditions => {:method => :get}
- map.connect 'ldap_auth_sources/edit/:id', :controller => 'ldap_auth_sources',
- :action => 'edit', :id => /\d+/, :conditions => {:method => :get}
- map.connect 'ldap_auth_sources/update/:id', :controller => 'ldap_auth_sources',
- :action => 'update', :id => /\d+/, :conditions => {:method => :post}
-
map.connect 'workflows', :controller => 'workflows',
:action => 'index', :conditions => {:method => :get}
map.connect 'workflows/edit', :controller => 'workflows',
diff --git a/lib/redmine.rb b/lib/redmine.rb
index 724f12a84..156bc76c2 100644
--- a/lib/redmine.rb
+++ b/lib/redmine.rb
@@ -182,7 +182,7 @@ Redmine::MenuManager.map :admin_menu do |menu|
:html => {:class => 'custom_fields'}
menu.push :enumerations, {:controller => 'enumerations'}
menu.push :settings, {:controller => 'settings'}
- menu.push :ldap_authentication, {:controller => 'ldap_auth_sources', :action => 'index'},
+ menu.push :ldap_authentication, {:controller => 'auth_sources', :action => 'index'},
:html => {:class => 'server_authentication'}
menu.push :plugins, {:controller => 'admin', :action => 'plugins'}, :last => true
menu.push :info, {:controller => 'admin', :action => 'info'}, :caption => :label_information_plural, :last => true
diff --git a/test/functional/auth_sources_controller_test.rb b/test/functional/auth_sources_controller_test.rb
index e57e801b9..c7c297980 100644
--- a/test/functional/auth_sources_controller_test.rb
+++ b/test/functional/auth_sources_controller_test.rb
@@ -18,7 +18,7 @@
require File.expand_path('../../test_helper', __FILE__)
class AuthSourcesControllerTest < ActionController::TestCase
- fixtures :users
+ fixtures :users, :auth_sources
def setup
@request.session[:user_id] = 1
@@ -37,54 +37,91 @@ class AuthSourcesControllerTest < ActionController::TestCase
assert_response :success
assert_template 'new'
- assert_kind_of AuthSource, assigns(:auth_source)
- assert assigns(:auth_source).new_record?
+
+ source = assigns(:auth_source)
+ assert_equal AuthSourceLdap, source.class
+ assert source.new_record?
+
+ assert_tag 'input', :attributes => {:name => 'type', :value => 'AuthSourceLdap'}
+ assert_tag 'input', :attributes => {:name => 'auth_source[host]'}
end
def test_create
- assert_difference 'AuthSource.count' do
- post :create, :auth_source => {:name => 'Test'}
+ assert_difference 'AuthSourceLdap.count' do
+ post :create, :type => 'AuthSourceLdap', :auth_source => {:name => 'Test', :host => '127.0.0.1', :port => '389', :attr_login => 'cn'}
+ assert_redirected_to '/auth_sources'
end
- assert_redirected_to '/auth_sources'
- auth_source = AuthSource.first(:order => 'id DESC')
- assert_equal 'Test', auth_source.name
+ source = AuthSourceLdap.first(:order => 'id DESC')
+ assert_equal 'Test', source.name
+ assert_equal '127.0.0.1', source.host
+ assert_equal 389, source.port
+ assert_equal 'cn', source.attr_login
+ end
+
+ def test_create_with_failure
+ assert_no_difference 'AuthSourceLdap.count' do
+ post :create, :type => 'AuthSourceLdap', :auth_source => {:name => 'Test', :host => '', :port => '389', :attr_login => 'cn'}
+ assert_response :success
+ assert_template 'new'
+ end
+ assert_error_tag :content => /host can't be blank/i
end
def test_edit
- auth_source = AuthSource.create!(:name => 'TestEdit')
- get :edit, :id => auth_source.id
+ get :edit, :id => 1
assert_response :success
assert_template 'edit'
- assert_equal auth_source, assigns(:auth_source)
+
+ assert_tag 'input', :attributes => {:name => 'auth_source[host]'}
end
def test_update
- auth_source = AuthSource.create!(:name => 'TestEdit')
- post :update, :id => auth_source.id, :auth_source => {:name => 'TestUpdate'}
-
+ post :update, :id => 1, :auth_source => {:name => 'Renamed', :host => '192.168.0.10', :port => '389', :attr_login => 'uid'}
assert_redirected_to '/auth_sources'
- assert_equal 'TestUpdate', auth_source.reload.name
+
+ source = AuthSourceLdap.find(1)
+ assert_equal 'Renamed', source.name
+ assert_equal '192.168.0.10', source.host
+ end
+
+ def test_update_with_failure
+ post :update, :id => 1, :auth_source => {:name => 'Renamed', :host => '', :port => '389', :attr_login => 'uid'}
+ assert_response :success
+ assert_template 'edit'
+ assert_error_tag :content => /host can't be blank/i
+ end
+
+ def test_destroy
+ assert_difference 'AuthSourceLdap.count', -1 do
+ post :destroy, :id => 1
+ end
end
- def test_destroy_without_users
- auth_source = AuthSource.create!(:name => 'TestEdit')
- assert_difference 'AuthSource.count', -1 do
- post :destroy, :id => auth_source.id
+ def test_destroy_auth_source_in_use
+ User.find(2).update_attribute :auth_source_id, 1
+
+ assert_no_difference 'AuthSourceLdap.count' do
+ post :destroy, :id => 1
end
+ end
+ def test_test_connection
+ AuthSourceLdap.any_instance.stubs(:test_connection).returns(true)
+
+ get :test_connection, :id => 1
assert_redirected_to '/auth_sources'
+ assert_not_nil flash[:notice]
+ assert_match /successful/i, flash[:notice]
end
- def test_destroy_with_users
- auth_source = AuthSource.create!(:name => 'TestEdit')
- User.find(2).update_attribute :auth_source, auth_source
- assert_no_difference 'AuthSource.count' do
- post :destroy, :id => auth_source.id
- end
+ def test_test_connection_with_failure
+ AuthSourceLdap.any_instance.stubs(:test_connection).raises(Exception.new("Something went wrong"))
+ get :test_connection, :id => 1
assert_redirected_to '/auth_sources'
- assert AuthSource.find(auth_source.id)
+ assert_not_nil flash[:error]
+ assert_include '(Something went wrong)', flash[:error]
end
end
diff --git a/test/functional/ldap_auth_sources_controller_test.rb b/test/functional/ldap_auth_sources_controller_test.rb
deleted file mode 100644
index bfb2c569e..000000000
--- a/test/functional/ldap_auth_sources_controller_test.rb
+++ /dev/null
@@ -1,114 +0,0 @@
-# Redmine - project management software
-# Copyright (C) 2006-2012 Jean-Philippe Lang
-#
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation; either version 2
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-
-require File.expand_path('../../test_helper', __FILE__)
-
-class LdapAuthSourcesControllerTest < ActionController::TestCase
- fixtures :auth_sources, :users
-
- def setup
- @request.session[:user_id] = 1
- end
-
- def test_new
- get :new
-
- assert_response :success
- assert_template 'new'
-
- source = assigns(:auth_source)
- assert_equal AuthSourceLdap, source.class
- assert source.new_record?
- end
-
- def test_create
- assert_difference 'AuthSourceLdap.count' do
- post :create, :auth_source => {:name => 'Test', :host => '127.0.0.1', :port => '389', :attr_login => 'cn'}
- assert_redirected_to '/ldap_auth_sources'
- end
-
- source = AuthSourceLdap.first(:order => 'id DESC')
- assert_equal 'Test', source.name
- assert_equal '127.0.0.1', source.host
- assert_equal 389, source.port
- assert_equal 'cn', source.attr_login
- end
-
- def test_create_with_failure
- assert_no_difference 'AuthSourceLdap.count' do
- post :create, :auth_source => {:name => 'Test', :host => '', :port => '389', :attr_login => 'cn'}
- assert_response :success
- assert_template 'new'
- end
- assert_error_tag :content => /host can't be blank/i
- end
-
- def test_edit
- get :edit, :id => 1
-
- assert_response :success
- assert_template 'edit'
- end
-
- def test_update
- post :update, :id => 1, :auth_source => {:name => 'Renamed', :host => '192.168.0.10', :port => '389', :attr_login => 'uid'}
- assert_redirected_to '/ldap_auth_sources'
-
- source = AuthSourceLdap.find(1)
- assert_equal 'Renamed', source.name
- assert_equal '192.168.0.10', source.host
- end
-
- def test_update_with_failure
- post :update, :id => 1, :auth_source => {:name => 'Renamed', :host => '', :port => '389', :attr_login => 'uid'}
- assert_response :success
- assert_template 'edit'
- assert_error_tag :content => /host can't be blank/i
- end
-
- def test_destroy
- assert_difference 'AuthSourceLdap.count', -1 do
- post :destroy, :id => 1
- end
- end
-
- def test_destroy_auth_source_in_use
- User.find(2).update_attribute :auth_source_id, 1
-
- assert_no_difference 'AuthSourceLdap.count' do
- post :destroy, :id => 1
- end
- end
-
- def test_test_connection
- AuthSourceLdap.any_instance.stubs(:test_connection).returns(true)
-
- get :test_connection, :id => 1
- assert_redirected_to '/ldap_auth_sources'
- assert_not_nil flash[:notice]
- assert_match /successful/i, flash[:notice]
- end
-
- def test_test_connection_with_failure
- AuthSourceLdap.any_instance.stubs(:test_connection).raises(Exception.new("Something went wrong"))
-
- get :test_connection, :id => 1
- assert_redirected_to '/ldap_auth_sources'
- assert_not_nil flash[:error]
- assert_include '(Something went wrong)', flash[:error]
- end
-end
diff --git a/test/integration/routing/ldap_auth_sources_test.rb b/test/integration/routing/ldap_auth_sources_test.rb
deleted file mode 100644
index dad74c35a..000000000
--- a/test/integration/routing/ldap_auth_sources_test.rb
+++ /dev/null
@@ -1,55 +0,0 @@
-# Redmine - project management software
-# Copyright (C) 2006-2011 Jean-Philippe Lang
-#
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation; either version 2
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-
-require File.expand_path('../../../test_helper', __FILE__)
-
-class RoutingLdapAuthSourcesTest < ActionController::IntegrationTest
- def test_ldap_auth_sources
- assert_routing(
- { :method => 'get', :path => "/ldap_auth_sources" },
- { :controller => 'ldap_auth_sources', :action => 'index' }
- )
- assert_routing(
- { :method => 'get', :path => "/ldap_auth_sources/new" },
- { :controller => 'ldap_auth_sources', :action => 'new' }
- )
- assert_routing(
- { :method => 'post', :path => "/ldap_auth_sources/create" },
- { :controller => 'ldap_auth_sources', :action => 'create' }
- )
- assert_routing(
- { :method => 'post', :path => "/ldap_auth_sources/destroy/1234" },
- { :controller => 'ldap_auth_sources', :action => 'destroy',
- :id => '1234' }
- )
- assert_routing(
- { :method => 'get', :path => "/ldap_auth_sources/test_connection/1234" },
- { :controller => 'ldap_auth_sources', :action => 'test_connection',
- :id => '1234' }
- )
- assert_routing(
- { :method => 'get', :path => "/ldap_auth_sources/edit/1234" },
- { :controller => 'ldap_auth_sources', :action => 'edit',
- :id => '1234' }
- )
- assert_routing(
- { :method => 'post', :path => "/ldap_auth_sources/update/1234" },
- { :controller => 'ldap_auth_sources', :action => 'update',
- :id => '1234' }
- )
- end
-end