Skip to main content

jarn.xmpp 的核心包

项目描述

介绍

jarn.xmpp.core是一个 Plone 附加组件,提供以下基于 XMPP 服务的功能:

  • plone 用户帐户与 XMPP 帐户和身份验证的集成。

  • 基于 XMPP PubSub 的类似于 twitter/yammer 的微博环境。

  • 消息传递。

它是旨在为 Plone 提供 XMPP 服务的软件包套件的一部分。另外两个包是

安装

在设置软件包之前,您需要有一个工作的 XMPP 服务器并访问服务器上的管理帐户。该软件包仅使用推荐的 ejabberd 2.1.5 及更高版本进行了测试。在任何情况下,您要使用的服务器都需要支持以下 XMPP 扩展:

扩建

可以在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

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 (161.4 kB 查看哈希

已上传 source