Parley:联邦化、去中心化的聊天系统,兼容简单的IRC
Parley是一个不设中心的聊天网络,采用联邦化和去中心化的设计。每个人(或团队)运行一个小型实例,服务于他们自己的域名。实例通过DNS和众所周知的身份文档互相发现,使用HTTPS交换签名消息,并向普通的IRC客户端(如irssi、WeeChat或Textual)展示整个联邦网络,无需插件。身份看起来像电子邮件:alice@foo.com在foo.com上运行,bob@bar.com在bar.com上运行。Bob输入/msg alice@foo.com hi,它就能直接工作,即使这两个实例之前从未听说过对方。状态:可行的概念验证。这展示了端到端的设计并运行一个真实实例,但尚未经过强化。参见限制。它与您已有的客户端兼容。两个实例(foo.com和bar.com),两个标准的irssi会话。Alice连接到她的实例;Bob连接到他的实例:Bob使用/msg alice@foo.com打开一个查询,两个实例立刻进行联邦。Alice将Bob视为bar.com上的bob;Bob将Alice视为foo.com上的alice:两人加入一个名为#lobby的全球频道,该频道在他们的实例上都被复制:它的功能是在前端使用普通的IRC。可以与任何IRC客户端连接。使用PASS或SASL PLAIN登录,要求使用密码或IRC令牌。对于希望使用的客户端,提供IRCv3服务器时间、消息标签、回显消息、多前缀和设置名称等功能,同时TAGMSG在联邦传播客户端专有标签,如输入指示符。消息本身上的标签保留,因此+reply在从历史记录中恢复时仍然是回复,draft/multiline使粘贴的段落视为一条消息,而不是八条消息。滚动回溯功能跟随您的视图,而不是您的客户端。CHATHISTORY在频道和私信之间分页,加入频道时会重播您未查看的内容,draft/read-marker则记录您已阅读到的内容,因此在手机上标记频道为已读会在桌面上清除,客户端在加入时会被告知在哪绘制分界线。您可以在运行时管理的帐户。帐户存储在实例的数据目录中,而不是配置文件中。可以通过parleyctl、管理页面、HTTP API创建它们,或使用单点登录让人们到达:任何OpenID Connect提供商,或来自反向代理的身份头。人们在设置页面上为他们的客户端生成IRC令牌;机器人是具有机器人角色的帐户。通过DNS + WKID发现。_parley._tcp.<域名> SRV指向实例;https://<主机>/.well-known/parley/instance.json发布其ed25519公钥和收件箱;/.well-known/parley/<用户>.json确认用户存在。这与Salty IM发现用户的方式相似。签名HTTP联邦。每个事件都是一个JSON文档,POST到对等方的/inbox,带有分离的ed25519签名在标题中。接收方根据他们自己发现的密钥进行验证。联邦是开放的:任何签名经过验证的实例都可以与您通信。自动对等。当您在新域上发送消息时,两个实例会自动连接。连接的实例会交换他们知道的对等方(传言),这样不需要配置就形成了网格。两种类型的频道。#dev是全球的,在每个连接的实例上复制并包含其成员。没有人拥有它,因此它没有主题,也没有运营者。¬es是局部的:它从未离开实例,对对等方不可见,并且是唯一存在主题的地方。没有频道所有权的管理。没有人可以被踢出没有人拥有的频道,因此/ban变成了按掩码的黑名单:/ban quark@example.com针对一个人,/ban *!*@example.com针对整个实例。您的覆盖您的帐户;管理员的覆盖实例。对等关系本身由parleyctl peers控制。地址映射到普通的IRC身份。用户的昵称是简单的本地部分,而他们的实例是主机,因此alice看起来像alice!alice@foo.com——前缀、NAMES、WHO和WHOIS都一致,并且您在NAMES中看到的昵称是可以消息的对象。/whois alice@foo.com查询她的实例的WKID文档。历史可以在停机后存活,并且可以搜索。每个实例使用SQLite保存其频道历史,并具有全文索引(parleyctl search),并在/channels/<名称>/feed提供。当对等方在停机后恢复时,它会拉取她错过的内容,客户端在JOIN时会重播最近的历史记录。快速开始(在一台机器上运行两个实例,无需DNS)然后,在两个终端中:-insecure和-resolve仅存在于本地开发中。在生产中,每个实例都有一个真实域、一个TLS证书、一个SRV记录,并通过DNS发现对等方。真实的东西:DNS + TLS演示 demo/ 启动CoreDNS(对foo.com和bar.com的权威,带有_parley._tcp SRV记录),本地演示CA,以及在Docker中的两个实例,然后运行脚本化的IRC会话并打印证据:请参见demo/README.md。运行您自己的实例容器镜像是prologic/parley,docker-compose.example.yml是一个起点。一个为example.com的实例,可以通过chat.example.com访问,需要:
本站免费、广告极少。如果觉得有帮助,可以请我们喝杯咖啡 —— 任何金额都对持续运营有实际帮助。
☕请我喝杯咖啡