Техзадание для галереи через Jabber

Материал из Linux Wiki
Перейти к навигацииПерейти к поиску

Существует проект Jabber Disk от чехов, код старый (уже нашел), но работает и на нескольких серверах встречается. От них же есть и проект галереи - аналогичный бот, только из полученных файлов строится галерея, доступная по адресу album.jabbim.cz. Если для диска код в итоге нашел, то галерея - в единственном экземпляре и код где-то потерян, а может никогда и не публиковался. Хотя идея весьма хорошая; если диск с некоторыми оговорками для быстрого обмена файлами можно заменить обычным HTTP Fileupload и на сейчас он не особо актуален (хотя и удобен - особенно если доработать и сделать в том числе обработку файлов, переданных через HTTP Fileupload), то аналогов галереи через джаббер нет. Причем, реализовано оно все на базе того же кода, что и для диска - когда дискаверишь disk.jabbim.cz, то только у них доступно для добавления 3 бота в этом поддомене; у остальных только 2 или 1. Собственно, то же следует и из справки для бота галереи:

Для некоторых команд нужен путь, который может быть указан несколькими способами:
- //пользователь@сервер%ветка/каталог/файл - Полный путь к файлу, этот синтаксис используется для доступа к общедоступным файлам других пользователей или файлам на других ветках. Если в пути отсутствует пользователь@сервер% или %ветка, используется текущий пользователь или ветка. Список доступных веток: Общедоступный, Частный, Альбом.

Вот "ветки" - это и есть "рабочие каталоги" различных вариаций бота. С учетом того, что в галерее картинки отображаются с некоторой задержкой - галерея вообще может быть отдельной сущностью, которая просто периодически сканирует рабочий каталог бота album@ и выводит найденные картинки.


Так или иначе, если создавать проект с нуля, то каким он видится:

  • Думаю, нет смысла реализовывать галерею с нуля, если есть, например, готовые развивающиеся проекты - тот же, Piwigo. Всего-то надо реализовать бота, который будет выгружать туда файлы. API там есть для всего.
  • Бот должен уметь работать как с HTTP Fileupload, так и с out-of-band bytestream. Т.е., по первому пункту - фактически, передача любой ссылки с изображением приводит к загрузке ботом этого изображения в галерею. Ну и более привычный вариант - OOB bytestream с возможностью указать в конфиге прокси (а надо ли это, если бот не передает файлы, а только принимает?). Для обоих случаев стоит сделать проверку получаемого файла - является ли он картинкой - с дальнейшей загрузкой.
  • Взаимодействие с Piwigo (в зависимости от трудоемкости реализации):
    • Лайт-версия: бот не умеет рулить пользователями. Он выгружает контент только в указанную учетку и все. Никаких регистраций или чего-то такого.
    • Нормальная версия: боту даются права администратора в Piwigo. По команде с нового JID'а (т.е., когда пользователь добавлен, авторизован и скомандовал, например, REGISTER) заводится учетная запись пользователя с логином = JID. Пароль генерируется и возвращается пользователю. Эту же (либо, возможно, другую - пока не вижу причин не использовать ту же) команду можно использовать для сброса пароля. Т.е., по REGISTER проверяем наличие учетки, если нет - создаем и в любом случае (плохо ли это?) задаем новый пароль, который шлем пользователю. Соответственно, можно добавить UNREGISTER с подтверждением, которая будет удалять пользователя и его альбом.
  • Основные команды бота можно скопировать с чешского - управление галереей через команды. Список штатных:
Доступные команды: get, cd, help, intro, hash, rm, du, mkdir, lang, pwd, ls, link, send, mv
В принципе, можно обрезать функциональность по пересылке файлов обратно - можно просто возвращать ссылку на полноразмерный файл в галерее, а дальше уже качать его любым удобным способом (через браузер). Можно убрать отправку файла кому-то (send) и/или заменить отправку ссылки.
В свою очередь, можно добавить управление тегами через бота. Что-нибудь в стиле
tag #1 *природа *поездка *лес
+ проработать вариант на случай, если там уже есть теги - т.е., или только добавлять новые - но это так себе вариант, хочется полноценно управлять - или сделать что-нибудь в стиле tag add #1 *кошка / tag del #1 *собака /tag del all #1


Просто мысли

Технически на своем сервере вполне можно организовать бота (скорее - костыль) для загрузки фото в Piwigo. Делаем контакт, ему соответствует какой-то каталог для HTTP Fileupload на сервере (какой-нибудь /var/lib/ejabberd/upload/user@server/). По факту появления там файлов inotify аплоадит их каким-то образом в галерею. Но на деле это такооой костыль... Со стороны клиента надо аплоадить все через этот аккаунт - нельзя просто добавить себе "бота" в ростер и все. Со стороны сервера - вот это вот все, что выше описано.