矩阵协议中的实现细节
3 简介
矩阵协议是一个开源的安全的,分布式通信协议,它是开放的标准,但是有哪些功能?
也可以执行计算,并且跟踪过程。
支持发送SMS消息,支持JSON的传输HTTP。
支持渲染 LaTeX。
显示实时天气状态。
安全特征是端到端加密的。
双重延申验证(Megolm)。
公开审计该过程,并且是分布式的,去中心化MLS。
它支持与处于不同服务器的用户交谈,这一点是 iRC类型的 IM服务器很难做到的。
3.1 使用curl发消息
1, 查版本
curl -XGET ".../_synapse/admin/v1/server_version"
2, 注册
/admin/v1/register
3, 登录操作
curl -XPOST -d '{"username":"joe1", "password":"wordpass", "auth": {"type":"m.login.dummy"}}'
"/_matrix/client/r0/register"
4,检查自己是谁
curl -XGET -d /_synapse/admin/v1/whois/<user_id>
5,查询其他人信息,需要权限
curl --header "Authorization: Bearer syt_bG9yZA_fiOtsfUEQjasdzZdFWoKRk_0VgbEV" -X GET _synapse/admin/v2/users/@userid
6,查询全部用户信息
curl --header "Authorization: Bearer syt_bG9yZA_fiOtsfUEQjasdzZdFWoKRk_0VgbEV" -X GET _synapse/admin/v2/users
7,支持第三方检索
curl --header "Authorization: Bearer syt_bG9yZA_fiOtsfUEQjasdzZdFWoKRk_0VgbEV" -X GET _matrix/client/r0/thirdparty/user
8,搜索用户,联系人,房间
curl POST /_matrix/client/r0/user_directory/search
执行用户搜索自营服务器可以确定搜索哪些用户子集,但是服务器必须至少考虑与请求用户共享房间的用户和居住在公共房间的用户(服务器已知)。
搜索必须考虑本地用户到服务器,并且应该查询远程用户作为搜索的一部分。
搜索是对用户 ID 和显示名称不区分大小写执行的,最好使用基于请求中提供的 Accept-Language 标头确定的排序规则(如果存在)
列出服务器上的公共房间,带有可选的过滤器。
此 API 返回分页响应。房间按加入成员的数量排序,最大的房间在前。
参数:
server string 从哪个服务获取房间列表
limit integer 限制返回的房间 数量
3.2 查询用户 禁用状态 show_banning
Shadow-banning 是一种有用的工具,可用于缓和恶意或严重滥用职权的用户。被禁止的用户收到对其客户端 - 服务器 API 请求的成功响应,但事件不会传播到房间。
这可能是一种有效的工具,因为(希望)用户需要更长的时间才能意识到他们正在接受审核,然后再转到另一个帐户。
此方法禁止用户应该作为最后的手段使用,这可能会导致客户端混淆或破坏行为。
被禁止的用户将不会收到任何通知,通常更适合禁止或踢出滥用行为的用户。被禁止的用户将无法联系服务器上的任何人。
3.3 查询所有房间列表
GET /_synapse/admin/v1/rooms
删除房间管理员 API 允许服务器管理员从服务器中删除房间并阻止这些房间。
关闭一个房间。如果设置了 new_room_user_id,则自动将所有本地用户和房间别名移动到新房间。否则本地用户只会离开房间而没有任何信息。
新房间将使用由 new_room_user_id 参数指定的用户作为房间管理员创建,并将包含一条解释发生了什么的消息。被邀请到新房间的用户默认功率等级为-10,因此无法说话。
如果 block 为 True,它会阻止新加入旧房间。
在删除所有本地用户后,此 API 将从您的数据库中删除旧房间的所有痕迹。如果 purge 为 true(默认值),则在删除所有本地用户后,旧房间的所有痕迹将从您的数据库中删除。
如果您不希望发生这种情况,请将清除设置为 false。根据清除的历史记录数量,对 API 的调用可能需要几分钟或更长时间。
本地服务器只能将本地用户和房间别名移动到新房间。其他服务器上的用户不受影响。
9 账户消息 限制 获取经过身份验证的用户的所有当前活动推送器
> curl --header "Authorization: Bearer syt_bG9yZA_fiOtsfUEQjosZdFWoKRk_0VgbEV" -X GET /_synapse/admin/v1/users/@lord:od.talk/pushers
< {"pushers":[],"total":0}
10 事件推送
3.4 删除 账户 限制
DELETE /_synapse/admin/v1/users/<user_id>/override_ratelimit
3.5 事件 推送
POST /_matrix/push/v1/notify
此端点由 HTTP 推送器调用以通知推送网关有关事件或更新用户未读通知的数量。在前一种情况下,它将包含有关事件的选定信息。
在任何一种情况下,它都可能包含用户拥有的不同类型的未读事件数量的数字计数。计数可以与有关事件的通知一起发送,也可以由它们自己发送
3.6 创建一个查询 指定房间的过滤器,
房间过滤器 RoomFilter
范围 类型 描述
not_rooms [string] 要排除的房间 ID 列表。如果此列表不存在,则不排除任何房间。即使匹配的房间列在“房间”过滤器中,它也会被排除在外 。此过滤器在ephemeral、state、 timeline或account_data 中的过滤器之前应用
rooms [string] 要包含的房间 ID 列表。如果此列表不存在,则包括所有房间。此过滤器在ephemeral、 state、timeline或account_data 中的过滤器之前应用
ephemeral 房间事件过滤器 房间历史记录中未记录的事件,例如打字和收据,包括在房间中。
include_leave 布尔值 包括用户在同步中离开的房间,默认为 false
state 状态过滤器 包含房间的状态事件。
timeline 房间事件过滤器 房间的消息和状态更新事件。
account_data 房间事件过滤器 要包含的房间的每个用户帐户数据。
3.7 消息是事件
事件同步将返回一个 批次号,下一次调用该接口时,可以使用该批次号查询新的消息
/sync
查询新的批次消息
/sync/s41_4165_0_7_28_1_2_17_1
批次号根据服务器位置,房间号,用户信息综合计算而得。
- 房间事件类型
m.room.canonical_alias
state_key: 空串
此事件用于通知房间哪个别名应被视为规范别名,以及哪些其他别名指向房间。
这可以用于显示目的或作为向用户建议使用哪个别名来做广告和访问房间。
m.room.create
state_key: 空串
此事件为 room 房间的第一个事件,无法被修改。作为所有其他事件的根源。
m.room.join_rules
state_key: 空串
-
其他事件
# 消息类型 Member = "m.room.member" Create = "m.room.create" Tombstone = "m.room.tombstone" JoinRules = "m.room.join_rules" PowerLevels = "m.room.power_levels" Aliases = "m.room.aliases" Redaction = "m.room.redaction" ThirdPartyInvite = "m.room.third_party_invite" RelatedGroups = "m.room.related_groups" RoomHistoryVisibility = "m.room.history_visibility" CanonicalAlias = "m.room.canonical_alias" Encrypted = "m.room.encrypted" RoomAvatar = "m.room.avatar" RoomEncryption = "m.room.encryption" GuestAccess = "m.room.guest_access" # These are used for validation Message = "m.room.message" Topic = "m.room.topic" Name = "m.room.name" ServerACL = "m.room.server_acl" Pinned = "m.room.pinned_events" Retention = "m.room.retention" Dummy = "org.matrix.dummy_event" SpaceChild = "m.space.child" SpaceParent = "m.space.parent" MSC2716_INSERTION = "org.matrix.msc2716.insertion" MSC2716_CHUNK = "org.matrix.msc2716.chunk" MSC2716_MARKER = "org.matrix.msc2716.marker"
-
ToDeviceEventTypes
RoomKeyRequest = "m.room_key_request"
-
DeviceKeyAlgorithms
设备加密算法 ED25519 = "ed25519" CURVE25519 = "curve25519" SIGNED_CURVE25519 = "signed_curve25519"
-
EduTypes
Presence = "m.presence"
-
RejectedReason
AUTH_ERROR = "auth_error"
-
RoomCreationPreset
PRIVATE_CHAT = "private_chat" PUBLIC_CHAT = "public_chat" TRUSTED_PRIVATE_CHAT = "trusted_private_chat"
-
ThirdPartyEntityKind
USER = "user" LOCATION = "location" ServerNoticeMsgType = "m.server_notice" ServerNoticeLimitReached = "m.server_notice.usage_limit_reached"
4结
未来矩阵服务可以在手机运行后,当两个人接近时无需相互相信,但是也可以相互交谈。
在这小节,我们整体了解此协议的实现方式。 并且了解分布式实时数据库的功能。
- 点赞
- 收藏
- 关注作者
评论(0)