为Tchap定制的房间访问规则
项目描述
房间访问规则
此模块实现了对 im.vector.room.access_rules
状态事件的处理。下面描述了此事件的规范。
im.vector.room.access_rules
基于所选预设限制对房间的访问。主体
{
"rule": "<rule>"
}
<rule>
是 restricted
、unrestricted
或 direct
之一。
不同预设的实现位于 synapse.third_party_rules.access_rules
模块中。
restricted
预设
非直接房间(即未使用 "is_direct": true
创建的房间)的默认预设。
禁止对属于模块配置中提供的黑名单服务器(domains_forbidden_when_restricted
)的用户进行任何邀请和成员更新。如果邀请是 3PID 邀请,则查询配置的身份服务器的自定义 /_matrix/identity/api/v1/info
端点,以检查被邀请的电子邮件地址是否属于黑名单服务器,在这种情况下,邀请将被拒绝。
unrestricted
预设
不对谁可以加入房间进行任何限制。
禁止任何 m.room.power_levels
事件,该事件会:
- 将
users_default
权力级别更改为非 0 值,或 - 将来自黑名单服务器(有关
restricted
预设的详细信息)的用户的权力级别更改为非默认值
direct
预设
直接房间(即使用 "is_direct": true
创建的房间)的默认预设。
通过为每种类型的 m.room.member
或 m.room.third_party_invite
事件运行以下算法,只允许房间中有两个成员
-
从房间状态中检索成员资格列表和 3PID 邀请令牌,这在实践中意味着检索房间状态中每个
m.room.member
或m.room.third_party_invite
事件的状态键(忽略内容为空的 3PID 邀请事件) -
如果事件是
m.room.third_party_invite
类型,并且房间状态中已有相同类型的事件,如果新事件的状态键不匹配现有事件之一的状态键,则拒绝新事件。 -
否则,如果房间中已有两个成员
2.1. 如果事件是 3PID 邀请,则拒绝它
2.2. 如果事件是成员资格更新,如果目标不是房间的当前成员之一,则拒绝它
-
else,如果房间状态中有一个成员资格事件和一个 3PID 邀请
3.1. 如果事件是成员资格事件,如果它不是从房间状态中的 3PID 邀请交换的邀请,则拒绝它
3.2. 否则,拒绝事件
-
else,接受事件
还禁止向房间发送类型为 m.room.name
、m.room.avatar_url
或 m.room.topic
的事件。
与 m.room.join_rules
的交互
当房间的预设不是 restricted
时,禁止将房间的加入规则更改为 public
。这是为了确保黑名单服务器(有关 restricted
预设的详细信息)的用户除非被邀请,否则不能加入房间。
安装
待办事项
配置
将以下内容添加到您的 Synapse 配置中
modules:
- module: room_access_rules.RoomAccessRules
config:
# List of domains (server names) that can't be invited to rooms if the
# "restricted" rule is set. Defaults to an empty list.
domains_forbidden_when_restricted: []
# Identity server to use when checking the homeserver an email address belongs to
# using the /info endpoint. Required.
id_server: "vector.im"
开发和测试
此存储库使用 tox
运行测试。
测试
此存储库使用 unittest
运行位于 tests
目录中的测试。可以使用 tox -e tests
运行它们。
发布版本
git tag -s vX.Y
python3 setup.py sdist
twine upload dist/synapse-room-access-rules-X.Y.tar.gz
git push origin vX.Y
项目详情
下载文件
下载适用于您平台的应用程序。如果您不确定选择哪一个,请了解更多关于 安装包 的信息。