diff --git a/app/lib/server/functions/checkUsernameAvailability.js b/app/lib/server/functions/checkUsernameAvailability.js index 765bd37158a39..f152e93266b79 100644 --- a/app/lib/server/functions/checkUsernameAvailability.js +++ b/app/lib/server/functions/checkUsernameAvailability.js @@ -1,5 +1,6 @@ import { Meteor } from 'meteor/meteor'; import s from 'underscore.string'; +import _ from 'underscore'; import { escapeRegExp } from '@rocket.chat/string-helpers'; import { settings } from '../../../settings'; @@ -19,7 +20,7 @@ const usernameIsBlocked = (username, usernameBlackList) => usernameBlackList.len export const checkUsernameAvailability = function(username) { if (usernameIsBlocked(username, usernameBlackList) || !validateName(username)) { - return false; + throw new Meteor.Error('error-blocked-username', `${ _.escape(username) } is blocked and can't be used!`, { method: 'checkUsernameAvailability', field: username }); } // Make sure no users are using this username diff --git a/app/ui-login/client/username/username.html b/app/ui-login/client/username/username.html index 506a530d47490..9ede3ba2fdb27 100644 --- a/app/ui-login/client/username/username.html +++ b/app/ui-login/client/username/username.html @@ -6,7 +6,12 @@

{{_ "Username_title"}}

{{_ "Username_description"}}

- {{#if username.error}} + {{#if username.blocked}} +
+ {{{_ "error-blocked-username" field=username.escaped}}} +
+ {{/if}} + {{#if username.unavailable}}
{{{_ "error-field-unavailable" field=username.escaped}}}
diff --git a/app/ui-login/client/username/username.js b/app/ui-login/client/username/username.js index 12bafe6517a01..125f34ddc7fc6 100644 --- a/app/ui-login/client/username/username.js +++ b/app/ui-login/client/username/username.js @@ -69,11 +69,12 @@ Template.username.events({ return Meteor.call('setUsername', value, function(err) { if (err != null) { - console.log(err); if (err.error === 'username-invalid') { username.invalid = true; + } else if (err.error === 'error-blocked-username') { + username.blocked = true; } else { - username.error = true; + username.unavailable = true; } username.username = value; username.escaped = _.escape(value); diff --git a/packages/rocketchat-i18n/i18n/en.i18n.json b/packages/rocketchat-i18n/i18n/en.i18n.json index 64475d5ecb0fd..8586156f52f3e 100644 --- a/packages/rocketchat-i18n/i18n/en.i18n.json +++ b/packages/rocketchat-i18n/i18n/en.i18n.json @@ -1615,6 +1615,7 @@ "error-avatar-invalid-url": "Invalid avatar URL: __url__", "error-avatar-url-handling": "Error while handling avatar setting from a URL (__url__) for __username__", "error-business-hours-are-closed": "Business Hours are closed", + "error-blocked-username": "__field__ is blocked and can't be used!", "error-canned-response-not-found": "Canned Response Not Found", "error-cannot-delete-app-user": "Deleting app user is not allowed, uninstall the corresponding app to remove it.", "error-cant-invite-for-direct-room": "Can't invite user to direct rooms", diff --git a/packages/rocketchat-i18n/i18n/pt-BR.i18n.json b/packages/rocketchat-i18n/i18n/pt-BR.i18n.json index 31675589af636..9132b3c64c575 100644 --- a/packages/rocketchat-i18n/i18n/pt-BR.i18n.json +++ b/packages/rocketchat-i18n/i18n/pt-BR.i18n.json @@ -1373,6 +1373,7 @@ "error-archived-duplicate-name": "Já há um canal arquivado com o nome '__room_name__'", "error-avatar-invalid-url": "URL inválida de avatar: __url__", "error-avatar-url-handling": "Erro durante o manuseio configuração avatar a partir de uma URL (__url__) para __username__", + "error-blocked-username": "__field__ está bloqueado e não pode ser usado!", "error-business-hours-are-closed": "Horário de expediente fechado", "error-cant-invite-for-direct-room": "Não é possível convidar usuários para salas diretas", "error-channels-setdefault-is-same": "A configuração padrão do canal é a mesma que seria alterada.", diff --git a/tests/end-to-end/api/01-users.js b/tests/end-to-end/api/01-users.js index 1a497af06a1c5..66137c0d8c66e 100644 --- a/tests/end-to-end/api/01-users.js +++ b/tests/end-to-end/api/01-users.js @@ -175,7 +175,7 @@ describe('[Users]', function() { .expect(400) .expect((res) => { expect(res.body).to.have.property('success', false); - expect(res.body).to.have.property('error', `${ name } is already in use :( [error-field-unavailable]`); + expect(res.body).to.have.property('error', `${ name } is blocked and can't be used! [error-blocked-username]`); }) .end(done); });