Comments 4
А что будет если пользователь попадает в несколько групп?
Как бы вы сделали с помощью TACS ситуацию, когда некоторой группе пользователей нужно добавить дополнительный ящик?
Если пользователь состоит в нескольких группах ldap, то будет применен первая совпавшая группа из списка конфигурации, о чем сказано в ReadMe, help и коде.
Если пользователю потребуется несколько ящиков(а у нас такая ситуация так же имеется) - создаётся шаблон конфигурации thunderbird, описывающий 2 ящика, вместо одного.
Создаётся группа для двух ящиков и пользователи, которым это надо- перемещаются в неё
Спасибо. Но фактически у нас сложнее, есть пользователи кому нужно подключить очень разные наборы ящиков. И шаблонов получится по сути как половина пользователей.
Проще уж индивидуальные шаблоны сделать.
Мелькнула идея, если в go-templates передать поле memberOf из ldap, то наверное на уровне шаблона можно как-то проанализировать с помощью {{ if }}. Не пробовали такое?
Если упрощать, то tacs в основном используется для выгрузки данных откуда-то и подстановки их куда-то (я изучал HELM, когда решил сделать TACS). Изначально предполагалось, что для каждого выгружаемого параметра требуется отдельное LDAP поле (ориентируясь на LDAP и массовость).
Специфичных функций для анализа и обработки в шаблонизаторе нет, но они и не нужны, ведь у нас есть JavaScript движок из самого Thunderbird (а сама конфигурация является js-скриптом).
У нас используется максимум 2 ящика с разных серверов, а значит в шаблоне у нас будет проверка:
{{ if .twoEmail }} /*добавляем второй ящик со специфичными параметрами*/ {{ end }}
Рассмотрим ситуацию, что ящиков у нас может быть переменное число, а доменов и подавно, при этом мы не ходим захламлять множество полей LDAP по одному значению.
Вспоминаем, что у нас есть полноценный JS, а потому пишем функции для настройки ящика для каждого типа серверов, которыми будем пользоваться:
{{ define "libs"}}
function server1(email, name, etc){
pref(anything1,name);
pref(anything2,email);
pref(anything3,etc);
}
function server2(email, name, etc){
pref(anything1,name);
pref(anything2,email);
pref(anything3,etc);
}
{{end}}
В LDAP выделяем поле с текстом и в формате JSON прописываем требуемые ящики и сервера:
[{"user1@example.com":"server1"},{"user2@example.ru":"server2"}]
В шаблоне, присваиваем эту строку в переменную (я так уже делал), а дальше просто анализируем с помощью JS и вызываем соответствующие функции:
{{define "base"}}
// [{"email":"user1@example.com","server":"server1"},{"email":"user2@example.ru","server":"server2"}]
var list = {{.mailList}};
list.forEach((elem)=>{
switch(elem.server){
case "server1":
server1(elem.email,name,etc);
break;
case "server2":
server2(elem.email,name,etc);
break;
default: console.log("anything");
}
})
{{end}}
Исходя из этого мы получим неограниченное число ящиков для каждого домена с индивидуальными параметрами.
Прошу обратить внимание, что я не тестировал описанное выше и моё решение основывается на знании того, что так в принципе можно сделать, а потому в процессе реализации могут потребоваться незначительные корректировки.
Thunderbird Auto Config Server (TACS)