diff --git a/CHANGES.md b/CHANGES.md index 2c4e97d99..54b2978bd 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -10,7 +10,7 @@ - #994 TypeError when using the `user.login` API. - #995 `ChildNode.replaceWith` is not available in Internet Explorer or Safari. Use `Node.replaceChild` instead. - #1000 Scroll to bottom when maximizing a chat room. -- #1003 Don't list MUC domain in rooms list. +- #1003 Handle bare MUC room JIDs ### Translation changes diff --git a/src/converse-muc.js b/src/converse-muc.js index 65365a185..5114af1e5 100644 --- a/src/converse-muc.js +++ b/src/converse-muc.js @@ -319,8 +319,8 @@ function openRoom (jid) { - if (!u.isValidJID(jid)) { - return converse.log( + if (!u.isValidMUCJID(jid)) { + return _converse.log( `Invalid JID "${jid}" provided in URL fragment`, Strophe.LogLevel.WARN ); @@ -1187,9 +1187,8 @@ nick = this.model.get('nick'); } const room = this.model.get('jid'); - const node = Strophe.getNodeFromJid(room); - const domain = Strophe.getDomainFromJid(room); - return node + "@" + domain + (nick !== null ? `/${nick}` : ""); + const jid = Strophe.getBareJidFromJid(room); + return jid + (nick !== null ? `/${nick}` : ""); }, registerHandlers () { @@ -2652,11 +2651,6 @@ }, roomStanzaItemToHTMLElement (room) { - if (!u.isValidJID(room.getAttribute('jid'), '@')) { - // Some XMPP servers return the MUC service in - // the list of rooms (see #1003). - return null; - } const name = Strophe.unescapeNode( room.getAttribute('name') || room.getAttribute('jid') @@ -2816,7 +2810,7 @@ } return { 'jid': jid, - 'name': name || Strophe.unescapeNode(Strophe.getNodeFromJid(jid)), + 'name': name || Strophe.unescapeNode(Strophe.getNodeFromJid(jid)) || jid } }, diff --git a/src/utils.js b/src/utils.js index 6773f88b6..e72d83530 100644 --- a/src/utils.js +++ b/src/utils.js @@ -367,6 +367,10 @@ return _.filter(jid.split('@')).length === 2 && !jid.startsWith('@') && !jid.endsWith('@'); }; + u.isValidMUCJID = function (jid) { + return !jid.startsWith('@') && !jid.endsWith('@'); + }; + u.isSameBareJID = function (jid1, jid2) { return Strophe.getBareJidFromJid(jid1).toLowerCase() === Strophe.getBareJidFromJid(jid2).toLowerCase();