Fixed delete user account api
parent
1f84f77089
commit
7e6d6e9b8c
|
@ -133,6 +133,24 @@ $(document).ready(function (){
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
$('.userDelete').on('click', function(){
|
||||||
|
if(confirm('Are you sure you want to delete?')){
|
||||||
|
$.ajax({
|
||||||
|
method: 'POST',
|
||||||
|
url: '/admin/user/delete',
|
||||||
|
data: {
|
||||||
|
userId: $(this).attr('data-id')
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.done(function(msg){
|
||||||
|
showNotification(msg.message, 'success', true);
|
||||||
|
})
|
||||||
|
.fail(function(msg){
|
||||||
|
showNotification(msg.responseJSON.message, 'danger');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
$('#userEditForm').validator().on('submit', function(e){
|
$('#userEditForm').validator().on('submit', function(e){
|
||||||
if(!e.isDefaultPrevented()){
|
if(!e.isDefaultPrevented()){
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
|
|
|
@ -86,81 +86,43 @@ router.get('/admin/user/new', restrict, (req, res) => {
|
||||||
});
|
});
|
||||||
|
|
||||||
// delete user
|
// delete user
|
||||||
router.get('/admin/user/delete/:id', restrict, async (req, res) => {
|
router.post('/admin/user/delete', restrict, async (req, res) => {
|
||||||
const db = req.app.db;
|
const db = req.app.db;
|
||||||
|
|
||||||
// userId
|
// userId
|
||||||
if(req.session.isAdmin !== true){
|
if(req.session.isAdmin !== true){
|
||||||
if(req.apiAuthenticated){
|
res.status(400).json({ message: 'Access denied' });
|
||||||
res.status(400).json({ message: 'Access denied' });
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
req.session.message = 'Access denied.';
|
|
||||||
req.session.messageType = 'danger';
|
|
||||||
res.redirect('/admin/users');
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Cannot delete your own account
|
// Cannot delete your own account
|
||||||
if(req.session.userId === req.params.id){
|
if(req.session.userId === req.body.userId){
|
||||||
if(req.apiAuthenticated){
|
res.status(400).json({ message: 'Unable to delete own user account' });
|
||||||
res.status(400).json({ message: 'Unable to delete own user account' });
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
req.session.message = 'Unable to delete own user account.';
|
|
||||||
req.session.messageType = 'danger';
|
|
||||||
res.redirect('/admin/users');
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const user = await db.users.findOne({ _id: common.getId(req.params.id) });
|
const user = await db.users.findOne({ _id: common.getId(req.body.userId) });
|
||||||
|
|
||||||
// If user is not found
|
// If user is not found
|
||||||
if(!user){
|
if(!user){
|
||||||
if(req.apiAuthenticated){
|
res.status(400).json({ message: 'User not found.' });
|
||||||
res.status(400).json({ message: 'User not found.' });
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
req.session.message = 'User not found.';
|
|
||||||
req.session.messageType = 'danger';
|
|
||||||
res.redirect('/admin/users');
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Cannot delete the original user/owner
|
// Cannot delete the original user/owner
|
||||||
if(user.isOwner){
|
if(user.isOwner){
|
||||||
if(req.apiAuthenticated){
|
res.status(400).json({ message: 'Access denied.' });
|
||||||
res.status(400).json({ message: 'Access denied.' });
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
req.session.message = 'Access denied.';
|
|
||||||
req.session.messageType = 'danger';
|
|
||||||
res.redirect('/admin/users');
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
try{
|
try{
|
||||||
await db.users.deleteOne({ _id: common.getId(req.params.id) }, {});
|
await db.users.deleteOne({ _id: common.getId(req.body.userId) }, {});
|
||||||
if(req.apiAuthenticated){
|
res.status(200).json({ message: 'User deleted.' });
|
||||||
res.status(200).json({ message: 'User deleted.' });
|
return;
|
||||||
return;
|
|
||||||
}
|
|
||||||
req.session.message = 'User deleted.';
|
|
||||||
req.session.messageType = 'success';
|
|
||||||
res.redirect('/admin/users');
|
|
||||||
}catch(ex){
|
}catch(ex){
|
||||||
console.log('Failed to delete user', ex);
|
console.log('Failed to delete user', ex);
|
||||||
if(req.apiAuthenticated){
|
res.status(200).json({ message: 'Cannot delete user' });
|
||||||
res.status(200).json({ message: 'Cannot delete user' });
|
return;
|
||||||
return;
|
|
||||||
}
|
|
||||||
req.session.message = 'Cannot delete user';
|
|
||||||
req.session.messageType = 'danger';
|
|
||||||
res.redirect('/admin/users');
|
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
@ -49,16 +49,22 @@ test('[Fail] Incorrect user password', async t => {
|
||||||
|
|
||||||
test('[Fail] Delete own user account', async t => {
|
test('[Fail] Delete own user account', async t => {
|
||||||
const res = await g.request
|
const res = await g.request
|
||||||
.get(`/admin/user/delete/${g.users[0]._id}`)
|
.post('/admin/user/delete')
|
||||||
.expect(302);
|
.send({
|
||||||
t.deepEqual(res.header['location'], '/admin/users');
|
userId: g.users[0]._id
|
||||||
|
})
|
||||||
|
.expect(400);
|
||||||
|
t.deepEqual(res.body.message, 'Unable to delete own user account');
|
||||||
});
|
});
|
||||||
|
|
||||||
test('[Fail] Delete invalid user ID', async t => {
|
test('[Fail] Delete invalid user ID', async t => {
|
||||||
const res = await g.request
|
const res = await g.request
|
||||||
.get('/admin/user/delete/invalid_user_id')
|
.post('/admin/user/delete')
|
||||||
.expect(302);
|
.send({
|
||||||
t.deepEqual(res.header['location'], '/admin/users');
|
userId: 'invalid_user_id'
|
||||||
|
})
|
||||||
|
.expect(400);
|
||||||
|
t.deepEqual(res.body.message, 'User not found.');
|
||||||
});
|
});
|
||||||
|
|
||||||
test('[Success] Create new user', async t => {
|
test('[Success] Create new user', async t => {
|
||||||
|
|
|
@ -19,7 +19,7 @@
|
||||||
{{/isAnAdmin}}
|
{{/isAnAdmin}}
|
||||||
{{#isAnAdmin ../session.isAdmin}}
|
{{#isAnAdmin ../session.isAdmin}}
|
||||||
<a href="/admin/user/edit/{{../this._id}}"><span class="glyphicon glyphicon-pencil" aria-hidden="true"></a>
|
<a href="/admin/user/edit/{{../this._id}}"><span class="glyphicon glyphicon-pencil" aria-hidden="true"></a>
|
||||||
<a href="/admin/user/delete/{{../this._id}}" onclick="return confirm('Are you sure you want to delete?')"><span class="glyphicon glyphicon-trash" aria-hidden="true"></a>
|
<a href="#" class="userDelete" data-id="{{../this._id}}"><span class="glyphicon glyphicon-trash" aria-hidden="true"></a>
|
||||||
{{/isAnAdmin}}
|
{{/isAnAdmin}}
|
||||||
</span>
|
</span>
|
||||||
</li>
|
</li>
|
||||||
|
|
Loading…
Reference in New Issue