为启用XMPP功能的Plone插件提供核心功能。
项目描述
简介
collective.xmpp.core 是 Yiorgis Gozadinos (@ggozad) 编写的 jarn.xmpp.twisted 和 jarn.xmpp.core 的分支/合并。
它从 jarn.xmpp.core 中移除了 PubSub 和消息功能,旨在作为Plone插件XMPP功能的基础。
目前它提供了以下功能
安装
在设置包之前,您需要一个可工作的 XMPP 服务器并访问服务器上的管理帐户。该软件包仅在 ejabberd 版本 2.1.5 及以上版本上进行过测试,建议使用。在任何情况下,您将要使用的服务器都需要支持以下 XMPP 扩展
Buildout
您可以使用 collective.xmpp.buildout 作为起点的一个示例 buildout 可以在 collective.xmpp.buildout 中找到。
设置 ejabberd (>=2.1.5)
自动配置
使用 collective.xmpp.buildout 中提供的配方(在这种情况下,您需要安装 erlang,Debian 上的 erlang-nox)或下载 ejabberd 安装程序。
可以通过 collective.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。其余选项由 collective.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。此外,如果您打算在任何 collective.xmpp.* 包中运行一些测试,那么如果您在生产中使用其他域,您需要在 localhost 上运行一个额外的 XMPP 节点。如果您不打算这样做,您可以安全地删除任何关于 localhost 的引用。
请确保您已启用 http_bind 模块,因为 JavaScript 客户端将使用它进行连接。您的 ejabberd.cfg 应该有类似以下内容:
{5280, ejabberd_http, [ http_bind, web_admin ]}
为了测试和运行自定义 XMPP 组件(例如由 collective.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 插件),但这将不会得到支持。
假设您以代理模式在端口 8080 上运行您的 web 服务器,Zope 监听端口 8081,存在一个 ID 为 Plone 的 Plone 网站,并且您的 ejabberd 已将 http_bind 配置为端口 5280,您的 nginx 或 apache 配置将如下所示:
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/; } } }
Apache
<VirtualHost *:8080> ServerName localhost RewriteEngine On RewriteRule ^/http-bind(.*) http://localhost:5280/http-bind$1 [P,L] RewriteRule ^/(.*) http://localhost:8081/VirtualHostBase/http/%{HTTP_HOST}:8080/Plone/VirtualHostRoot/$1 [P,L] </VirtualHost>
设置您的 Plone 实例
您的实例需要与 XMPP 服务器的管理员账户保持连接。这是通过 Twisted 实现的,您需要在每个实例上运行一个 Twisted 反应器。为此,请将以下内容包含在您的 buildout 实例部分:
zcml-additional = <configure xmlns="http://namespaces.zope.org/zope"> <include package="collective.xmpp.core" file="reactor.zcml" /> </configure>
此外,如果您的 Plone buildout 不使用 plone.dexterity,并且您想避免引入此依赖项,请在您的 CFG 文件中添加以下行
[versions] Products.UserAndGroupSelectionWidget = 2.0.4
再次,您可以查看在 collective.xmpp.buildout 中提供的示例 buildout。
设置新的 Plone 网站
启动 ejabberd(如果您使用了构建 ejabberd 的配方,bin/ejabberd 将会执行此操作)。
启动 Nginx 前端。 bin/frontend start
启动您的 Zope 实例。
直接在 http://localhost:8081/manage 访问 Zope 并使用 collective.xmpp.core 创建一个新的 Plone 网站。
转到 Plone 控制面板,点击 Plone 配置 下的 XMPP 集成 链接。确保 XMPP 设置反映了您的安装。
重新启动您的 Plone 实例。
在首次请求时,管理员将登录到他的账户。您应该在日志中看到一些操作,如果出现任何错误,则可能存在安装问题。
当您创建新的 Plone 用户时,他们将被自动注册在 XMPP 服务器上。您现有的用户也可以通过回到控制面板中的 XMPP 集成 配置,然后点击 用户注册 选项卡进行注册。请密切关注控制台中的 instance.log 追踪回溯,以确保没有错误。您可以通过访问 XMPP 管理界面 localhost:5280/admin 来查看已注册的用户。
确保一切正常 ;)
这是一个复杂的基础设施,有时很难知道出了什么问题。不要绝望,这里有一些你可以尝试的方法。
确保ejabberd正在运行。以管理员用户的身份连接到它。
请检查ejabberd上http绑定是否设置正确。访问http://localhost:5280/http-bind应该告诉你它是否正常工作。
请验证XMPP请求能够正确通过你的代理。访问http://localhost:8080/http-bind/应该给出与上面相同的结果。
当你以前台启动你的Zope实例时,你可以验证Twisted反应器是否运行正常。
2011-09-01 14:37:38 INFO collective.xmpp.core Starting Twisted reactor... 2011-09-01 14:37:38 INFO collective.xmpp.core Twisted reactor started 2011-09-01 14:37:38 INFO Zope Ready to handle requests
在首次请求站点后,你应该在日志中看到
2011-09-01 14:45:48 INFO collective.xmpp.core XMPP admin client has authenticated succesfully.
如果你的Plone用户在XMPP服务器上成功注册,使用该用户登录Plone站点也应通过XMPP服务器进行身份验证。这会在日志中通过以下内容表示
2011-09-01 14:45:50 INFO collective.xmpp.core Pre-binded ggozad@localhost/auto-QravOoyEeE
实验
用法
添加一些用户。
以其中之一登录,并在不同的浏览器中以其他身份登录。使用前端访问站点,如果你使用了上面的设置,这应该是http://localhost:8080。
所有操作都是通过顶部右侧的视图操作完成的:在线用户将显示当前登录的用户。点击它将给出用户列表。你可以直接向他们发送消息或查看他们的个人动态。
尝试向你的动态发送条目。链接将被自动转换。提交后,其他登录用户将实时收到通知。使用支持地理位置的较新浏览器,你还可以在发布时分享你的位置。
尝试在动态帖子上发表评论。
通过点击“关注”用户操作,你可以选择你想关注的用户,或者关注所有用户。
你可以通过点击视图上的站点动态来查看所有帖子。
安全
这里包含了一个根据XEP-0206在BOSH上实现的认证客户端的实现。这实际上意味着JavaScript客户端永远不需要知道XMPP用户的密码。相反,用户直接在XMPP服务器和Plone实例之间进行身份验证。交换一对有效期为短时间(约2分钟)的密钥。这对密钥被提供给JavaScript客户端而不是密码。
当Plone用户在XMPP服务器上注册时,会生成一个随机密码并存储在ZODB中一个持久性工具中。
如果你不需要在Plone实例之外访问XMPP账户,你还可以将整个XMPP服务隐藏在防火墙后面,并且只允许从Plone实例连接到它。这与HTTPS结合应该足以满足我们中的某些人的担忧。
测试
其中一些包含的测试是功能测试,它们需要一个在localhost上运行的XMPP服务器以及一个在服务器上设置的管理员账户,JID为admin@localhost,密码为admin。如果你要运行这些测试,你必须指定测试运行器的级别 2,即
./bin/test -a 2 -s collective.xmpp.core
你还需要配置ejabberd以监听端口5347以供外部组件使用。
最低要求是向listen关键字添加以下条目:
{listen, [ % Add only the line below {{5347, {0,0,0,0} }, ejabberd_service, []} ] }
生产部署提示
不要缓存@@xmpp-loader
确保不缓存URL ${site_url}/@@xmpp-loader。此视图返回一个身份验证令牌,每次重新加载页面时都必须不同。
如果你缓存它,令牌将不会改变,你将无法与XMPP服务器通信。
致谢
感谢Yiorgis Gozadinos (@ggozad) 为编写jarn.xmpp.core以及第一个将XMPP集成到Plone中。
更改日志
0.3 (2013-06-28)
功能:当 Jabber 服务器返回未授权时,从存储中删除密码以尝试再次创建用户,因为当密码仍然存在但 Jabber 服务器不再有该用户时,会出现此错误 [ichim-david]
功能:在尝试绑定客户端并失败时记录 Jabber 服务器响应 [ichim-david]
修复:无法获取具有自定义个人资料的用户的肖像数据 [jcbrand]
功能:添加一个新控制面板选项来更新所有用户的 vCard [jcbrand]
修复:在预绑定时,从 IXMPPSettings 获取管理员用户的密码 [jcbrand]
0.2 (2013-03-20)
功能:在 vCard 中包含用户的肖像 [jcbrand]
功能:当用户更改个人首选项时更新用户的 vCard [jcbrand]
修复:XMPP 服务器忽略最后用户的罗列建议 [jcbrand]
0.1 (2013-03-15)
已发布。 [jcbrand]
0.1b8 (2013-03-09)
修复:在注销用户子集时,所有 xmpp 密码都被清除 [jcbrand]
0.1b7 (2013-03-05)
前一个版本有损坏。未包含 ZCML 文件。 [jcbrand]
0.1b6 (2013-03-04)
修复了当通过将 readme.rst 和 history.txt 合并的 pypi 读取时出现的问题 [ichim-david]
0.1b5 (2013-03-04)
功能:“完全清除密码存储”操作现在在 zope 日志中记录 [alecghica]
修复:添加本地用户时出现“ComponentLookupError”错误 [alecghica]
功能:当无法将用户绑定到 Jabber 服务器时,添加错误图像和“无法与聊天服务器通信”消息 [alecghica]
功能:在 XMPP 服务器上注册用户时添加 vCard [jcbrand]
功能:使手动用户注册幂等(忽略已注册用户)。 [jcbrand]
用户创建时不再注册。他们必须手动注册,或者在下次登录访问时注册。 [jcbrand]
0.1b4 (2013-02-02)
修复了 @@xmpp-user-setup 页面上的“注销所有”的修复。回调方法中没有设置站点根。 [jcbrand]
0.1b3 (2013-01-17)
添加选项以完全清除 XMPP 密码工具。 [jcbrand]
添加升级步骤以确保重新加载注册表,以便添加“自动在登录时注册”条目。 [jcbrand]
修复:始终从注册表中获取 XMPP 虚拟主机。 [jcbrand]
修复:在自动订阅时,LDAP 用户的完整名称没有显示。 [jcbrand]
0.1b2 (2013-01-17)
添加配置设置以启用登录时的自动注册。默认情况下已禁用。 [jcbrand]
0.1b1 (2013-01-16)
功能:如果尚未注册,Plone 用户在登录时会在 Jabber 服务器上注册 [alecghica]
修复:对于在登录时注册的用户,无需刷新浏览器,它们会即时绑定 [alecghica]
修复:“注销所有用户”功能,在 IXMPPPasswordStorage 中留下了未删除的凭据,导致注册/注销用户时出现各种错误 [alecghica]
修复:添加了新 Plone 用户时订阅的问题 [alecghica]
修复:用户仅被自动订阅到当前会话中添加的其他用户 [alecghica]
修复:新用户现在仅自动订阅到现有的 XMPP 用户 [alecghica]
0.1a8 (2012-12-13)
修复:在 dbconfig.py 中检查 GS 配置版本,以避免在没有运行 GS 升级步骤的情况下启动实例。 [jcbrand]
0.1a7 (2012-12-13)
更新了文档,包括 Apache 配置示例。 [alecghica]
清理了已随 Plone 一起发货的依赖项 [alecghica]
将 Products.UserAndGroupSelectionWidget 包设置为可选。只有在包版本大于 2.0.4 时才会导入 Products.UserAndGroupSelectionWidget,因为它引入了与当前 Plone 版本中找到的其他包冲突的依赖项,如 plone.dexterity。 [alecghica]
修复了未安装/使用 Products.UserAndGroupSelectionWidget 时无法工作的注册用户表单 [alecghica]
添加了有关如何使 plone.dexterity 可选的信息 [alecghica]
显式存储 XMPP 服务器的主机名,而不仅仅是使用 XMPP 域。还存储端口号,而不仅仅是使用默认值。 [jcbrand]
允许通过 buildout 配置注册表设置。请参阅 dbconfig.py [jcbrand]
0.1a6 (2012-11-22)
添加了西班牙语翻译。 [macagua]
增加了对国际化支持的改进。[macagua]
修复了错误。防止 getAllMemberIds 返回重复项。[jcbrand]
0.1a5 (2012-11-19)
修复了 RST 格式化错误。[jcbrand]
0.1a4 (2012-11-19)
更新了文档。[jcbrand]
修复了 HISTORY.txt 标记。[alecghica]
修复了用于 Products.UserAndGroupSelectionWidget 的版本,将其设置为 >2.04,因为早期版本由于 API 变更可能会崩溃。[alecghica]
修复了错误。密码工具在用户注册时忘记用户密码。[jcbrand]
0.1a3 (2012-11-09)
修复了从 0.1a1 升级到 0.1a2 时可能发生的 RuntimeError。[jcbrand]
0.1a2 (2012-11-09)
添加了控制面板配置小工具以配置和注册 XMPP 用户。[jcbrand]
添加了对 PAS 插件(如 LDAP)的支持。[jcbrand]
0.1a1 (2012-10-18)
从 jarn.xmpp.core 0.34 分支。[jcbrand]
合并了 jarn.xmpp.twisted 0.1。[jcbrand]
移除了所有 PubSub 和 Messaging 相关功能。[jcbrand]
添加了 browserlayer 并在处理事件时检查它。[jcbrand]
修复了 @@setup-xmpp 脚本,使其仅在完成上一个用户注册后注册下一个用户。[jcbrand]
项目详情
集体.xmpp.core-0.3.zip 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | e1f0ccfcb3f35cb23aa5e681961c3b8d573b3ac86878d3034236ecdc423901fd |
|
MD5 | 9242dd6eec2d8a1cbae9bb63b341817d |
|
BLAKE2b-256 | a8f567b70f52e83e57ca0a7cd6894c5f9974d39af0eceb30eb0ec3bccdbf63ae |