##// END OF EJS Templates
remove unneeded Relation#all from AuthSource#authenticate...
Toshi MARUYAMA -
r12318:99fe35be422a
parent child
Show More
@@ -1,92 +1,92
1 # Redmine - project management software
1 # Redmine - project management software
2 # Copyright (C) 2006-2013 Jean-Philippe Lang
2 # Copyright (C) 2006-2013 Jean-Philippe Lang
3 #
3 #
4 # This program is free software; you can redistribute it and/or
4 # This program is free software; you can redistribute it and/or
5 # modify it under the terms of the GNU General Public License
5 # modify it under the terms of the GNU General Public License
6 # as published by the Free Software Foundation; either version 2
6 # as published by the Free Software Foundation; either version 2
7 # of the License, or (at your option) any later version.
7 # of the License, or (at your option) any later version.
8 #
8 #
9 # This program is distributed in the hope that it will be useful,
9 # This program is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 # GNU General Public License for more details.
12 # GNU General Public License for more details.
13 #
13 #
14 # You should have received a copy of the GNU General Public License
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
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.
16 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17
17
18 # Generic exception for when the AuthSource can not be reached
18 # Generic exception for when the AuthSource can not be reached
19 # (eg. can not connect to the LDAP)
19 # (eg. can not connect to the LDAP)
20 class AuthSourceException < Exception; end
20 class AuthSourceException < Exception; end
21 class AuthSourceTimeoutException < AuthSourceException; end
21 class AuthSourceTimeoutException < AuthSourceException; end
22
22
23 class AuthSource < ActiveRecord::Base
23 class AuthSource < ActiveRecord::Base
24 include Redmine::SubclassFactory
24 include Redmine::SubclassFactory
25 include Redmine::Ciphering
25 include Redmine::Ciphering
26
26
27 has_many :users
27 has_many :users
28
28
29 validates_presence_of :name
29 validates_presence_of :name
30 validates_uniqueness_of :name
30 validates_uniqueness_of :name
31 validates_length_of :name, :maximum => 60
31 validates_length_of :name, :maximum => 60
32
32
33 def authenticate(login, password)
33 def authenticate(login, password)
34 end
34 end
35
35
36 def test_connection
36 def test_connection
37 end
37 end
38
38
39 def auth_method_name
39 def auth_method_name
40 "Abstract"
40 "Abstract"
41 end
41 end
42
42
43 def account_password
43 def account_password
44 read_ciphered_attribute(:account_password)
44 read_ciphered_attribute(:account_password)
45 end
45 end
46
46
47 def account_password=(arg)
47 def account_password=(arg)
48 write_ciphered_attribute(:account_password, arg)
48 write_ciphered_attribute(:account_password, arg)
49 end
49 end
50
50
51 def searchable?
51 def searchable?
52 false
52 false
53 end
53 end
54
54
55 def self.search(q)
55 def self.search(q)
56 results = []
56 results = []
57 AuthSource.all.each do |source|
57 AuthSource.all.each do |source|
58 begin
58 begin
59 if source.searchable?
59 if source.searchable?
60 results += source.search(q)
60 results += source.search(q)
61 end
61 end
62 rescue AuthSourceException => e
62 rescue AuthSourceException => e
63 logger.error "Error while searching users in #{source.name}: #{e.message}"
63 logger.error "Error while searching users in #{source.name}: #{e.message}"
64 end
64 end
65 end
65 end
66 results
66 results
67 end
67 end
68
68
69 def allow_password_changes?
69 def allow_password_changes?
70 self.class.allow_password_changes?
70 self.class.allow_password_changes?
71 end
71 end
72
72
73 # Does this auth source backend allow password changes?
73 # Does this auth source backend allow password changes?
74 def self.allow_password_changes?
74 def self.allow_password_changes?
75 false
75 false
76 end
76 end
77
77
78 # Try to authenticate a user not yet registered against available sources
78 # Try to authenticate a user not yet registered against available sources
79 def self.authenticate(login, password)
79 def self.authenticate(login, password)
80 AuthSource.where(:onthefly_register => true).all.each do |source|
80 AuthSource.where(:onthefly_register => true).each do |source|
81 begin
81 begin
82 logger.debug "Authenticating '#{login}' against '#{source.name}'" if logger && logger.debug?
82 logger.debug "Authenticating '#{login}' against '#{source.name}'" if logger && logger.debug?
83 attrs = source.authenticate(login, password)
83 attrs = source.authenticate(login, password)
84 rescue => e
84 rescue => e
85 logger.error "Error during authentication: #{e.message}"
85 logger.error "Error during authentication: #{e.message}"
86 attrs = nil
86 attrs = nil
87 end
87 end
88 return attrs if attrs
88 return attrs if attrs
89 end
89 end
90 return nil
90 return nil
91 end
91 end
92 end
92 end
General Comments 0
You need to be logged in to leave comments. Login now