diff --git a/dist/converse.js b/dist/converse.js index 47e57fc04..c0ee3a4a4 100644 --- a/dist/converse.js +++ b/dist/converse.js @@ -68845,7 +68845,9 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_ if (args.length > 1) { this.showErrorMessage(__(`Error: invalid number of arguments`)); } else { - this.model.registerNickname(); + this.model.registerNickname().then(err_msg => { + if (err_msg) this.showErrorMessage(err_msg); + }); } break; @@ -70151,7 +70153,7 @@ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } }, async onConnectionStatusChanged() { - if (this.get('connection_status') === converse.ROOMSTATUS.ENTERED && _converse.auto_register_muc_nickname && this.get('reserved_nick')) { + if (this.get('connection_status') === converse.ROOMSTATUS.ENTERED && _converse.auto_register_muc_nickname && !this.get('reserved_nick')) { const result = await _converse.api.disco.supports(Strophe.NS.MUC_REGISTER, this.get('jid')); if (result.length) { @@ -70870,7 +70872,7 @@ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } // See https://xmpp.org/extensions/xep-0045.html#register const nick = this.get('nick'), jid = this.get('jid'); - let iq; + let iq, err_msg; try { iq = await _converse.api.sendIQ($iq({ @@ -70881,13 +70883,15 @@ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } 'xmlns': Strophe.NS.MUC_REGISTER })); } catch (e) { - if (sizzle('item-not-found[xmlns="urn:ietf:params:xml:ns:xmpp-stanzas"]', e).length) { - _converse.log(`Can't register nickname ${nick} in the groupchat ${jid} which does not exist.`); - } else if (sizzle('not-allowed[xmlns="urn:ietf:params:xml:ns:xmpp-stanzas"]', e).length) { - _converse.log(`You're not allowed to register in the groupchat ${jid}`); + if (sizzle('not-allowed[xmlns="urn:ietf:params:xml:ns:xmpp-stanzas"]', e).length) { + err_msg = __("You're not allowed to register yourself in this groupchat."); + } else if (sizzle('registration-required[xmlns="urn:ietf:params:xml:ns:xmpp-stanzas"]', e).length) { + err_msg = __("You're not allowed to register in this groupchat because it's members-only."); } - return _converse.log(e, Strophe.LogLevel.ERROR); + _converse.log(e, Strophe.LogLevel.ERROR); + + return err_msg; } const required_fields = _.map(sizzle('field required', iq), 'parentElement'); @@ -70912,15 +70916,17 @@ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } 'var': 'muc#register_roomnick' }).c('value').t(nick)); } catch (e) { - if (sizzle('conflict[xmlns="urn:ietf:params:xml:ns:xmpp-stanzas"]', e).length) { - _converse.log(`Can't register nickname ${nick} in the groupchat ${jid}, it's already taken.`); - } else if (sizzle('service-unavailable[xmlns="urn:ietf:params:xml:ns:xmpp-stanzas"]', e).length) { - _converse.log(`Can't register nickname ${nick} in the groupchat ${jid}, it doesn't support registration.`); + if (sizzle('service-unavailable[xmlns="urn:ietf:params:xml:ns:xmpp-stanzas"]', e).length) { + err_msg = __("Can't register your nickname in this groupchat, it doesn't support registration."); } else if (sizzle('bad-request[xmlns="urn:ietf:params:xml:ns:xmpp-stanzas"]', e).length) { - _converse.log(`Can't register nickname ${nick} in the groupchat ${jid}, invalid data form supplied.`); + err_msg = __("Can't register your nickname in this groupchat, invalid data form supplied."); } - return _converse.log(e, Strophe.LogLevel.ERROR); + _converse.log(err_msg); + + _converse.log(e, Strophe.LogLevel.ERROR); + + return err_msg; } }, diff --git a/src/converse-muc-views.js b/src/converse-muc-views.js index 4137954a5..9467d8531 100644 --- a/src/converse-muc-views.js +++ b/src/converse-muc-views.js @@ -1003,7 +1003,9 @@ if (args.length > 1) { this.showErrorMessage(__(`Error: invalid number of arguments`)) } else { - this.model.registerNickname(); + this.model.registerNickname().then(err_msg => { + if (err_msg) this.showErrorMessage(err_msg) + }); } break; case 'revoke': diff --git a/src/converse-muc.js b/src/converse-muc.js index 420cac818..6acbc4cf9 100644 --- a/src/converse-muc.js +++ b/src/converse-muc.js @@ -198,7 +198,7 @@ async onConnectionStatusChanged () { if (this.get('connection_status') === converse.ROOMSTATUS.ENTERED && _converse.auto_register_muc_nickname && - this.get('reserved_nick')) { + !this.get('reserved_nick')) { const result = await _converse.api.disco.supports(Strophe.NS.MUC_REGISTER, this.get('jid')); if (result.length) { @@ -818,7 +818,7 @@ // See https://xmpp.org/extensions/xep-0045.html#register const nick = this.get('nick'), jid = this.get('jid'); - let iq; + let iq, err_msg; try { iq = await _converse.api.sendIQ( $iq({ @@ -828,12 +828,13 @@ }).c('query', {'xmlns': Strophe.NS.MUC_REGISTER}) ); } catch (e) { - if (sizzle('item-not-found[xmlns="urn:ietf:params:xml:ns:xmpp-stanzas"]', e).length) { - _converse.log(`Can't register nickname ${nick} in the groupchat ${jid} which does not exist.`); - } else if (sizzle('not-allowed[xmlns="urn:ietf:params:xml:ns:xmpp-stanzas"]', e).length) { - _converse.log(`You're not allowed to register in the groupchat ${jid}`); + if (sizzle('not-allowed[xmlns="urn:ietf:params:xml:ns:xmpp-stanzas"]', e).length) { + err_msg = __("You're not allowed to register yourself in this groupchat."); + } else if (sizzle('registration-required[xmlns="urn:ietf:params:xml:ns:xmpp-stanzas"]', e).length) { + err_msg = __("You're not allowed to register in this groupchat because it's members-only."); } - return _converse.log(e, Strophe.LogLevel.ERROR); + _converse.log(e, Strophe.LogLevel.ERROR); + return err_msg; } const required_fields = _.map(sizzle('field required', iq), 'parentElement'); if (required_fields.length > 1 || required_fields[0].getAttribute('var') !== 'muc#register_roomnick') { @@ -850,14 +851,14 @@ .c('field', {'var': 'muc#register_roomnick'}).c('value').t(nick) ); } catch (e) { - if (sizzle('conflict[xmlns="urn:ietf:params:xml:ns:xmpp-stanzas"]', e).length) { - _converse.log(`Can't register nickname ${nick} in the groupchat ${jid}, it's already taken.`); - } else if (sizzle('service-unavailable[xmlns="urn:ietf:params:xml:ns:xmpp-stanzas"]', e).length) { - _converse.log(`Can't register nickname ${nick} in the groupchat ${jid}, it doesn't support registration.`); + if (sizzle('service-unavailable[xmlns="urn:ietf:params:xml:ns:xmpp-stanzas"]', e).length) { + err_msg = __("Can't register your nickname in this groupchat, it doesn't support registration."); } else if (sizzle('bad-request[xmlns="urn:ietf:params:xml:ns:xmpp-stanzas"]', e).length) { - _converse.log(`Can't register nickname ${nick} in the groupchat ${jid}, invalid data form supplied.`); + err_msg = __("Can't register your nickname in this groupchat, invalid data form supplied."); } - return _converse.log(e, Strophe.LogLevel.ERROR); + _converse.log(err_msg); + _converse.log(e, Strophe.LogLevel.ERROR); + return err_msg; } },