diff --git a/public/src/client/register.js b/public/src/client/register.js index 62dbc41..a48289a 100644 --- a/public/src/client/register.js +++ b/public/src/client/register.js @@ -1,6 +1,5 @@ 'use strict'; - define('forum/register', [ 'translator', 'slugify', 'api', 'bootbox', 'forum/login', 'zxcvbn', 'jquery-form', ], function (translator, slugify, api, bootbox, Login, zxcvbn) { @@ -131,7 +130,29 @@ define('forum/register', [ if (results.every(obj => obj.status === 'rejected')) { showSuccess(username_notify, successIcon); } else { - showError(username_notify, '[[error:username-taken]]'); + // If we were unable to find a username, keep going and asking + // until we find the right one + const getUsername = (n = 1) => { + return new Promise((res) => { + const newUser = `${username}-${n}`; + Promise.allSettled([ + api.head(`/users/bySlug/${newUser}`, {}), + api.head(`/groups/${newUser}`, {}), + ]).then(async (results) => { + if(results.every(obj => obj.status === 'rejected')) { + // We got a number, return this + res(newUser); + } else { + res(await getUsername(n + 1)); + } + }) + }); + } + getUsername() + .then(user => { + // Got the user: + showError(username_notify, `[[error:username-taken]] - want to try ${user}?`); + }) } callback();