Дистанционно управление на списък с помощта на smack и ejabberd

Имам случай на използване, при който като администраторски потребител в ejabberd трябва да мога да редактирам списъци за всички други потребители. Използвам smack библиотека, за да се свържа със сървъра ejabberd чрез TCP връзка.

Четейки документацията на ejabberd 14.07, ето какво пише под mod_roster:

мениджъри Списък на отдалечени обекти, които могат да управляват потребителски списъци с помощта на Remote Roster Management (XEP-0321). Внедрените раздели на протокола са: 4.2. Отдалеченият обект изисква списък на текущия потребител. 4.3. Потребителят актуализира списъка. 4.4. Отдалеченият обект актуализира списъка на потребителя. Кабинетът на отдалечен обект получава или променя само елементи от списък, които имат същия домейн като обекта. Стойността по подразбиране е: []. Тази примерна конфигурация позволява Roster Versioning със съхранение на текущия идентификатор. ICQ и MSN транспортите могат да получават ICQ и MSN контакти, да ги добавят или премахват за всеки локален акаунт:

Направих промените в конфигурацията в ejabberd и изпратих следните пакети:

<iq id='PCe38-23' to='%[email protected]/Smack' type='set'>
          <query xmlns='jabber:iq:roster'>
            <item jid='%[email protected]/Smack'
                  name='Siddharth Banerjee'
                  subscription='both'>
            </item>
          </query>
            </iq>

<iq id='PCe38-24' to='%[email protected]/Smack' type='set'>
          <query xmlns='jabber:iq:roster'>
            <item jid='%[email protected]/Smack'
                  name='deco'
                  subscription='both'>
            </item>
          </query>
            </iq>

Но получавам следното:

<iq from='%[email protected]/Smack' to='[email protected]/75250b26-a52a-4e1d-a5fb-4b263cd2f451' type='error' id='PCe38-23'>
          <query xmlns='jabber:iq:roster'>
            <item jid='%[email protected]/Smack' name='Siddharth Banerjee' subscription='both'>
            </item>
          </query>
            <error code='503' type='cancel'><service-unavailable xmlns='urn:ietf:params:xml:ns:xmpp-stanzas'/></error></iq>

Как да променя списъка на друг потребител с помощта на smack?

Моля за съвет.


person Siddharth Banerjee    schedule 11.11.2014    source източник


Отговори (2)


Мисля, че не разбирате целта на XEP-0321. Основно е да се позволи на порталите да манипулират съответната част от потребителския списък. Например шлюз за ICQ, работещ на сървъра, може да манипулира записа в списъка за потребител (след оторизация) само за това подмножество (т.е. записи в списъка @icq.domain.net, а не @domain.net).

Това НЕ е обща спецификация за манипулиране на целия потребителски списък.

За това, което прочетох в публикацията ви, вие използвате винаги един и същ домейн, така че предполагам, че се опитвате да получите достъп и да манипулирате потребителския списък от друг потребител. Не може да работи според XEP-0321.

person Mickaël Rémond    schedule 30.11.2014

https://blog.process-one.net/roster_versioning_support_for_ejabberd/

Тази примерна конфигурация позволява Roster Versioning със съхранение на текущия идентификатор. ICQ и MSN транспортите могат да получават ICQ и MSN контакти, да ги добавят или премахват за всеки локален акаунт:

modules:
  ...
  mod_roster:
    versioning: true
    store_current_id: true
    managers:
     - "icq.example.org"
     - "msn.example.org"
  ...

С тази примерна конфигурация само администраторите могат да управляват своите списъци; всички останали не могат да променят списъка:

acl: администратор: потребител: - "сара": "example.org" достъп: списък: администратор: разреши

модули: ... mod_roster: достъп: списък

person kobra34    schedule 14.02.2015