diff --git a/src/routes/user.js b/src/routes/user.js index 1fab2d292..d2a69590e 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, false /* admin */, req.user /* creator */, sendInvite, function (error, user) { + user.create(username, password, email, displayName, req.user /* creator */, 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 9bf85bd9c..6aceb5ae7 100644 --- a/src/test/user-test.js +++ b/src/test/user-test.js @@ -31,8 +31,8 @@ function cleanupUsers(done) { }); } -function createUser(done) { - user.create(USERNAME, PASSWORD, EMAIL, DISPLAY_NAME, IS_ADMIN, null /* invitor */, false, function (error, result) { +function createOwner(done) { + user.createOwner(USERNAME, PASSWORD, EMAIL, DISPLAY_NAME, function (error, result) { expect(error).to.not.be.ok(); expect(result).to.be.ok(); @@ -184,7 +184,7 @@ describe('User', function () { }); it('succeeds', function (done) { - createUser(function (error) { + createOwner(function (error) { if (error) return done(error); user.getOwner(function (error, owner) { @@ -197,7 +197,7 @@ describe('User', function () { }); describe('verify', function () { - before(createUser); + before(createOwner); after(cleanupUsers); it('fails due to non existing username', function (done) { @@ -241,7 +241,7 @@ describe('User', function () { }); describe('verifyWithEmail', function () { - before(createUser); + before(createOwner); after(cleanupUsers); it('fails due to non existing user', function (done) { @@ -285,7 +285,7 @@ describe('User', function () { }); describe('retrieving', function () { - before(createUser); + before(createOwner); after(cleanupUsers); it('fails due to non existing user', function (done) { @@ -311,7 +311,7 @@ describe('User', function () { }); describe('update', function () { - before(createUser); + before(createOwner); after(cleanupUsers); it('fails due to unknown userid', function (done) { @@ -375,7 +375,7 @@ describe('User', function () { }); describe('admin change', function () { - before(createUser); + before(createOwner); after(cleanupUsers); it('fails to remove admin flag of only admin', function (done) { @@ -415,7 +415,7 @@ describe('User', function () { }); describe('get admins', function () { - before(createUser); + before(createOwner); after(cleanupUsers); it('succeeds for one admins', function (done) { @@ -456,7 +456,7 @@ describe('User', function () { }); describe('password change', function () { - before(createUser); + before(createOwner); after(cleanupUsers); it('fails due to wrong arumgent count', function () { @@ -519,7 +519,7 @@ describe('User', function () { }); describe('resetPasswordByIdentifier', function () { - before(createUser); + before(createOwner); after(cleanupUsers); it('fails due to unkown email', function (done) { @@ -554,7 +554,7 @@ describe('User', function () { }); describe('send invite', function () { - before(createUser); + before(createOwner); after(cleanupUsers); it('fails for unknown user', function (done) { diff --git a/src/user.js b/src/user.js index 4dc4c43c4..add6b2962 100644 --- a/src/user.js +++ b/src/user.js @@ -27,6 +27,7 @@ var assert = require('assert'), clientdb = require('./clientdb.js'), crypto = require('crypto'), DatabaseError = require('./databaseerror.js'), + groups = require('./groups.js'), hat = require('hat'), mailer = require('./mailer.js'), tokendb = require('./tokendb.js'), @@ -78,7 +79,7 @@ function listUsers(callback) { userdb.getAll(function (error, result) { if (error) return callback(new UserError(UserError.INTERNAL_ERROR, error)); - return callback(null, result.map(function (obj) { return _.pick(obj, 'id', 'username', 'email', 'admin', 'displayName'); })); + return callback(null, result.map(function (obj) { return _.pick(obj, 'id', 'username', 'email', 'displayName'); })); }); } @@ -113,13 +114,12 @@ function validateDisplayName(name) { return null; } -function createUser(username, password, email, displayName, admin, invitor, sendInvite, callback) { +function createUser(username, password, email, displayName, invitor, sendInvite, callback) { assert.strictEqual(typeof username, 'string'); assert.strictEqual(typeof password, 'string'); assert.strictEqual(typeof email, 'string'); assert.strictEqual(typeof displayName, 'string'); - assert.strictEqual(typeof admin, 'boolean'); - assert(invitor || admin); + assert(invitor); assert.strictEqual(typeof sendInvite, 'boolean'); assert.strictEqual(typeof callback, 'function'); @@ -147,7 +147,6 @@ function createUser(username, password, email, displayName, admin, invitor, send username: username, email: email, password: new Buffer(derivedKey, 'binary').toString('hex'), - admin: admin, salt: salt.toString('hex'), createdAt: now, modifiedAt: now, @@ -161,8 +160,6 @@ function createUser(username, password, email, displayName, admin, invitor, send callback(null, user); - // WARNING do not send email for admins (this can only be the case for the owner, the first user creation during activation) - if (!admin) mailer.userAdded(user, sendInvite); if (sendInvite) mailer.sendInvite(user, invitor); }); }); @@ -396,7 +393,15 @@ 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, true /* admin */, null /* invitor */, false /* sendInvite */, callback); + createUser(username, password, email, displayName, null /* invitor */, false /* sendInvite */, function (error) { + if (error) return callback(error); + + groups.addMember(groups.ADMIN_GROUP_ID, username, function (error) { + if (error) return callback(new UserError(UserError.INTERNAL_ERROR, error)); + + callback(); + }); + }); }); }