Provide error feedback to the /register command.

Also fix if/boolean bug when checking whether we should automatically
register
This commit is contained in:
JC Brand 2018-09-13 12:39:50 +02:00
parent aeb0c0c7bb
commit 0a3a6222c6
3 changed files with 37 additions and 28 deletions

34
dist/converse.js vendored
View File

@ -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;
}
},

View File

@ -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':

View File

@ -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;
}
},