Как скрыть группу пользователей от других в Ejabberd или MongooseIM? - PullRequest
0 голосов
/ 27 марта 2019

Допустим, у меня есть 10000 имен пользователей в базе данных 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 Ответ

1 голос
/ 27 марта 2019

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

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

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

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

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

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

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

Правильно, вы можете иметь все vhosts в одной базе данных, если вы настроите ejabberd таким образом и будете использовать файл apropiate * .sql при созданииting the database:

new_sql_schema: true

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

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

$ ejabberdctl reload_config
...