Skip to content
This repository was archived by the owner on Feb 14, 2019. It is now read-only.
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
2 changes: 1 addition & 1 deletion app/models/ldap_setting.rb
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
1 change: 1 addition & 0 deletions app/views/ldap_settings/_synchronization_actions.html.erb
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
<p><%= f.text_field :required_group %></p>
<p><%= f.text_field :admin_group %></p>
<p><%= f.text_field :fixed_group, :size => 15 %></p>
<p><%= f.text_field :group_prefix, :size => 15 %></p>
<p><%= f.check_box :create_users %></p>
<p><%= f.check_box :create_groups %></p>
<p><%= f.select :dyngroups, options_for_dyngroups %>
Expand Down
3 changes: 2 additions & 1 deletion config/locales/en.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down
104 changes: 104 additions & 0 deletions config/locales/ru.yml
Original file line number Diff line number Diff line change
@@ -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}"
6 changes: 5 additions & 1 deletion lib/ldap_sync/entity_manager.rb
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down
2 changes: 1 addition & 1 deletion lib/ldap_sync/infectors/auth_source_ldap.rb
Original file line number Diff line number Diff line change
Expand Up @@ -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}'...",
Expand Down