Skip to content

Commit baccaae

Browse files
committed
Fix issue with ability to create admin user by setting referrer
1 parent c674f86 commit baccaae

File tree

1 file changed

+49
-44
lines changed

1 file changed

+49
-44
lines changed

routes/user.js

+49-44
Original file line numberDiff line numberDiff line change
@@ -146,56 +146,61 @@ router.post('/admin/user/insert', common.restrict, (req, res) => {
146146
// set the account to admin if using the setup form. Eg: First user account
147147
let urlParts = url.parse(req.header('Referer'));
148148

149-
let isAdmin = false;
150-
if(urlParts.path === '/admin/setup'){
151-
isAdmin = true;
152-
}
149+
// Check number of users
150+
db.users.count({}, (err, userCount) => {
151+
let isAdmin = false;
153152

154-
let doc = {
155-
usersName: req.body.usersName,
156-
userEmail: req.body.userEmail,
157-
userPassword: bcrypt.hashSync(req.body.userPassword, 10),
158-
isAdmin: isAdmin
159-
};
160-
161-
// check for existing user
162-
db.users.findOne({'userEmail': req.body.userEmail}, (err, user) => {
163-
if(user){
164-
// user already exists with that email address
165-
console.error(colors.red('Failed to insert user, possibly already exists: ' + err));
166-
req.session.message = 'A user with that email address already exists';
167-
req.session.messageType = 'danger';
168-
res.redirect('/admin/user/new');
169-
return;
153+
// if no users, setup user as admin
154+
if(userCount === 0){
155+
isAdmin = true;
170156
}
171-
// email is ok to be used.
172-
db.users.insert(doc, (err, doc) => {
173-
// show the view
174-
if(err){
175-
if(doc){
176-
console.error(colors.red('Failed to insert user: ' + err));
177-
req.session.message = 'User exists';
178-
req.session.messageType = 'danger';
179-
res.redirect('/admin/user/edit/' + doc._id);
180-
return;
181-
}
182-
console.error(colors.red('Failed to insert user: ' + err));
183-
req.session.message = 'New user creation failed';
157+
158+
let doc = {
159+
usersName: req.body.usersName,
160+
userEmail: req.body.userEmail,
161+
userPassword: bcrypt.hashSync(req.body.userPassword, 10),
162+
isAdmin: isAdmin
163+
};
164+
165+
// check for existing user
166+
db.users.findOne({'userEmail': req.body.userEmail}, (err, user) => {
167+
if(user){
168+
// user already exists with that email address
169+
console.error(colors.red('Failed to insert user, possibly already exists: ' + err));
170+
req.session.message = 'A user with that email address already exists';
184171
req.session.messageType = 'danger';
185172
res.redirect('/admin/user/new');
186173
return;
187174
}
188-
req.session.message = 'User account inserted';
189-
req.session.messageType = 'success';
190-
191-
// if from setup we add user to session and redirect to login.
192-
// Otherwise we show users screen
193-
if(urlParts.path === '/admin/setup'){
194-
req.session.user = req.body.userEmail;
195-
res.redirect('/admin/login');
196-
return;
197-
}
198-
res.redirect('/admin/users');
175+
// email is ok to be used.
176+
db.users.insert(doc, (err, doc) => {
177+
// show the view
178+
if(err){
179+
if(doc){
180+
console.error(colors.red('Failed to insert user: ' + err));
181+
req.session.message = 'User exists';
182+
req.session.messageType = 'danger';
183+
res.redirect('/admin/user/edit/' + doc._id);
184+
return;
185+
}
186+
console.error(colors.red('Failed to insert user: ' + err));
187+
req.session.message = 'New user creation failed';
188+
req.session.messageType = 'danger';
189+
res.redirect('/admin/user/new');
190+
return;
191+
}
192+
req.session.message = 'User account inserted';
193+
req.session.messageType = 'success';
194+
195+
// if from setup we add user to session and redirect to login.
196+
// Otherwise we show users screen
197+
if(urlParts.path === '/admin/setup'){
198+
req.session.user = req.body.userEmail;
199+
res.redirect('/admin/login');
200+
return;
201+
}
202+
res.redirect('/admin/users');
203+
});
199204
});
200205
});
201206
});

0 commit comments

Comments
 (0)