J'essaie de construire une plateforme MUC avec le cryptage OMEMO pour l'utiliser sur une application Android. J'utilise Ejabberd (v17.11) et la bibliothèque Smack (v4.2.1).
Les chambres MUC sont persistent
et ils allow_subscription
pour le support Muc/Sub, pour les messages hors ligne.
Lorsqu'un client démarre un nouveau salon en tant que "propriétaire" et ajoute des "membres" de sa liste, tous les clients rejoignent le salon et tout semble bien se passer. Le propriétaire peut envoyer des messages au groupe et ceux-ci sont transmis à tous les membres.
Mais lorsqu'un membre du groupe essaie d'envoyer un message, s'il ne le fait pas, il ne peut pas envoyer de message. savoir tous les membres du groupe (s'ils ne figurent pas dans son fichier), il ne peut pas envoyer de message !
J'ai découvert que, lors de l'envoi d'un message OMEMO au groupe, il est nécessaire de crypter le message séparément pour chaque membre, ce qui nécessite d'obtenir les coordonnées de chaque membre. devicelist
¡!
Sur cette étape :
mOmemoManager.encrypt(muc, msgBody);
Il tente de crypter tous les destinataires, mais la recherche d'une liste d'appareils d'un utilisateur inconnu provoque un plantage.
SENT :
<iq to='unknownuser@server.com' id='141' type='get'><query xmlns='http://jabber.org/protocol/disco#info' node='eu.siacs.conversations.axolotl.devicelist'></query></iq>
RECV :
<iq xml:lang='en' to='myuser@server.com/mobile' from='unknownuser@server.com' type='error' id='141'><query node='eu.siacs.conversations.axolotl.devicelist' xmlns='http://jabber.org/protocol/disco#info'/><error code='407' type='auth'><subscription-required xmlns='urn:ietf:params:xml:ns:xmpp-stanzas'/><text xml:lang='en' xmlns='urn:ietf:params:xml:ns:xmpp-stanzas'>Not subscribed</text></error></iq>
Erreur de Smack :
Impossible d'obtenir la liste des périphériques de unknownuser@server.com : .....
XMPPError : subscription-required - auth
Comment puis-je résoudre ce problème ? Dans les groupes de discussion, tous les utilisateurs n'ont pas besoin de se rencontrer. Dois-je ajouter tout le monde à la liste de tous les utilisateurs lorsqu'ils se réunissent dans un groupe ?
Ou s'agit-il d'une question d'appartenance à une chambre ou de rôle ?
Ou quelque chose à propos de la configuration d'Ejabberd ?
[{title,<<"groupName">>},
{allow_query_users,true},
{allow_private_messages,true},
{allow_private_messages_from_visitors,anyone},
{allow_visitor_status,true},
{allow_visitor_nickchange,true},
{public,false},
{public_list,false},
{persistent,true},
{moderated,true},
{members_by_default,true},
{members_only,true},
{allow_user_invites,true},
{anonymous,false},
{logging,false},
{allow_voice_requests,true},
{allow_subscription,true},
{mam,true},
{presence_broadcast,[moderator,participant,visitor]},
{voice_request_min_interval,1800},
{vcard,<<>>},
{captcha_whitelist,[]},
{affiliations,[{{<<"user1">>,<<"server.com">>,<<>>},{member,<<>>}}, {{<<"user2">>,<<"server.com">>,<<>>},{owner,<<>>}}, {{<<"user3">>,<<"server.com">>,<<>>},{member,<<>>}}]},
{subject,[]},
{subject_author,<<>>}]