diff --git a/README.md b/README.md index 26134a3..6d6b802 100644 --- a/README.md +++ b/README.md @@ -159,6 +159,8 @@ configuration: + **Add users to group** - (optional) A group to wich all the users created from this LDAP authentication will added upon creation. This group should not exist on LDAP. ++ **Add prefix to group name - (optional) Add prefix to all group names created + from LDAP + **Create new groups** - If enabled, groups that don't already exist on redmine will be created. + **Create new users** - If enabled, users that don't already exist on redmine diff --git a/app/models/ldap_setting.rb b/app/models/ldap_setting.rb index e0fd2ad..2e1e4ee 100644 --- a/app/models/ldap_setting.rb +++ b/app/models/ldap_setting.rb @@ -30,7 +30,7 @@ class LdapSetting CLASS_NAMES = %w( class_user class_group ) FLAGS = %w( create_groups create_users active ) COMBOS = %w( group_membership nested_groups sync_on_login dyngroups ) - 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 ) + OTHERS = %w( account_disabled_test user_fields_to_sync group_fields_to_sync user_ldap_attrs group_ldap_attrs fixed_group group_prefix admin_group required_group group_search_filter groupname_pattern groups_base_dn dyngroups_cache_ttl ) validates_presence_of :auth_source_ldap_id validates_presence_of :class_user, :class_group, :groupname diff --git a/app/views/ldap_settings/_synchronization_actions.html.erb b/app/views/ldap_settings/_synchronization_actions.html.erb index 2ca022d..e54c06c 100644 --- a/app/views/ldap_settings/_synchronization_actions.html.erb +++ b/app/views/ldap_settings/_synchronization_actions.html.erb @@ -5,6 +5,7 @@
<%= f.text_field :required_group %>
<%= f.text_field :admin_group %>
<%= f.text_field :fixed_group, :size => 15 %>
+<%= f.text_field :group_prefix, :size => 15 %>
<%= f.check_box :create_users %>
<%= f.check_box :create_groups %>
<%= f.select :dyngroups, options_for_dyngroups %> diff --git a/config/locales/en.yml b/config/locales/en.yml index af46a76..618e42f 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -64,7 +64,8 @@ en: field_required_group: "Users must be members of" field_admin_group: "Administrators group" field_fixed_group: "Add users to group" - + field_group_prefix: "Add prefix to group name" + field_user_group_fields: "User/Group fields" field_firstname: "First name" field_lastname: "Last name" diff --git a/config/locales/ru.yml b/config/locales/ru.yml new file mode 100644 index 0000000..56fc3f1 --- /dev/null +++ b/config/locales/ru.yml @@ -0,0 +1,104 @@ +ru: + label_ldap_synchronization: "Синхронизация с LDAP" + label_ldap_settings: "Настройки LDAP" + label_ldap_servers: "Серверы LDAP" + label_synchronization_actions: "Действия синхронизации" + label_synchronize: "Синхронизировать" + label_ldap_attribute: "Атрибут LDAP" + label_default_value: "Значение по умолчанию" + label_test: "Проверка" + label_result: "Результат" + label_minutes: "минут" + + label_not_executed: "Не выполнялась" + label_no_fields: "Нет полей" + label_not_found: "Не найден" + label_users_enabled: "пользователей разблокировано" + label_a_total_of: "Всего %{count}" + label_users_disabled_by_flag: "пользователей заблокировано по флагу" + label_users_disabled_by_group: "пользователей заблокировано по группе" + label_admin_users: "Администраторы" + label_dynamic_groups: "Динамические группы" + label_ldap_attributes_on_a_user: "Атрибуты LDAP пользователя" + label_ldap_attributes_on_a_group: "Атрибуты LDAP группы" + label_log_messages: "Сообщения журнала" + + button_test: "Проверка" + button_execute: "Выполнить" + button_enable: "Включить" + button_disable: "Выключить" + + header_create_groups: "Создание групп" + header_create_users: "Создание пользователей" + header_sync_user_fields: "Синх. пользователей" + header_sync_group_fields: "Синх. группы" + + field_nested_groups: "Вложенные группы" + field_create_groups: "Создавать группы" + field_create_users: "Создавать пользователей" + field_sync_on_login: "Синхронизировать при входе" + field_dyngroups: "Динамические группы" + field_dyngroups_cache_ttl: "TTL кеша" + + field_groups_base_dn: "Базовый DN для групп" + field_group_membership: "Членство в группах" + field_class_user: "objectclass пользователей" + field_class_group: "objectclass групп" + field_account_disabled_test: "Проверка заблокированности учетной записи" + + field_groupname_pattern: "Шаблон имени группы" + field_group_search_filter: "Фильтр поиска групп" + + field_groupname: "Название группы (группа)" + field_member: "Подчиненные пользователи (группа)" + field_member_group: "Подчиненные группы (группа)" + field_parent_group: "Родительские группы (группа)" + field_user_memberid: "id подчиненного (пользователь)" + field_group_memberid: "id подчиненного (группа)" + field_group_parentid: "id родителя (группа)" + field_user_groups: "Группы (пользователь)" + field_groupid: "id группы (группа)" + field_account_flags: "Флаги учетной записи (пользователь)" + field_primary_group: "Основная группа (пользователь)" + + field_required_group: "Пользователи должны входить в группу" + field_admin_group: "Группа администраторов" + field_fixed_group: "Добавлять пользователей в группы" + field_group_prefix: "Добавлять префикс к имени группы" + + field_user_group_fields: "Поля пользователя/группы" + field_firstname: "Имя" + field_lastname: "Фамилия" + field_mail: "Email" + + field_test_users: "Пользователи" + field_test_groups: "Группы" + + option_group_membership_on_groups: "Список пользователей содержится в группе " + option_group_membership_on_members: "Список групп содержится в пользователе" + + option_nested_groups_disabled: "Выключены" + option_nested_groups_on_parents: "Список подчиненных групп содержится в родительской группе" + option_nested_groups_on_members: "Список родительских групп содержится в подчиненной группе" + + option_dyngroups_disabled: "Выключены" + option_dyngroups_enabled: "Включены" + option_dyngroups_enabled_with_ttl: "Включены с TTL" + + option_sync_on_login_disabled: "Ничего" + option_sync_on_login_user_fields: "Данные пользователя" + option_sync_on_login_user_fields_and_groups: "Данные и группы пользователя" + + text_ldap_setting_successfully_updated: "Конфигурация Ldap успешно обновлена." + + field_base_settings: "Базовые настройки" + option_custom: "Вручную" + + error_cannot_enable_with_invalid_settings: "Нельзя включить синхронизацию с неправильными настройками. Пожалуйста проверьте настройки." + + errors: + messages: + invalid_ldap_attribute: "Поле '%{field}' имеет неправильный атрибут LDAP" + must_have_ldap_attribute: "Для синхронизации поле '%{field}' должно иметь атрибут LDAP" + invalid_expression: "содержит неправильное выражение: %{error_message}" + invalid_regexp: "содержит неправильное регулярное выражение: %{error_message}" diff --git a/lib/ldap_sync/entity_manager.rb b/lib/ldap_sync/entity_manager.rb index c05d1a1..66bc64e 100644 --- a/lib/ldap_sync/entity_manager.rb +++ b/lib/ldap_sync/entity_manager.rb @@ -114,7 +114,9 @@ def groups_changes(user) with_ldap_connection do |ldap| # Find which of the user's current groups are in ldap - filtered_groups = user_groups.select {|g| groupname_regexp =~ g } + filtered_groups = user_groups.select {|g| g.start_with?(setting.group_prefix) } + .map {|g| g.sub(setting.group_prefix, "") } + .select {|g| groupname_regexp =~ g } names_filter = filtered_groups.map {|g| Net::LDAP::Filter.eq( setting.groupname, g )}.reduce(:|) find_all_groups(ldap, names_filter, n(:groupname)) do |group| changes[:deleted] << group.first @@ -163,6 +165,8 @@ def groups_changes(user) changes[:added].delete_if {|group| groupname_regexp !~ group } changes[:deleted] -= changes[:added] + changes[:added].map! {|group| setting.group_prefix.downcase + group } + changes[:deleted].map! {|group| setting.group_prefix.downcase + group } changes[:added].delete_if {|group| user_groups.include?(group.downcase) } changes diff --git a/lib/ldap_sync/infectors/auth_source_ldap.rb b/lib/ldap_sync/infectors/auth_source_ldap.rb index 03a317d..73ed187 100644 --- a/lib/ldap_sync/infectors/auth_source_ldap.rb +++ b/lib/ldap_sync/infectors/auth_source_ldap.rb @@ -130,7 +130,7 @@ def create_and_sync_group(group_data, attr_groupname) groupname = group_data[attr_groupname].first return unless setting.groupname_regexp =~ groupname - group, is_new_group = find_or_create_group(groupname, group_data) + group, is_new_group = find_or_create_group(setting.group_prefix + groupname, group_data) return if group.nil? trace "-- #{is_new_group ? 'Creating' : 'Updating'} group '#{group.name}'...",