Улучшения корпоративного EJabberd-сервера

Предыдущая статья обязательна к прочтению.

Итак, на сегодняшний момент реализовано следующее:

  • Выпущен сертификат проверки подлинности SSL
  • Реализована передача файлов;
  • Начала разработка бота

В ближайшей перспективе – сохранение логов всех бесед в архив и написание простых ботов, помогающих в администрировании.

Выпуск сертификата

Вообще, сертификаты проще всего купить/заказать на свой домен. А если планируется использовать множество сервисов и поддоменов, то можно взять ssl сертификат на поддомены, для фирмы этот ценник вполне подъёмный.

Лично я использовал для тестовых целей, поэтому получил сертификат в LetsEncrypt – набирающем популярность.

Объединил полученные сертификаты в один файл:

# cat privkey1.pem cert1.pem chain1.pem > ejabberd.pem

Прописал его в конфиге ejabberd.yml

Передача файлов

Для передачи первым делом откроем на файрволле необходимый порт – у меня это 5444.

Соответственно, будет два правила – первое разрешает INPUT на этот порт (так как у меня идёт проброс портов в локальную сеть) для шлюза NAT, а второе – после NAT разрешает FORWARD трафик на этот же порт.

А также раскомментировал секцию в конфигурационном файле:

-
port: 5444
module: ejabberd_http
tls: true
certfile: "/opt/ejabberd-18.06/certs/ejabberd.pem"
request_handlers:
"upload": mod_http_upload
protocol_options: 'TLS_OPTIONS'
dhfile: 'DH_FILE'
ciphers: 'TLS_CIPHERS'

И внёс изменения в настройки модуля:

mod_http_upload:
docroot: "/opt/ejabberd/upload"
put_url: "https://@HOST@:5444/upload"
access: local
max_size: 50000000
thumbnail: false
file_mode: "0644"
dir_mode: "0744"

После перезапуска сервиса появилась возможность передавать файлы (изображения) даже с превьюшками, как в WhatsApp, что вполне уже соответствует необходимым требованиям. В настройках модуля mod_http_upload я указал максимальный размер файла для загрузки – 50 мегабайт, а также каталог для сохранения файлов.

Создание бота

Что касается создания бота – есть готовые исходники на PHP (xmpphp), меня вполне устраивают. Сейчас бот проходит испытания. Вообще принцип какой – протокол XMPP достаточно хорошо документирован, чем-то напоминает XML. Скрипт висит на виртуалке, для пользователей он представляет собой ещё один контакт (я назвал его bot – незамысловато довольно). И на каждое принятое сообщение у нас вызывается отдельная функция в зависимости от полученного текста.

То есть можно реализовать некоторое подобие текстового меню, например в ответ на команду ? или /help (или -help) вывести список доступных команд, а в ответ на соответствующую команду выполнять другие действия и возвращать результат отправителю.

То есть плясать нужно всё-таки от требуемых функций, потом уже писать код. Встречал я кстати реализации на Python, но в нём довольно таки не силён, а на PHP мало-мальски что-то могу сделать.


Like this post? Please share to your friends:

Comments:

Leave a Reply