跳转到主要内容

jarn.xmpp的核心包

项目描述

简介

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

  • 将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的最小配置。您需要复制templates目录并相应地修改配方配置

    [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

通过登录到管理界面(通常是https://127.0.0.1:5280/admin)来测试您是否可以访问ejabberd。您还应该能够访问http-bind界面,位于https://127.0.0.1:5280/http-bind

设置您的前端代理

在客户端,每个经过身份验证的用户将通过HTTP的模拟双向流连接到您的Jabber服务器。为了实现这一点,您需要在Plone前面设置一个代理,该代理将XMPP流重定向到您的XMPP服务器。虽然没有代理也可以使用较次的Flash插件解决方案,但此方案将不再得到支持。

假设您在端口8080上以代理模式运行nginx,针对域名localhost,Zope监听8081端口,存在一个ID为“Plone”的Plone站点,并且您的ejabberd已将http_bind配置为端口5280,则您的nginx配置将如下所示

http {
    server {
        listen       8080;
        server_name  localhost;
        location ~ ^/http-bind/ {
            proxy_pass https://127.0.0.1:5280;
        }

        location / {
            proxy_pass https://127.0.0.1:8081/VirtualHostBase/http/localhost:8080/Plone/VirtualHostRoot/;
        }
    }
  }

设置您的Plone实例

您的实例需要维护与XMPP服务器管理员账户的连接。这是通过Twisted完成的,您需要在每个实例上运行一个Twisted反应器。要这样做,请将以下内容包含在您的buildout实例部分

zcml-additional =
  <configure xmlns="http://namespaces.zope.org/zope">
    <include package="jarn.xmpp.twisted" file="reactor.zcml" />
  </configure>

再次提醒,您可以参考jarn.xmpp.buildout中提供的示例buildout。

设置新的Plone站点

  • 启动ejabberd(如果您使用了构建ejabberd的配方,bin/ejabberd将执行此任务)。

  • 启动Nginx前端。bin/frontend start

  • 启动您的Zope实例。

  • 直接在https://127.0.0.1:8081/manage访问Zope,并使用jarn.xmpp.core(或如果您想安装该包,则使用jarn.xmpp.collaboration)创建一个新的Plone站点。

  • 转到Plone控制面板,进入注册设置。编辑jarn.xmpp.*设置以反映您的安装、密码等。

  • 重新启动您的Plone实例。

  • 在第一次请求时,管理员将登录到他的账户。您应该在日志中看到发生的事情,如果出现错误,可能是因为您的安装有问题。

  • 设置用户和pubsub节点。您可以通过调用@@setup-xmpp(例如,https://127.0.0.1:8080/@@setup-xmpp)来完成此操作。表单不会报告任何错误,因为所有操作都是异步发生的,但您将在控制台看到结果/失败信息。

如果您打算在现有网站上使用此方案,您只需要在确保XMPP管理员已连接后执行最后一步。

确保一切正常 ;)

这是一个复杂的基础设施,有时很难知道出了什么问题。不要绝望,这里有一些您可以尝试的事情

  • 确保ejabberd正在运行。以管理员用户身份连接到它。

  • 验证ejabberd上的http绑定是否设置正确。访问https://127.0.0.1:5280/http-bind应告诉您它正在工作。

  • 验证XMPP请求是否可以通过代理正确通过。访问https://127.0.0.1:8080/http-bind/应给出与上面相同的结果。

  • 当您在前景中启动Zope实例时,您可以验证Twisted反应器是否运行良好

    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

实验

用法

  • 添加一些用户。

  • 以其中之一登录,并在不同的浏览器中以其他身份登录。使用前端访问网站,如果您使用了上述设置,这应该是https://127.0.0.1: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

  • 修复Google地图初始化。[ggozad]

0.33 - 2011-12-07

  • IE9兼容性。[ggozad]

  • BOSH认证无缓存。[ggozad]

0.32 - 2011-11-30

  • UI/UX改进。[mishunov]

  • 修复了一个无标题的组件错误。[ggozad]

  • 修复了一个会导致存储只从每个节点加载10个条目的错误。[ggozad]

  • 修复了json视图以正确设置json头。[ggozad]

0.31 - 2011-11-28

  • 版本修复。[ggozad]

0.3 - 2011-11-28

  • 支持pubsub节点的一级线程。[ggozad]

  • 允许用户订阅单个节点。[ggozad]

  • 异步加载PubSub条目。[ggozad]

  • 在XMPP上实现XEP-0049私有存储。[ggozad]

  • 实现vCard 2.0支持。允许所有用户元数据和头像存储在XMPP服务器上,避免对Plone的所有调用。[ggozad]

  • 修复了一个罕见的情况,即Safari浏览器可能会真的表现不佳并有时崩溃。撤销了对Strophe的补丁,以允许WebKit浏览器在页面卸载时进行同步而不是异步调用断开连接。[ggozad]

  • 样式![mishunov]

  • 更新德语翻译 [potzenheimer]

  • 更新法语翻译 [toutpt]

0.23 - 2011-11-02

  • 添加德语翻译 [potzenheimer]

  • 添加意大利语翻译 [giacomos]

  • 添加法语翻译 [toutpt]

0.22 - 2011-11-02

0.21 - 2011-10-27

  • 除非必要,否则不要跟踪用户的地理位置。[ggozad]

  • 代理下载favicon(关闭#11)。[ggozad]

  • 在feed视图中将头像链接到个人流。(关闭#10)。[ggozad]

  • pubsub feed的“美观日期”。(关闭#8)。[ggozad]

0.2 - 2011-10-20

  • 添加地理位置功能。现在发布到feed时可以包含地理位置数据。[ggozad]

  • 使用sessionStorage存储用户信息数据,以便在每次会话中只获取一次。[ggozad]

0.2b1 - 2011-10-09

  • 设计和实现消息、存在、pubsub feed的出色UI。[mishunov, ggozad]

  • 用js替换发布到节点的python视图/工具。[ggozad]

  • 提供pubsub项视图,并在pubsub feed视图中异步加载它们。[ggozad]

  • 在支持此功能的浏览器中开始使用sessionStorage。[ggozad]

  • 移除多用户聊天。当用例被定义后,它将正确地再次进入。[ggozad]

0.1b4 - 2011-09-30

  • 恢复使用Strophe 1.0.1作为解决破损xml解析器问题的方法,该解析器坚持对一切进行转义。[ggozad]

0.1b3 - 2011-09-18

  • 修改strophe以进行同步请求,以便在onbeforeunload时真正断开连接。这是为了防止基于WebKit的浏览器在超时前一直保持用户连接。此外,由于我们修补了它们,不再使用strophe库的压缩版本。[ggozad]

  • 更新文档。[tkimnguyen]

0.1b2 - 2011-09-02

  • 修复启动订阅者,如果产品尚未安装,则不执行任何操作。这允许你在现有网站上安装。[ggozad]

  • 更新到Strophe 1.0.2 [ggozad]

0.1b1 - 2011-09-01

  • 简化配置并修复注册表中的混淆性错别字。[ggozad]

  • 现在管理员客户端处理连接失败以及断开连接。当发生这种情况时,管理员客户端实用程序将取消注册并在下一次请求时重试。[ggozad]

  • 现在可以通过一个视图执行所有操作。[ggozad]

  • 在buildout中添加了构建ejabberd的食谱。需要有效的erlang安装。[ggozad]

  • JS修复[ggozad]

0.1a3 - 2011-06-06

  • 包括使用collective.recipe.template生成工作ejabberd.cfg的食谱。[ggozad]

  • 为pubsub添加了一些基本测试。[ggozad]

  • 仅在测试运行器指定级别2时运行需要EJABBERD层的测试。[ggozad]

0.1a2 - 2011-05-11

  • 更新了如何添加最新wokkel的文档。[ggozad]

0.1a1 - 2011-05-09

  • 初始发布[ggozad]

项目详情


下载文件

下载适用于您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源分布

jarn.xmpp.core-0.34.zip (161.4 kB 查看哈希值)

上传于 源代码

支持