# ============================
# НАСТРОЙКИ ИСТОЧНИКОВ ДАННЫХ
# ============================
# В каждую отдельную настройку добавляется поле source, которое равно хосту, с которого загружаются данные
# Настройки для КК и CSV отличаются, потому что там настройки для единичного экземпляра
# !!!!! Важная переменная source !!!!!
# Параметр source является критически важным идентификатором источника данных
# При синхронизации система ищет данные по связке source + external_id (для AD/LDAP external_id устанавливается автоматически)
# Если в БД есть записи с определенным source, но в загружаемых данных они отсутствуют - все существующие записи с этим source будут удалены и заменены новыми данными.
sources:
csv:
base_ou: "Имя компании"
keycloak:
# source: "example.com"
base_ou: "Имя компании"
active_directory:
- # server: "example.com"
# source: "example.com"
port: 389
ssl: false
timeout: 10000
# base_dn: "CN=Users,DC=example,DC=com"
# user_dn: "ivan.ivanov@example.com"
# password: "example_password"
# base_ou: "Имя компании"
ldap:
- # server: "example.com"
# source: "example.com"
port: 389
ssl: false
timeout: 10000
# base_dn: "dc=example,dc=com"
# user_dn: "uid=example,ou=Users,dc=example,dc=com"
# password: "password"
# base_ou: "Имя компании"
mysql:
- # host: "example.com"
port: 3306
database: "ecss_address_book"
username: "service_address_book"
password: "service_address_book"
base_ou: "Имя компании"
# domain: "example.domain"
# source: "mysql:domain:host"
http_terminal:
- # host: "example.com"
port: 9999
protocol: "http"
username: "admin"
password: "password"
# domain: "example.domain"
base_ou: "Имя компании"
query_limit: 2000
# source: "http_terminal:domain:host"
auto_update:
ldap:
enabled: false
timeout: 86400000 # Обновление раз в день, время указывается в миллисекундах
keycloak:
enabled: false
timeout: 86400000
# ============================
# КОНФИГУРАЦИЯ МАППИНГА
# ============================
# Конфигурация мапперов для трансформации данных из внешних источников в структуру контакта Address Book
#
# Доступные поля контакта: domain, external_id, birthday, common_name, first_name,
# last_name, middle_name, nickname, org, title, full_name, position, gender, avatar, addresses, emails, messengers,
# phones, additional_info
#
# Структура маппера:
# <источник>:
# <поле_контакта>: [<путь_к_данным_в_источнике>, <тип_данных>]
# <поле_контакта>: [[<вложенный_путь>, <тип_данных>]]
# additional_info:
# <подполе>: [<путь_к_данным>, <тип_данных>]
#
# Поддерживаемые типы данных:
# - string: строковые значения
# - url: тип аватара; означает, что аватар хранится в виде пути
# - jpeg: тип аватара; бинарные данные изображений
# - email: адреса электронной почты
# - phone: номера телефонов
# - date: даты
#
# Особенности:
# - Поле 'kind' автоматически устанавливается сервисом ('contact' или 'group')
# - Поле 'additional_info' поддерживает только одноуровневую вложенность
# - Вложенные структуры в 'additional_info' отбрасываются с записью в лог
# - Для полей emails, phones, avatar поддерживается множественное отображение
mappers:
csv:
external_id: ["external_id", "string"]
full_name: ["full_name", "string"]
first_name: ["first_name", "string"]
middle_name: ["middle_name", "string"]
last_name: ["last_name", "string"]
org: ["org", "string"]
title: ["title", "string"]
avatar: ["avatar_path", "url"]
source: ["source", "string"]
emails: ["emails", ["email", "work"]]
phones: ["phone_numbers", ["phone", "work"]]
http_terminal:
external_id: ["id", "string"]
domain: ["domain", "string"]
additional_info:
login: ["login", "string"]
password: ["password", "string"]
emails: [["iface", ["email", "work"]]]
kk:
first_name: ["firstName", "string"]
last_name: ["lastName", "string"]
middle_name: [["attributes", "middleName"], "string"]
emails: ["email", ["email", "work"]]
full_name: [["attributes", "fullName"], "string"]
external_id: ["id", "string"]
ldap_dn: [["attributes", "LDAP_ENTRY_DN"], "ldap_dn"]
title: [["attributes", "title"], "string"]
avatar: [["attributes", "avatarURL"], "url"]
additional_info:
example: [["attributes", "example"], "string"]
phones:
[
[["attributes", "phoneNumber"], ["phone", "work"]]
]
mysql:
avatar: ["avatar_path", "url"]
emails: ["email", ["email", "work"]]
external_id: ["external_id", "string"]
first_name: ["first_name", "string"]
full_name: ["full_name", "string"]
last_name: ["last_name", "string"]
middle_name: ["middle_name", "string"]
org: ["org", "string"]
phones: ["phone_numbers", ["phone", "work"]]
title: ["title", "string"]
domain: ["domain", "string"]
additional_info:
group: ["contact_group", "string"]
ldap:
common_name: ["ou", "string"]
full_name: ["cn", "string"]
first_name: ["givenName", "string"]
middle_name: ["patronymic", "string"]
last_name: ["sn", "string"]
birthday: ["BirthDate", ["date", "{0D}.{0M}.{YYYY}"]]
title: ["title", "string"]
org: ["o", "string"]
nickname: ["NickName", "string"]
emails:
[
[["mailExt"], "email"],
[["mail"], "email"]
]
phones:
[
[["telephoneNumber"], ["phone", "work"]],
[["TelephoneNumberExt"], ["phone", "work"]],
[["homePhone"], ["phone", "home"]],
]
avatar: [["jpegPhoto", "jpeg"], ["avatarURL", "url"]]
ad:
common_name: ["name", "string"]
full_name: ["cn", "string"]
first_name: ["givenName", "string"]
last_name: ["sn", "string"]
middle_name: ["initials", "string"]
org: ["company", "string"]
emails: ["mail", "email"]
phones:
[
[["telephoneNumber"], ["phone", "work"]],
[["othertelephoneNumber"], ["phone", "work"]],
[["ipPhone"], ["phone", "work"]],
[["homePhone"], ["phone", "home"]],
[["mobile"], ["phone", "cell"]],
[["otherMobile"], ["phone", "cell"]],
]
avatar: [["jpegPhoto", "jpeg"], ["thumbnailPhoto", "url"]]
# ============================
# КЛАССИФИКАЦИЯ ОБЪЕКТОВ
# ============================
kinds:
ad:
contact: ["person"]
group: ["group", "container", "organizationalUnit", "domain"]
ldap:
contact: [["object_name"], "started_at", "uid"]
service_by_class: [["attributes", "objectClass"], "contain", "device"]
samba: [["object_name"], "started_at", "sam"]
eltex: [["object_name"], "started_at", "dc="]
service: [["object_name"], "started_at", "cn="]
group_by_class: [["attributes", "objectClass"], "contain", "groupOfNames"]
group: [["object_name"], "started_at", "ou="]
# ============================
# ОБЩИЕ НАСТРОЙКИ
# ============================
additional_import_settings:
common:
include_incompletely_filled_contacts: false # | true
# Настройка для MongoDB, необходимая для индексации полей для корректной работы полнотекстового поиска
fields_to_index: [
"first_name",
"middle_name",
"last_name",
"common_name",
"org",
"source"
]
full_name_parsing:
enabled: false
pattern: "LFM" # L - last_name, M - middle_name, F - first_name
fallback_enabled: true # если не удалось распарсить - класть всё в fallback_field
fallback_field: "middle_name" # middle_name | first_name | last_name; по умолчанию middle_name
csv:
ignore_data: ["\\N", ""]
ldap:
ignore_data: [""]
object_name: ["object", "string"]
ad:
ignore_data: [""]
object_name: ["object", "string"]
mysql:
ignore_data: [""]
select_group: false
kk:
ignore_data: [""]
http_terminal:
ignore_data: [""]