ejabberd:使用ejabberdctl处理书签

时间:2015-12-31 23:46:09

标签: xmpp ejabberd

我目前正在编写shell代码,将数据从LDAP推送到ejabberd,涉及MUC会议室。我需要做的最后一步是在用户的书签中添加一些MUC房间,以便他们在客户端自动加入。似乎没有像Prosody那样的模块。

所以我假设我需要设置用户的私有XML存储,特别是存储:书签部分。我可以通过以下方式获取所有现有书签:

Option Explicit

Private Sub CommandButton1_Click()
    Dim example As Class1
    Set example = New Class1
    Debug.Print "This will execute."
End Sub

Private Sub UserForm_Terminate()
    Debug.Print "This will also execute, but not when you expect."
End Sub

然后,有Option Explicit Private Sub Class_Initialize() Debug.Print "Couldn't validate." Unload UserForm1 End Sub ,但我真的不明白。从我得到的,似乎我需要立即替换整个ejabberdctl private_get user host storage storage:bookmarks 元素,旧的和新的条目合并在一起。

是否有另一种方法可以向节点添加ejabberdctl private_set个子元素,或者以其他方式添加书签?

我尝试使用storage,但它似乎打破了元素字符串中的空格。我试图以各种可能的方式逃避它们,但无济于事。

2 个答案:

答案 0 :(得分:1)

好的,我发现确定将新会议添加到书签需要重新上传整个书签存储集。这意味着正确的方法是使用问题中显示的private_get,然后修改XML以添加新条目,然后使用private_set重新上传所有条目。

关于space的问题:Erlang shell(ejabberdctl是什么)需要用单引号引用另一个级别,因此一些XML将成为"'<storage xmlns="storage:bookmarks"><conference jid=…'",等等在shell参数中。< / p>

您可以在此处找到使用ejabberdctl执行此操作的shell脚本以及更多内容:https://www.teckids.org/gitweb/?p=verein.git;a=blob;f=sysadmin/scripts/teckids-ejmaint

答案 1 :(得分:0)

XMPP中有MUC书签的两个标准。旧标准XEP-0049使用专用XML存储,可以使用private_set命令对其进行修改。但是最近的标准是将书签存储在PEP中:XEP-0223

Dominik George的答案适用于旧标准;对于新的PEP方法,您可以使用:

sudo ./ejabberdctl send_stanza user@domain.tld user@domain.tld '
<iq type="set" id="asdf">
   <pubsub xmlns="http://jabber.org/protocol/pubsub">
      <publish node="storage:bookmarks">
         <item id="current">
            <storage xmlns="storage:bookmarks">
               <conference jid="room@conference.domain.tld" autojoin="true" name="name">
                  <nick>nick</nick>
               </conference>
            </storage>
         </item>
      </publish>
      <publish-options>
         <x xmlns="jabber:x:data" type="submit">
            <field var="FORM_TYPE" type="hidden">
               <value>http://jabber.org/protocol/pubsub#publish-options</value>
            </field>
            <field var="pubsub#access_model">
               <value>whitelist</value>
            </field>
         </x>
      </publish-options>
   </pubsub>
</iq>
'

也可以使用REST API访问此命令:https://docs.ejabberd.im/developer/ejabberd-api/admin-api/#send-stanza