Как скрыть группу пользователей от других в Ejabberd или MongooseIM?

#xmpp #ejabberd #privacy #mongoose-im

#xmpp #ejabberd #конфиденциальность #mongoose-im

Вопрос:

Допустим, у меня есть 10 000 имен пользователей в базе данных RDBMS, которая будет использовать службу чата XMPP, такую как Ejabberd или MongooseIM, которые я введу вручную в базу данных. Теперь каждые 1000 имен пользователей из вышеупомянутых 10000 имеют фиксированный префикс в своих именах пользователей JID, например:

1-1000 имен пользователей начинаются с aa__ (Пример — aa10001, aa10002, …)

имена пользователей 1001-2000 начинаются с bb__ (Пример — bb10001, bb10002, …)

2000-3000 имен пользователей начинаются с cc__ (пример — cc10001, cc10002, …)

и так далее… всего 10 имен пользователей с разными префиксами

Теперь я просто хочу, чтобы эти 10 разных пар не должны знать другие пары имен пользователей с префиксами и не должны иметь возможности отправлять какой-либо тип строки (например, сообщение, присутствие, IQ) другой паре (с другим префиксом)

Возможности:

  1. Если бы я мог использовать какое-нибудь регулярное выражение в политике блокировки, тогда это было бы здорово вместо блокировки отдельного пользователя.

  2. Я знаю, вы можете предложить использовать другой виртуальный хост для каждой пары. Но управлять таким количеством виртуальных хостов может быть сложно, потому что в приведенном выше примере 10K — это всего лишь небольшой пример общей картины.

Пожалуйста, дайте мне знать, если вопрос вам непонятен?

Комментарии:

1. Может быть, если я смогу использовать Virtual host каким-то образом, которым легко управлять (часто добавляя новые пары), не добавляя новую базу данных для каждого, то это будет лучшим решением

2. Могу ли я динамически добавлять виртуальный хост в конфигурацию без остановки сервера?

3. Ограничены ли вы использованием Ejabberd или MongooseIM? XMPP-сервер Tigase ( tigase.net ) может обрабатывать высокие нагрузки и предлагает управление VHost без перезапуска ( Добавление доменов (VHosts) ), которые могут использоваться с REST API и ACL ( списки контроля доступа в Tigase ) опция LOCAL — ограничение пользователей на общение внутри group / VHost

4. Спасибо, @Wojtek, но мы потратили на них достаточно времени, и теперь их сложно переключить

5. Конечно — просто обмен информацией 🙂

Ответ №1:

Я просто хочу, чтобы эти 10 разных пар не должны знать другие пары имен пользователей с префиксами и не должны иметь возможности отправлять какой-либо тип строки (например, сообщение, присутствие, IQ) другой паре (с другим префиксом)

Прежде всего, поиграйте с mod_filter. Глядя на его примеры конфигураций, вероятно, вы сможете добиться желаемого с его помощью:https://github.com/processone/ejabberd-contrib/tree/master/mod_filter

Возможно, вы можете определить ACL на основе шаблонов имен пользователей («aa *» или что-то в этом роде), и таким образом вы сможете разместить всех пользователей на одном виртуальном хостинге.

В случае, если единственное решение требует наличия виртуального хостинга для каждой группы пользователей, некоторые идеи:

Теперь каждые 1000 имен пользователей из вышеупомянутых 10000 имеют фиксированный префикс в своих именах пользователей JID, например:

Как вы упомянули, вы можете определить виртуальный хостинг в ejabberd для каждой группы пользователей: 10001@aa.example.com … Или для того, чтобы не изменять существующие имена пользователей: aa10001@aa.example.com …

Может быть, если я смогу использовать Virtual host каким-то образом, которым легко управлять (часто добавляя новые пары), не добавляя новую базу данных для каждого, то это будет лучшим решением

Правильно, вы можете иметь все виртуальные хосты в одной базе данных, если вы настроите ejabberd подобным образом и используете соответствующий файл *.sql при создании базы данных:

 new_sql_schema: true
  

Могу ли я динамически добавлять виртуальный хост в конфигурацию без остановки сервера?

Да, это должно сработать (это недавняя функция). Отредактируйте ejabberd.yml по своему усмотрению и перезагрузите его с помощью:

 $ ejabberdctl reload_config
  

Комментарии:

1. Какое решение вы рекомендуете, если количество групп является переменным и находится в диапазоне 10-20 Кб и имеет более 100 подобных групп и увеличивается со временем?

2. Я думаю, вам следует использовать ejabberd mod_filter api для вашего варианта использования.