Skip to content

Commit e96e28d

Browse files
committed
Remove user from groups and projects when deleted
1 parent 48039a0 commit e96e28d

34 files changed

+255
-135
lines changed

.travis.yml

+2-4
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
---
21
language: ruby
32
sudo: false
43
cache: bundler
@@ -7,9 +6,10 @@ addons:
76
packages:
87
- ldap-utils
98
- slapd
9+
chrome: stable
1010
rvm:
1111
- 1.9.3
12-
- 2.3.1
12+
- 2.3.4
1313
env:
1414
global: REDMINE_DIR=./workspace/redmine
1515
matrix:
@@ -18,8 +18,6 @@ env:
1818
- REDMINE=master
1919
matrix:
2020
include:
21-
- rvm: 2.3.1
22-
env: REDMINE=3.3-stable
2321
- rvm: 2.4.1
2422
env: REDMINE=3.4-stable
2523
- rvm: 2.4.1

app/helpers/ldap_settings_helper.rb

+1-1
Original file line numberDiff line numberDiff line change
@@ -158,7 +158,7 @@ def current_base
158158
end
159159

160160
def base_settings
161-
@base_settings if @base_settings
161+
@base_settings if defined? @base_settings
162162

163163
config_dir = File.join(Redmine::Plugin.find(:redmine_ldap_sync).directory, 'config')
164164
default = baseable_fields.inject({}) {|h, k| h[k] = ''; h }

app/models/ldap_setting.rb

+9-9
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ class LdapSetting
3030
CLASS_NAMES = %w( class_user class_group )
3131
FLAGS = %w( create_groups create_users active )
3232
COMBOS = %w( group_membership nested_groups sync_on_login dyngroups users_search_scope )
33-
OTHERS = %w( account_disabled_test user_fields_to_sync group_fields_to_sync user_ldap_attrs group_ldap_attrs fixed_group admin_group required_group group_search_filter groupname_pattern groups_base_dn dyngroups_cache_ttl )
33+
OTHERS = %w( account_locked_test user_fields_to_sync group_fields_to_sync user_ldap_attrs group_ldap_attrs fixed_group admin_group required_group group_search_filter groupname_pattern groups_base_dn dyngroups_cache_ttl )
3434

3535
validates_presence_of :auth_source_ldap_id
3636
validates_presence_of :class_user, :class_group, :groupname
@@ -51,7 +51,7 @@ class LdapSetting
5151
validates_numericality_of :dyngroups_cache_ttl, :only_integer => true, :allow_blank => true
5252

5353
validate :validate_groupname_pattern
54-
validate :validate_account_disabled_test
54+
validate :validate_account_locked_test
5555
validate :validate_group_filter
5656
validate :validate_user_fields_to_sync, :validate_user_ldap_attrs
5757
validate :validate_group_fields_to_sync, :validate_group_ldap_attrs
@@ -141,9 +141,9 @@ def sync_fields_on_login?
141141
end
142142

143143
# Returns the evaluated proc of the account disabled test
144-
def account_disabled_proc
145-
@account_disabled_proc ||= if has_account_disabled_test?
146-
eval("lambda { |flags| #{account_disabled_test} }")
144+
def account_locked_proc
145+
@account_locked_proc ||= if has_account_locked_test?
146+
eval("lambda { |flags| #{account_locked_test} }")
147147
end
148148
end
149149

@@ -274,12 +274,12 @@ def self.all(options = {})
274274

275275
protected
276276

277-
def validate_account_disabled_test
278-
if account_disabled_test.present?
279-
eval "lambda { |flags| #{account_disabled_test} }"
277+
def validate_account_locked_test
278+
if account_locked_test.present?
279+
eval "lambda { |flags| #{account_locked_test} }"
280280
end
281281
rescue Exception => e
282-
errors.add :account_disabled_test, :invalid_expression, :error_message => e.message.gsub(/^(\(eval\):1: )?(.*?)(lambda.*|$)/m, '\2')
282+
errors.add :account_locked_test, :invalid_expression, :error_message => e.message.gsub(/^(\(eval\):1: )?(.*?)(lambda.*|$)/m, '\2')
283283
Rails.logger.error "#{e.message}\n #{e.backtrace.join("\n ")}"
284284
end
285285

app/models/ldap_test.rb

+4-4
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ class LdapTest
2222
include ActiveModel::Validations
2323
extend ActiveModel::Naming
2424

25-
attr_accessor :setting, :bind_user, :bind_password, :test_users, :test_groups, :messages, :user_attrs, :group_attrs, :users_at_ldap, :groups_at_ldap, :non_dynamic_groups, :dynamic_groups, :users_disabled_by_group, :admin_users, :user_changes
25+
attr_accessor :setting, :bind_user, :bind_password, :test_users, :test_groups, :messages, :user_attrs, :group_attrs, :users_at_ldap, :groups_at_ldap, :non_dynamic_groups, :dynamic_groups, :users_locked_by_group, :admin_users, :user_changes
2626

2727
delegate :auth_source_ldap, :to => :setting
2828
delegate :users, :to => :auth_source_ldap
@@ -34,12 +34,12 @@ def initialize(setting)
3434

3535
@setting = setting
3636
@messages = ''
37-
@user_changes = {:enabled => [], :disabled => []}
37+
@user_changes = {:enabled => [], :locked => [], :deleted => []}
3838
@users_at_ldap = {}
3939
@groups_at_ldap = {}
4040
@non_dynamic_groups = []
4141
@dynamic_groups = {}
42-
@users_disabled_by_group = []
42+
@users_locked_by_group = []
4343
@admin_users = []
4444
end
4545

@@ -72,7 +72,7 @@ def run_with_users_and_groups(users, groups)
7272
end
7373

7474
if setting.has_required_group?
75-
users_disabled_by_group << login unless enabled_groups.include? setting.required_group.downcase
75+
users_locked_by_group << login unless enabled_groups.include? setting.required_group.downcase
7676
end
7777
end if setting.has_admin_group? || setting.has_required_group?
7878

app/views/ldap_settings/_ldap_settings.html.erb

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
<p><%= f.text_field :groupname_pattern, :size => 50 %></p>
1111
<p><%= f.text_field :group_search_filter, :size => 50 %></p>
1212

13-
<p><%= f.text_field :account_disabled_test, :size => 50 %></p>
13+
<p><%= f.text_field :account_locked_test, :size => 50 %></p>
1414
<p><%= f.select :group_membership, options_for_group_membeship %></p>
1515
<p><%= f.select :nested_groups, options_for_nested_groups %></p>
1616

app/views/ldap_settings/test.text.erb

+4-4
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,13 @@
1212
<%= @test.user_changes[:enabled].to_a.inspect %>
1313
<% if @ldap_setting.has_account_flags? -%>
1414

15-
<%=l :label_users_disabled_by_flag %>: <%=l :label_a_total_of, @test.user_changes[:disabled].size %>
16-
<%= @test.user_changes[:disabled].to_a.inspect %>
15+
<%=l :label_users_locked_by_flag %>: <%=l :label_a_total_of, @test.user_changes[:locked].size %>
16+
<%= @test.user_changes[:locked].to_a.inspect %>
1717
<% end -%>
1818
<% if @ldap_setting.has_required_group? -%>
1919

20-
<%=l :label_users_disabled_by_group %>: <%=l :label_a_total_of, @test.users_disabled_by_group.size %>
21-
<%= @test.users_disabled_by_group.inspect %>
20+
<%=l :label_users_locked_by_group %>: <%=l :label_a_total_of, @test.users_locked_by_group.size %>
21+
<%= @test.users_locked_by_group.inspect %>
2222
<% end -%>
2323
<% if @ldap_setting.has_admin_group? -%>
2424

config/Gemfile.travis

+1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
group :test do
2+
gem 'chromedriver-helper', '~> 1.1'
23
if RUBY_VERSION >= '2.0'
34
gem 'coveralls', :require => false
45
elsif RUBY_VERSION < '1.9'

config/base_settings.yml

+3-3
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ active_directory:
22
name: Active Directory
33
class_user: user
44
class_group: group
5-
account_disabled_test: "flags.to_i & 2 != 0"
5+
account_locked_test: "flags.to_i & 2 != 0"
66
group_membership: on_members
77
nested_groups: ""
88
groupname: samaccountname
@@ -13,7 +13,7 @@ active_directory_nested:
1313
name: Active Directory (with nested groups)
1414
class_user: user
1515
class_group: group
16-
account_disabled_test: "flags.to_i & 2 != 0"
16+
account_locked_test: "flags.to_i & 2 != 0"
1717
group_membership: on_members
1818
nested_groups: on_parents
1919
groupname: samaccountname
@@ -51,7 +51,7 @@ samba_ldap:
5151
name: Samba LDAP
5252
class_user: sambaSamAccount
5353
class_group: sambaGroupMapping
54-
account_disabled_test: "flags.include? 'D'"
54+
account_locked_test: "flags.include? 'D'"
5555
group_membership: on_groups
5656
groupname: cn
5757
account_flags: sambaAcctFlags

config/locales/de.yml

+3-3
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,8 @@ de:
1515
label_not_found: "Not found"
1616
label_users_enabled: "Users enabled"
1717
label_a_total_of: "a total of %{count}"
18-
label_users_disabled_by_flag: "Users disabled by flag"
19-
label_users_disabled_by_group: "Users disabled by group"
18+
label_users_locked_by_flag: "Users locked by flag"
19+
label_users_locked_by_group: "Users locked by group"
2020
label_admin_users: "Admin users"
2121
label_dynamic_grous: "Dynamic groups"
2222
label_ldap_attributes_on_a_user: "LDAP attributes on a user"
@@ -45,7 +45,7 @@ de:
4545
field_class_user: "Benutzerobjektklasse"
4646
field_users_search_scope: "Users search scope"
4747
field_class_group: "Gruppenobjektklasse"
48-
field_account_disabled_test: "Account Deaktivierungsbedingung"
48+
field_account_locked_test: "Account Deaktivierungsbedingung"
4949

5050
field_groupname_pattern: "Regular Expression für den Gruppenfilter"
5151
field_group_search_filter: "Gruppensuchfilfer"

config/locales/en.yml

+3-3
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,8 @@ en:
1515
label_not_found: "Not found"
1616
label_users_enabled: "Users enabled"
1717
label_a_total_of: "a total of %{count}"
18-
label_users_disabled_by_flag: "Users disabled by flag"
19-
label_users_disabled_by_group: "Users disabled by group"
18+
label_users_locked_by_flag: "Users locked by flag"
19+
label_users_locked_by_group: "Users locked by group"
2020
label_admin_users: "Admin users"
2121
label_dynamic_groups: "Dynamic groups"
2222
label_ldap_attributes_on_a_user: "LDAP attributes on a user"
@@ -45,7 +45,7 @@ en:
4545
field_class_user: "Users objectclass"
4646
field_users_search_scope: "Users search scope"
4747
field_class_group: "Groups objectclass"
48-
field_account_disabled_test: "Account disabled test"
48+
field_account_locked_test: "Account disabled test"
4949

5050
field_groupname_pattern: "Group name pattern"
5151
field_group_search_filter: "Group search filter"

config/locales/es.yml

+3-3
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,8 @@ es:
1515
label_not_found: "No encontrado"
1616
label_users_enabled: "Usuarios activos"
1717
label_a_total_of: "un total de %{count}"
18-
label_users_disabled_by_flag: "Usuarios inhabilitados por indicadores"
19-
label_users_disabled_by_group: "Usuarios inhabilitados por grupo"
18+
label_users_locked_by_flag: "Usuarios inhabilitados por indicadores"
19+
label_users_locked_by_group: "Usuarios inhabilitados por grupo"
2020
label_admin_users: "Administradores redmine"
2121
label_dynamic_grous: "Grupos dinámicos"
2222
label_ldap_attributes_on_a_user: "Atributos LDAP en un usuario"
@@ -45,7 +45,7 @@ es:
4545
field_class_user: "Objectclass de usuarios"
4646
field_users_search_scope: "Ámbito de búsqueda de usuarios"
4747
field_class_group: "Objectclass de grupos"
48-
field_account_disabled_test: "Prueba de cuenta inhabilitada"
48+
field_account_locked_test: "Prueba de cuenta inhabilitada"
4949

5050
field_groupname_pattern: "Filtro regex de grupos"
5151
field_group_search_filter: "Filtro de búsqueda de grupos"

config/locales/fr.yml

+3-3
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,8 @@
1515
label_not_found: "Pas trouvé"
1616
label_users_enabled: "Utilisateurs activés"
1717
label_a_total_of: "un total de %{count}"
18-
label_users_disabled_by_flag: "Utilisateurs désactivés par statut"
19-
label_users_disabled_by_group: "Utilisateurs désactivés par groupes"
18+
label_users_locked_by_flag: "Utilisateurs désactivés par statut"
19+
label_users_locked_by_group: "Utilisateurs désactivés par groupes"
2020
label_admin_users: "Administrateurs"
2121
label_dynamic_groups: "Groupes Dynamiques"
2222
label_ldap_attributes_on_a_user: "Attributs LDAP sur un utilisateur"
@@ -45,7 +45,7 @@
4545
field_class_user: "Utilisateurs objectclass"
4646
field_users_search_scope: "Profondeur de la recherche des utilisateurs"
4747
field_class_group: "Groupes objectclass"
48-
field_account_disabled_test: "Compte désactivé test"
48+
field_account_locked_test: "Compte désactivé test"
4949

5050
field_groupname_pattern: "Modèle de nom de groupe"
5151
field_group_search_filter: "Filtre de recherche de groupes"

config/locales/ja.yml

+3-3
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,8 @@ ja:
1515
label_not_found: "見つかりません" # "Not found"
1616
label_users_enabled: "有効ユーザー" # "Users enabled"
1717
label_a_total_of: "%{count} 個" # "a total of %{count}"
18-
label_users_disabled_by_flag: "フラグによって無効化されたユーザー" # "Users disabled by flag"
19-
label_users_disabled_by_group: "グループによって無効化されたユーザー"
18+
label_users_locked_by_flag: "フラグによって無効化されたユーザー" # "Users disabled by flag"
19+
label_users_locked_by_group: "グループによって無効化されたユーザー"
2020
label_admin_users: "管理者" # "Admin users"
2121
label_dynamic_groups: "ダイナミックグループ" # "Dynamic groups"
2222
label_ldap_attributes_on_a_user: "ユーザー中に在るLDAP属性" # "LDAP attributes on a user"
@@ -45,7 +45,7 @@ ja:
4545
field_class_user: "ユーザー オブジェクトクラス" # "Users objectclass"
4646
field_users_search_scope: "Users search scope"
4747
field_class_group: "グループ オブジェクトクラス" # "Groups objectclass"
48-
field_account_disabled_test: "無効アカウントの判別方法" # "Account disabled test"
48+
field_account_locked_test: "無効アカウントの判別方法" # "Account disabled test"
4949

5050
field_groupname_pattern: "グループネームパターン" # "Group name pattern"
5151
field_group_search_filter: "グループフィルター" # "Group search filter"

config/locales/nl.yml

+3-3
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,8 @@ nl:
1515
label_not_found: "Niet gevonden"
1616
label_users_enabled: "Ingeschakelde gebruikers"
1717
label_a_total_of: "een totaal van %{count}"
18-
label_users_disabled_by_flag: "Gebruikers uitgeschakeld door vlag"
19-
label_users_disabled_by_group: "Gebruikers uitgeschakeld door groep"
18+
label_users_locked_by_flag: "Gebruikers uitgeschakeld door vlag"
19+
label_users_locked_by_group: "Gebruikers uitgeschakeld door groep"
2020
label_admin_users: "Beheerders"
2121
label_dynamic_groups: "Dynamische groepen"
2222
label_ldap_attributes_on_a_user: "LDAP-attributen voor een gebruiker"
@@ -45,7 +45,7 @@ nl:
4545
field_class_user: "ObjectClass gebruikers"
4646
field_users_search_scope: "Zoekbereik gebruikers"
4747
field_class_group: "ObjectClass groepen"
48-
field_account_disabled_test: "Gebruikersaccount uitgeschakeld test"
48+
field_account_locked_test: "Gebruikersaccount uitgeschakeld test"
4949

5050
field_groupname_pattern: "Groepsnaam-patroon"
5151
field_group_search_filter: "Zoekfilter groepen"

config/locales/pl.yml

+3-3
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,8 @@ pl:
1515
label_not_found: "Nie znaleziono"
1616
label_users_enabled: "Włączeni użytkownicy"
1717
label_a_total_of: "łącznie %{count}"
18-
label_users_disabled_by_flag: "Użytkownicy wyłączeni poprzez flagi"
19-
label_users_disabled_by_group: "Użytkownicy wyłączeni przez grupy"
18+
label_users_locked_by_flag: "Użytkownicy wyłączeni poprzez flagi"
19+
label_users_locked_by_group: "Użytkownicy wyłączeni przez grupy"
2020
label_admin_users: "Administratorzy"
2121
label_dynamic_groups: "Dynamiczne grupy"
2222
label_ldap_attributes_on_a_user: "Atrybuty LDAP użytkownika"
@@ -45,7 +45,7 @@ pl:
4545
field_class_user: "ObjectClass użytkowników"
4646
field_users_search_scope: "Ścieżka szukania użytkowników"
4747
field_class_group: "ObjectClass grup"
48-
field_account_disabled_test: "Test na konto wyłączone"
48+
field_account_locked_test: "Test na konto wyłączone"
4949

5050
field_groupname_pattern: "Wzór nazwy grup"
5151
field_group_search_filter: "Filtr szukania grup"

config/locales/pt.yml

+3-3
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,8 @@ pt:
1515
label_not_found: "Não encontrado"
1616
label_users_enabled: "Utilizadores activos"
1717
label_a_total_of: "no total de %{count}"
18-
label_users_disabled_by_flag: "Utilizadores inactivos por flag"
19-
label_users_disabled_by_group: "Utilizadores inactivos por grupo"
18+
label_users_locked_by_flag: "Utilizadores inactivos por flag"
19+
label_users_locked_by_group: "Utilizadores inactivos por grupo"
2020
label_admin_users: "Administradores redmine"
2121
label_dynamic_grous: "Grupos dinâmicos"
2222
label_ldap_attributes_on_a_user: "Atributos LDAP num utilizador"
@@ -45,7 +45,7 @@ pt:
4545
field_class_user: "Objectclass de utilizadores"
4646
field_users_search_scope: "Âmbito da pesquisa de utilizadores"
4747
field_class_group: "Objectclass de grupos"
48-
field_account_disabled_test: "Teste de conta desactivada"
48+
field_account_locked_test: "Teste de conta desactivada"
4949

5050
field_groupname_pattern: "Filtro regex de grupos"
5151
field_group_search_filter: "Filtro de pesquisa de grupos"

config/locales/ru.yml

+3-3
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,8 @@ ru:
1515
label_not_found: "Не найден"
1616
label_users_enabled: "пользователей разблокировано"
1717
label_a_total_of: "Всего %{count}"
18-
label_users_disabled_by_flag: "пользователей заблокировано по флагу"
19-
label_users_disabled_by_group: "пользователей заблокировано по группе"
18+
label_users_locked_by_flag: "пользователей заблокировано по флагу"
19+
label_users_locked_by_group: "пользователей заблокировано по группе"
2020
label_admin_users: "Администраторы"
2121
label_dynamic_groups: "Динамические группы"
2222
label_ldap_attributes_on_a_user: "Атрибуты LDAP пользователя"
@@ -45,7 +45,7 @@ ru:
4545
field_class_user: "objectclass пользователей"
4646
field_users_search_scope: "Users search scope"
4747
field_class_group: "objectclass групп"
48-
field_account_disabled_test: "Проверка заблокированности учетной записи"
48+
field_account_locked_test: "Проверка заблокированности учетной записи"
4949

5050
field_groupname_pattern: "Шаблон имени группы"
5151
field_group_search_filter: "Фильтр поиска групп"
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
class RenameAccountDisabledTest < ActiveRecord::Migration[4.2]
2+
def self.up
3+
all_settings = Setting.plugin_redmine_ldap_sync
4+
return unless all_settings
5+
6+
AuthSourceLdap.all.each do |as|
7+
settings = all_settings[as.id]
8+
9+
say_with_time "Updating settings for '#{as.name}'" do
10+
settings[:account_locked_test] = settings[:account_disabled_test]
11+
settings.delete(:account_disabled_test)
12+
Setting.plugin_redmine_ldap_sync = all_settings
13+
end if settings
14+
end
15+
end
16+
17+
def self.down
18+
all_settings = Setting.plugin_redmine_ldap_sync
19+
return unless all_settings
20+
21+
AuthSourceLdap.all.each do |as|
22+
settings = all_settings[as.id]
23+
24+
say_with_time "Updating settings for '#{as.name}'" do
25+
settings[:account_disabled_test] = settings[:account_locked_test]
26+
settings.delete(:account_locked_test)
27+
Setting.plugin_redmine_ldap_sync = all_settings
28+
end if settings
29+
end
30+
end
31+
end

0 commit comments

Comments
 (0)