MUC: Don't first check if we're registered before unregistering

The IQ stanza being sent to check was in any case incorrect and it
doesn't seem necessary.
This commit is contained in:
JC Brand 2021-06-10 10:40:45 +02:00
parent 39d60f05c3
commit ff1b6d3adf
2 changed files with 22 additions and 35 deletions

View File

@ -1543,8 +1543,16 @@ const ChatRoomMixin = {
return identity_el ? identity_el.getAttribute('name') : null; return identity_el ? identity_el.getAttribute('name') : null;
}, },
/**
* Send an IQ stanza to the MUC to register this user's nickname.
* This sets the user's affiliation to 'member' (if they weren't affiliated
* before) and reserves the nickname for this user, thereby preventing other
* users from using it in this MUC.
* See https://xmpp.org/extensions/xep-0045.html#register
* @private
* @method _converse.ChatRoom#registerNickname
*/
async registerNickname () { async registerNickname () {
// See https://xmpp.org/extensions/xep-0045.html#register
const { __ } = _converse; const { __ } = _converse;
const nick = this.get('nick'); const nick = this.get('nick');
const jid = this.get('jid'); const jid = this.get('jid');
@ -1593,26 +1601,19 @@ const ChatRoomMixin = {
} }
}, },
async unregisterNickname () { /**
const jid = this.get('jid'); * Send an IQ stanza to the MUC to unregister this user's nickname.
let iq; * If the user had a 'member' affiliation, it'll be removed and their
try { * nickname will no longer be reserved and can instead be used (and
iq = await api.sendIQ( * registered) by other users.
$iq({ * @private
'to': jid, * @method _converse.ChatRoom#unregisterNickname
'type': 'set' */
}).c('query', { 'xmlns': Strophe.NS.MUC_REGISTER }) unregisterNickname () {
); const iq = $iq({ 'to': this.get('jid'), 'type': 'set' })
} catch (e) { .c('query', { 'xmlns': Strophe.NS.MUC_REGISTER })
log.error(e); .c('remove');
return e; return api.sendIQ(iq).catch(e => log.error(e));
}
if (sizzle(`query[xmlns="${Strophe.NS.MUC_REGISTER}"] registered`, iq).pop()) {
const iq = $iq({ 'to': jid, 'type': 'set' })
.c('query', { 'xmlns': Strophe.NS.MUC_REGISTER })
.c('remove');
return api.sendIQ(iq).catch(e => log.error(e));
}
}, },
/** /**

View File

@ -79,20 +79,6 @@ describe("Chatrooms", function () {
_converse.connection.IQ_stanzas = []; _converse.connection.IQ_stanzas = [];
room.close(); room.close();
stanza = await u.waitUntil(() => _converse.connection.IQ_stanzas.filter(
iq => sizzle(`iq[to="${muc_jid}"][type="set"] query[xmlns="jabber:iq:register"]`, iq).length
).pop());
_converse.connection.IQ_stanzas = [];
result = $iq({
'from': room.get('jid'),
'id': stanza.getAttribute('id'),
'to': _converse.bare_jid,
'type': 'result',
}).c('query', {'xmlns': 'jabber:iq:register'})
.c('registered').up()
.c('username').t('romeo');
_converse.connection._dataRecv(mock.createRequest(result));
stanza = await u.waitUntil(() => _converse.connection.IQ_stanzas.filter( stanza = await u.waitUntil(() => _converse.connection.IQ_stanzas.filter(
iq => sizzle(`iq[to="${muc_jid}"][type="set"] query[xmlns="jabber:iq:register"]`, iq).length iq => sizzle(`iq[to="${muc_jid}"][type="set"] query[xmlns="jabber:iq:register"]`, iq).length