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);
});