jarn.xmpp 的核心包
项目描述
介绍
jarn.xmpp.core是一个 Plone 附加组件,提供以下基于 XMPP 服务的功能:
plone 用户帐户与 XMPP 帐户和身份验证的集成。
基于 XMPP PubSub 的类似于 twitter/yammer 的微博环境。
消息传递。
它是旨在为 Plone 提供 XMPP 服务的软件包套件的一部分。另外两个包是
jarn.xmpp.twisted,为twisted 提供XMPP 特定的协议实现。
jarn.xmpp.collaboration提供了一个 XMPP 协议来进行实时协作编辑以及针对 Plone 的实现。
安装
在设置软件包之前,您需要有一个工作的 XMPP 服务器并访问服务器上的管理帐户。该软件包仅使用推荐的 ejabberd 2.1.5 及更高版本进行了测试。在任何情况下,您要使用的服务器都需要支持以下 XMPP 扩展:
XEP-0071 XHTML-IM。
XEP-0054 vCard-temp。
XEP-0144名册项目交换。
XEP-0060发布-订阅。
XEP-0248 PubSub 收集节点。
XEP-0133服务管理。
XEP-0124同步 HTTP 上的双向流 (BOSH)
XEP-0206 XMPP over BOSH
XEP-0049私有 XML 存储
扩建
可以在jarn.xmpp.buildout中找到可以用作起点的示例构建。
设置 ejabberd (>=2.1.5)
自动配置
使用jarn.xmpp.buildout中提供的配方(在这种情况下,您需要安装 erlang)或下载ejabberd安装程序。
为方便起见,可以通过jarn.xmpp.buildout的ejabberd.cfg部分生成 ejabberd 的最小配置。您将需要复制模板目录并相应地修改配方配置:
[ejabberd.cfg] recipe = collective.recipe.template input = templates/ejabberd.cfg.in output = ${buildout:directory}/etc/ejabberd.cfg xmppdomain = localhost admin_userid = admin collaboration_allowed_subnet = 0,0,0,0 collaboration_port = 5347 component_password = secret
其中xmppdomain是在 XMPP 服务器上运行的域(或虚拟主机),而admin_userid是 Plone 将用于与服务器交互的管理员帐户的 ID。其余选项由jarn.xmpp.collaboration用于连接到 XMPP 服务器的协作编辑组件。在这里,collaboration_allowed_subnet指定 XMPP 服务器将从哪些 IP 接受连接,并且应该与您的 Plone 实例将使用的 IP 匹配。将其保留为0,0,0,0将允许所有 IP,127,0,0,1将仅允许localhost。最后是collaboration_port是协作组件要连接的端口,component_password是组件和 XMPP 服务器之间的共享密码。
手动配置
如果你已经运行了 XMPP 服务器,这里有一些关于如何设置它的提示:
我们假设您的 xmpp 域是localhost。应该存在一个管理员帐户admin@localhost。此外,如果您打算在任何jarn.xmpp.*包中运行一些测试,如果您使用其他域进行生产,则需要在localhost上运行一个额外的 XMPP 节点。如果您对此不感兴趣,可以安全地删除对localhost的任何引用。
确保您已启用http_bind模块,因为这是 javascript 客户端将用于连接的模块。您的 ejabberd.cfg 中应该有类似的内容:
{5280, ejabberd_http, [ http_bind, web_admin ]}因为 ejabberd 对 XEP-0060 的实现不是标准的,所以必须使用 ejabberd 的dag模块。因此,请确保您的 pubsub 模块配置正确:
{mod_pubsub, [ {access_createnode, pubsub_createnode}, {ignore_pep_from_offline, true}, {last_item_cache, false}, {nodetree, "dag"}, {plugins, ["dag", "flat", "hometree", "pep"]}, {max_items_node, 1000} ]},为了测试和运行自定义 XMPP 组件(例如jarn.xmpp.collaboration提供的协作编辑组件),您需要允许它们连接。这意味着您应该具有类似于此配置的内容:
{5347, ejabberd_service, [ {access, all}, {shaper_rule, fast}, {ip, {127, 0, 0, 1}}, {hosts, ["collaboration.localhost"], [{password, "secret"}] } ]},
其余的标准选项应该没问题。
管理员帐户
如果您在安装过程中没有这样做,您可能需要手动创建管理员帐户。在 ejabberd 文件夹中执行:
./bin/ejabberdctl register admin localhost your_password
通过登录到管理界面(通常是http://localhost:5280/admin)来测试您是否可以访问您的 ejabberd。您还应该能够在http://localhost:5280/http-bind访问http-bind界面。
设置前端代理
在客户端,每个经过身份验证的用户都将通过 HTTP 模拟双向流连接到您的 jabber 服务器。为此,您需要在 Plone 前面有一个代理,它将 XMPP 流重定向到您的 XMPP 服务器。没有使用 Flash 插件的劣质解决方案是可能的,但这不会得到支持。
因此,假设您在域localhost的端口8080上将nginx作为代理运行,Zope 在8081上侦听,存在一个具有 id Plone的 Plone 站点,并且您的 ejabberd为端口5280配置了http_bind,您的nginx配置将如下所示:
http {
server {
listen 8080;
server_name localhost;
location ~ ^/http-bind/ {
proxy_pass http://localhost:5280;
}
location / {
proxy_pass http://localhost:8081/VirtualHostBase/http/localhost:8080/Plone/VirtualHostRoot/;
}
}
}
设置你的克隆实例
您的实例需要保持与 XMPP 服务器管理员帐户的连接。这是通过Twisted完成的,您需要在它们中的每一个上运行一个 Twisted reactor。为此,请将其包含在构建的实例部分中:
zcml-additional =
<configure xmlns="http://namespaces.zope.org/zope">
<include package="jarn.xmpp.twisted" file="reactor.zcml" />
</configure>
同样,它将帮助您查看jarn.xmpp.buildout中提供的示例构建。
设置新的 Plone 站点
启动 ejabberd(如果您使用配方构建 ejabberd,bin/ejabberd将完成这项工作)。
启动 Nginx 前端。bin/前端启动
启动您的 zope 实例。
直接在http://localhost:8081/manage访问 Zope并使用jarn.xmpp.core(或jarn.xmpp.collaboration,如果您还想安装该软件包)创建一个新的 Plone 站点。
转到 Plone 控制面板,进入注册表设置。编辑 jarn.xmpp.* 设置以反映您的安装、密码等。
重新启动您的 Plone 实例。
在第一次请求时,管理员将登录到他的帐户。您应该在日志中看到发生的事情,如果有任何错误,您的安装可能有问题。
设置用户和发布订阅节点。您可以通过像http://localhost:8080/@@setup -xmpp 一样调用@@setup-xmpp来做到这一点。该表单不会报告任何错误,因为一切都将异步发生,但您将在控制台上获得结果/失败。
如果您打算在现有站点上使用它,您只需在确保 XMPP 管理员已连接后执行最后一步。
确保一切正常;)
这是一个复杂的基础架构,因此有时很难知道哪里出了问题。不要绝望,这里有一些事情可以尝试:
确保您的 ejabberd 正在运行。以管理员用户身份连接到它的普通客户端。
验证在 ejabberd 上正确设置了 http-binding。访问http://localhost:5280/http-bind应该告诉你它正在工作。
验证 XMPP 请求是否可以正确通过您的代理。访问http://localhost:8080/http-bind/应该会得到与上面相同的结果。
当您在前台启动 Zope 实例时,您可以验证 Twisted reactor 运行良好:
2011-09-01 14:37:38 INFO jarn.xmpp.twisted Starting Twisted reactor... 2011-09-01 14:37:38 INFO jarn.xmpp.twisted Twisted reactor started 2011-09-01 14:37:38 INFO Zope Ready to handle requests
在对站点的第一次请求之后,您还应该在日志中看到:
2011-09-01 14:45:48 INFO jarn.xmpp.core XMPP admin client has authenticated succesfully.
运行@@setup-xmpp后,使用用户登录到 Plone 站点还应该使用 XMPP 服务器对他进行身份验证。这在日志中通过以下方式指示:
2011-09-01 14:45:50 INFO jarn.xmpp.core Pre-binded ggozad@localhost/auto-QravOoyEeE
实验
用法
添加一些用户。
以其中之一的身份登录,并以其他浏览器的身份登录。使用前端访问该站点,如果您使用上述设置,则应为http://localhost:8080。
所有操作都通过右上角的视图执行:在线用户将显示当前登录的用户。单击它将为您提供用户列表。您可以直接向他们发送消息或查看他们的个人信息。
尝试在您的提要中发布条目。链接将自动转换。一旦您提交其他登录用户将收到实时通知。使用支持地理定位的最新浏览器还可以让您在发布时分享您的位置。
尝试对提要帖子发表评论。
通过单击“关注”用户操作,您可以选择要关注的用户,或全部关注。
您可以通过单击视图上的站点提要来查看所有帖子。
安全
jarn.xmpp.twisted包括根据XEP-0206通过 BOSH 验证客户端的实现。这实际上意味着 javascript 客户端永远不需要知道 XMPP 用户的密码。相反,用户直接在 XMPP 服务器和 Plone 实例之间进行身份验证。交换一对秘密令牌,有效期很短(约 2 分钟)。提供给 javascript 客户端的正是这一对,而不是密码。
创建用户时(通过 Plone 界面或通过为现有用户运行@@setup-xmpp),会生成随机密码并在内部存储在持久实用程序中。
如果您不需要访问 Plone 实例之外的 XMPP 帐户,您还可以将整个 XMPP 服务隐藏在防火墙后面,并且只允许从 Plone 实例连接到它。这与 HTTPS 相结合对于我们中间的偏执狂来说应该足够了。
测试
一些包含的测试是功能测试,需要在localhost上运行 XMPP 服务器以及在此服务器上使用 JID admin@localhost和密码admin设置管理员帐户。如果你想运行那些你必须在你的测试运行器上指定一个级别2,即
./bin/test -a 2 -s jarn.xmpp.core
学分
UI 由 Denys Mishunov 设计和实现。
大部分工作是利用Jarn AS员工可用于开发开源项目的 10% 时间完成的。
变更日志
0.34 - 2011-12-9
修复谷歌地图初始化。[格扎德]
0.33 - 2011-12-07
IE9 兼容性。[格扎德]
用于 BOSH 身份验证的无缓存。[格扎德]
0.32 - 2011-11-30
UI/UX 改进。[米舒诺夫]
修复了一个无标题的 portlet 错误。[格扎德]
修复了一个错误,该错误将允许存储从每个节点仅加载 10 个项目。[格扎德]
修复了 json 视图以正确设置 json 标头。[格扎德]
0.31 - 2011-11-28
版本修复。[格扎德]
0.3 - 2011-11-28
支持 pubsub 节点上的一级线程。[格扎德]
允许用户订阅单个节点。[格扎德]
异步加载 PubSub 项目。[格扎德]
在 XMPP 上实现 XEP-0049 私有存储。[格扎德]
实施 vCard 2.0 支持。允许将所有用户元数据/头像存储在 XMPP 服务器上,避免所有对 Plone 的调用。[格扎德]
修复 Safari 浏览器确实行为不端并有时崩溃的罕见情况。将补丁恢复到 Strophe 以允许 WebKit 浏览器进行同步而不是异步调用以在页面卸载时断开连接。[格扎德]
造型![米舒诺夫]
更新德语翻译 [potzenheimer]
更新法语翻译 [toutpt]
0.23 - 2011-11-02
添加德语翻译 [potzenheimer]
添加了意大利语翻译 [giacomos]
添加了法语翻译 [toutpt]
0.22 - 2011-11-02
i18n 支持。暂时是挪威语和希腊语。[格扎德]
提供一个显示 PubSub 提要的 portlet。[格扎德]
修复了 url 指向二进制文件时的魔术链接错误。 https://github.com/ggozad/jarn.xmpp.core/issues/13 [ggozad]
0.21 - 2011-10-27
除非必要,否则不要跟踪用户的地理位置。[格扎德]
代理网站图标的下载(关闭 #11)。[格扎德]
将肖像链接到提要视图中的个人信息流。(关闭#10)。[格扎德]
pubsub 提要的“漂亮日期”。(关闭#8)。[格扎德]
0.2 - 2011-10-20
添加地理定位功能。发布到提要现在可以包含地理位置数据。[格扎德]
将 sessionStorage 用于用户信息数据,以便每个会话仅获取一次。[格扎德]
0.2b1 - 2011-10-09
为消息传递、状态、发布订阅源设计和实现出色的 UI。[米舒诺夫,格扎德]
替换 python 视图/实用程序以通过 js 发布到节点。[格扎德]
提供 pubsub 项目视图并在 pubsub 提要视图中异步加载它们。[格扎德]
在支持的浏览器中开始使用 sessionStorage。[格扎德]
删除多用户聊天。定义用例后,它将再次正确进入。[格扎德]
0.1b4 - 2011-09-30
恢复使用 Strophe 1.0.1 作为针对坚持转义所有内容的损坏的 xml 解析器的解决方法。[格扎德]
0.1b3 - 2011-09-18
修补 strophe 以发出同步请求,以便能够 在 onbeforeunload上真正断开连接。这是为了阻止基于 WebKit 的浏览器在用户超时之前保持连接。此外,不再使用 strophe 库的缩小版本,因为我们修补了它们。[格扎德]
文档更新。[tkimnguyen]
0.1b2 - 2011-09-02
如果尚未安装产品,则修复启动订阅者不执行任何操作。这允许您在现有站点上安装。[格扎德]
更新到 Strophe 1.0.2 [ggozad]
0.1b1 - 2011-09-01
简化配置并修复注册表中令人困惑的拼写错误 [ggozad]
管理客户端现在处理连接失败和断开连接。发生这种情况时,管理客户端实用程序将取消注册,并将在下一个请求时重试。[格扎德]
现在可以使用一个 viewlet,通过它可以执行所有操作。[格扎德]
在构建中添加配方以构建 ejabberd。需要工作的 erlang 安装。[格扎德]
JS 修复 [ggozad]
0.1a3 - 2011-06-06
包含使用collective.recipe.template 生成工作ejabberd.cfg 的配方。[格扎德]
为 pubsub 添加了一些基本测试。[格扎德]
仅当在 testrunner 上指定级别 2 时才运行需要 EJABBERD 层的测试。[格扎德]
0.1a2 - 2011-05-11
更新了有关如何添加最近的 wokkel 的文档。[格扎德]
0.1a1 - 2011-05-09
初始版本 [ggozad]
项目详情
jarn.xmpp.core-0.34.zip的哈希值
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | fa2af2c1f42f71bd66c591a125fc5399fb30093ff6f916742401bd1a904fdd7c |
|
| MD5 | a402710b88c37ee718e7254a45cd38ed |
|
| 布莱克2-256 | f0863f62be8a554a7a5afb4d68305fcbab70fc2c0b74127fca714ac05e6c4c29 |