diff --git a/src/routes/user.js b/src/routes/user.js index d2a69590e..356dccede 100644 --- a/src/routes/user.js +++ b/src/routes/user.js @@ -55,7 +55,7 @@ function createUser(req, res, next) { var sendInvite = req.body.invite; var displayName = req.body.displayName || ''; - user.create(username, password, email, displayName, req.user /* creator */, sendInvite, function (error, user) { + user.create(username, password, email, displayName, { invitor: req.user, sendInvite: sendInvite }, function (error, user) { if (error && error.reason === UserError.BAD_USERNAME) return next(new HttpError(400, 'Invalid username')); if (error && error.reason === UserError.BAD_EMAIL) return next(new HttpError(400, 'Invalid email')); if (error && error.reason === UserError.BAD_PASSWORD) return next(new HttpError(400, 'Invalid password')); diff --git a/src/test/user-test.js b/src/test/user-test.js index ede542d83..922741017 100644 --- a/src/test/user-test.js +++ b/src/test/user-test.js @@ -82,7 +82,7 @@ describe('User', function () { after(cleanupUsers); it('fails due to short password', function (done) { - user.create(USERNAME, 'Fo$%23', EMAIL, DISPLAY_NAME, null, true, function (error, result) { + user.create(USERNAME, 'Fo$%23', EMAIL, DISPLAY_NAME, function (error, result) { expect(error).to.be.ok(); expect(result).to.not.be.ok(); expect(error.reason).to.equal(UserError.BAD_PASSWORD); @@ -92,7 +92,7 @@ describe('User', function () { }); it('fails due to missing upper case password', function (done) { - user.create(USERNAME, 'thisiseightch%$234arslong', EMAIL, DISPLAY_NAME, null, true, function (error, result) { + user.create(USERNAME, 'thisiseightch%$234arslong', EMAIL, DISPLAY_NAME, function (error, result) { expect(error).to.be.ok(); expect(result).to.not.be.ok(); expect(error.reason).to.equal(UserError.BAD_PASSWORD); @@ -102,7 +102,7 @@ describe('User', function () { }); it('fails due to missing numerics in password', function (done) { - user.create(USERNAME, 'foobaRASDF%', EMAIL, DISPLAY_NAME, null, true, function (error, result) { + user.create(USERNAME, 'foobaRASDF%', EMAIL, DISPLAY_NAME, function (error, result) { expect(error).to.be.ok(); expect(result).to.not.be.ok(); expect(error.reason).to.equal(UserError.BAD_PASSWORD); @@ -112,7 +112,7 @@ describe('User', function () { }); it('fails due to missing special chars in password', function (done) { - user.create(USERNAME, 'foobaRASDF23423', EMAIL, DISPLAY_NAME, null, true, function (error, result) { + user.create(USERNAME, 'foobaRASDF23423', EMAIL, DISPLAY_NAME, function (error, result) { expect(error).to.be.ok(); expect(result).to.not.be.ok(); expect(error.reason).to.equal(UserError.BAD_PASSWORD); @@ -122,7 +122,7 @@ describe('User', function () { }); it('succeeds and attempts to send invite', function (done) { - user.create(USERNAME, PASSWORD, EMAIL, DISPLAY_NAME, null /* invitor */, true, function (error, result) { + user.createOwner(USERNAME, PASSWORD, EMAIL, DISPLAY_NAME, function (error, result) { expect(error).not.to.be.ok(); expect(result).to.be.ok(); expect(result.username).to.equal(USERNAME); @@ -157,7 +157,7 @@ describe('User', function () { }); it('fails because user exists', function (done) { - user.create(USERNAME, PASSWORD, EMAIL, DISPLAY_NAME, null /* invitor */, false, function (error, result) { + user.create(USERNAME, PASSWORD, EMAIL, DISPLAY_NAME, function (error, result) { expect(error).to.be.ok(); expect(result).not.to.be.ok(); expect(error.reason).to.equal(UserError.ALREADY_EXISTS); @@ -167,7 +167,7 @@ describe('User', function () { }); it('fails because password is empty', function (done) { - user.create(USERNAME, '', EMAIL, DISPLAY_NAME, null /* invitor */, false, function (error, result) { + user.create(USERNAME, '', EMAIL, DISPLAY_NAME, function (error, result) { expect(error).to.be.ok(); expect(result).not.to.be.ok(); expect(error.reason).to.equal(UserError.BAD_PASSWORD); @@ -397,7 +397,8 @@ describe('User', function () { email: 'some@thi.ng' }; - user.create(user1.username, user1.password, user1.email, DISPLAY_NAME, { username: USERNAME, email: EMAIL } /* invitor */, false, function (error, result) { + var invitor = { username: USERNAME, email: EMAIL }; + user.create(user1.username, user1.password, user1.email, DISPLAY_NAME, { invitor: invitor }, function (error, result) { expect(error).to.not.be.ok(); expect(result).to.be.ok(); @@ -439,7 +440,8 @@ describe('User', function () { email: 'some@thi.ng' }; - user.create(user1.username, user1.password, user1.email, DISPLAY_NAME, { username: USERNAME, email: EMAIL } /* invitor */, false, function (error, result) { + var invitor = { username: USERNAME, email: EMAIL }; + user.create(user1.username, user1.password, user1.email, DISPLAY_NAME, { invitor: invitor }, function (error, result) { expect(error).to.eql(null); expect(result).to.be.ok(); diff --git a/src/user.js b/src/user.js index 632a1bbbf..23f6c3bc1 100644 --- a/src/user.js +++ b/src/user.js @@ -114,14 +114,20 @@ function validateDisplayName(name) { return null; } -function createUser(username, password, email, displayName, invitor, sendInvite, callback) { +function createUser(username, password, email, displayName, options, callback) { assert.strictEqual(typeof username, 'string'); assert.strictEqual(typeof password, 'string'); assert.strictEqual(typeof email, 'string'); assert.strictEqual(typeof displayName, 'string'); - assert.strictEqual(typeof invitor, 'object'); // null is ok - assert.strictEqual(typeof sendInvite, 'boolean'); - assert.strictEqual(typeof callback, 'function'); + + if (typeof options === 'function') { + callback = options; + options = null; + } + + var invitor = options ? options.invitor : null, + sendInvite = options ? options.sendInvite : false, + owner = options ? options.owner : false; var error = validateUsername(username); if (error) return callback(error); @@ -160,7 +166,7 @@ function createUser(username, password, email, displayName, invitor, sendInvite, callback(null, user); - mailer.userAdded(user, sendInvite); + if (!owner) mailer.userAdded(user, sendInvite); if (sendInvite) mailer.sendInvite(user, invitor); }); }); @@ -400,7 +406,7 @@ function createOwner(username, password, email, displayName, callback) { if (error) return callback(new UserError(UserError.INTERNAL_ERROR, error)); if (count !== 0) return callback(new UserError(UserError.ALREADY_EXISTS)); - createUser(username, password, email, displayName, null /* invitor */, false /* sendInvite */, function (error, user) { + createUser(username, password, email, displayName, { owner: true }, function (error, user) { if (error) return callback(error); groups.addMember(groups.ADMIN_GROUP_ID, user.id, function (error) {