mirror of
https://github.com/NodeBB/NodeBB.git
synced 2026-05-07 11:06:40 +02:00
Fix #5543
This commit is contained in:
@@ -46,7 +46,7 @@ module.exports = function (User) {
|
||||
|
||||
async.parallel({
|
||||
renamedUsername: function (next) {
|
||||
renameUsername(userData, next);
|
||||
User.renameUsername(userData, next);
|
||||
},
|
||||
userData: function (next) {
|
||||
plugins.fireHook('filter:user.create', { user: userData, data: data }, next);
|
||||
@@ -200,28 +200,28 @@ module.exports = function (User) {
|
||||
callback();
|
||||
};
|
||||
|
||||
function renameUsername(userData, callback) {
|
||||
User.renameUsername = function (userData, callback) {
|
||||
meta.userOrGroupExists(userData.userslug, function (err, exists) {
|
||||
if (err || !exists) {
|
||||
return callback(err);
|
||||
}
|
||||
|
||||
var newUsername = '';
|
||||
async.forever(function (next) {
|
||||
newUsername = userData.username + (Math.floor(Math.random() * 255) + 1);
|
||||
User.existsBySlug(newUsername, function (err, exists) {
|
||||
if (err) {
|
||||
return callback(err);
|
||||
}
|
||||
if (!exists) {
|
||||
next(newUsername);
|
||||
} else {
|
||||
next();
|
||||
var num = 0;
|
||||
|
||||
function go() {
|
||||
var username = userData.username + ' ' + num.toString(32);
|
||||
var userslug = utils.slugify(username);
|
||||
meta.userOrGroupExists(userslug, function (err, exists) {
|
||||
if (err || !exists) {
|
||||
return callback(err, username);
|
||||
}
|
||||
|
||||
num += 1;
|
||||
go();
|
||||
});
|
||||
}, function (username) {
|
||||
callback(null, username);
|
||||
});
|
||||
}
|
||||
|
||||
go();
|
||||
});
|
||||
}
|
||||
};
|
||||
};
|
||||
|
||||
32
test/user.js
32
test/user.js
@@ -70,6 +70,38 @@ describe('User', function () {
|
||||
});
|
||||
});
|
||||
|
||||
describe('.renameUsername()', function () {
|
||||
it('should deal with collisions', function (done) {
|
||||
var users = [];
|
||||
for (var i = 0; i < 10; i += 1) {
|
||||
users.push({
|
||||
username: 'Jane Doe',
|
||||
password: 'abcdefghi',
|
||||
email: 'jane.doe' + i + '@example.com',
|
||||
});
|
||||
}
|
||||
|
||||
async.series([
|
||||
function (next) {
|
||||
async.eachSeries(users, function (user, next) {
|
||||
User.create(user, next);
|
||||
}, next);
|
||||
},
|
||||
function (next) {
|
||||
User.renameUsername({
|
||||
username: 'Jane Doe',
|
||||
userslug: 'jane-doe',
|
||||
}, function (err, username) {
|
||||
assert.ifError(err);
|
||||
|
||||
assert.strictEqual(username, 'Jane Doe 9');
|
||||
done();
|
||||
});
|
||||
},
|
||||
], done);
|
||||
});
|
||||
});
|
||||
|
||||
describe('.isModerator()', function () {
|
||||
it('should return false', function (done) {
|
||||
User.isModerator(testUid, testCid, function (err, isModerator) {
|
||||
|
||||
Reference in New Issue
Block a user