소스 검색

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.
JC Brand 4 년 전
부모
커밋
ff1b6d3adf
2개의 변경된 파일22개의 추가작업 그리고 35개의 파일을 삭제
  1. 22 21
      src/headless/plugins/muc/muc.js
  2. 0 14
      src/headless/plugins/muc/tests/registration.js

+ 22 - 21
src/headless/plugins/muc/muc.js

@@ -1543,8 +1543,16 @@ const ChatRoomMixin = {
         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 () {
-        // See https://xmpp.org/extensions/xep-0045.html#register
         const { __ } = _converse;
         const nick = this.get('nick');
         const jid = this.get('jid');
@@ -1593,26 +1601,19 @@ const ChatRoomMixin = {
         }
     },
 
-    async unregisterNickname () {
-        const jid = this.get('jid');
-        let iq;
-        try {
-            iq = await api.sendIQ(
-                $iq({
-                    'to': jid,
-                    'type': 'set'
-                }).c('query', { 'xmlns': Strophe.NS.MUC_REGISTER })
-            );
-        } catch (e) {
-            log.error(e);
-            return 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));
-        }
+    /**
+     * Send an IQ stanza to the MUC to unregister this user's nickname.
+     * If the user had a 'member' affiliation, it'll be removed and their
+     * nickname will no longer be reserved and can instead be used (and
+     * registered) by other users.
+     * @private
+     * @method _converse.ChatRoom#unregisterNickname
+     */
+    unregisterNickname () {
+        const iq = $iq({ 'to': this.get('jid'), 'type': 'set' })
+            .c('query', { 'xmlns': Strophe.NS.MUC_REGISTER })
+            .c('remove');
+        return api.sendIQ(iq).catch(e => log.error(e));
     },
 
     /**

+ 0 - 14
src/headless/plugins/muc/tests/registration.js

@@ -79,20 +79,6 @@ describe("Chatrooms", function () {
 
             _converse.connection.IQ_stanzas = [];
             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(
                 iq => sizzle(`iq[to="${muc_jid}"][type="set"] query[xmlns="jabber:iq:register"]`, iq).length