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){ | ||||
|         if(!e.isDefaultPrevented()){ | ||||
|             e.preventDefault(); | ||||
|  |  | |||
|  | @ -86,81 +86,43 @@ router.get('/admin/user/new', restrict, (req, res) => { | |||
| }); | ||||
| 
 | ||||
| // 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; | ||||
| 
 | ||||
|     // userId
 | ||||
|     if(req.session.isAdmin !== true){ | ||||
|         if(req.apiAuthenticated){ | ||||
|             res.status(400).json({ message: 'Access denied' }); | ||||
|             return; | ||||
|         } | ||||
| 
 | ||||
|         req.session.message = 'Access denied.'; | ||||
|         req.session.messageType = 'danger'; | ||||
|         res.redirect('/admin/users'); | ||||
|         res.status(400).json({ message: 'Access denied' }); | ||||
|         return; | ||||
|     } | ||||
| 
 | ||||
|     // Cannot delete your own account
 | ||||
|     if(req.session.userId === req.params.id){ | ||||
|         if(req.apiAuthenticated){ | ||||
|             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'); | ||||
|     if(req.session.userId === req.body.userId){ | ||||
|         res.status(400).json({ message: 'Unable to delete own user account' }); | ||||
|         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){ | ||||
|         if(req.apiAuthenticated){ | ||||
|             res.status(400).json({ message: 'User not found.' }); | ||||
|             return; | ||||
|         } | ||||
| 
 | ||||
|         req.session.message = 'User not found.'; | ||||
|         req.session.messageType = 'danger'; | ||||
|         res.redirect('/admin/users'); | ||||
|         res.status(400).json({ message: 'User not found.' }); | ||||
|         return; | ||||
|     } | ||||
| 
 | ||||
|     // Cannot delete the original user/owner
 | ||||
|     if(user.isOwner){ | ||||
|         if(req.apiAuthenticated){ | ||||
|             res.status(400).json({ message: 'Access denied.' }); | ||||
|             return; | ||||
|         } | ||||
| 
 | ||||
|         req.session.message = 'Access denied.'; | ||||
|         req.session.messageType = 'danger'; | ||||
|         res.redirect('/admin/users'); | ||||
|         res.status(400).json({ message: 'Access denied.' }); | ||||
|         return; | ||||
|     } | ||||
| 
 | ||||
|     try{ | ||||
|         await db.users.deleteOne({ _id: common.getId(req.params.id) }, {}); | ||||
|         if(req.apiAuthenticated){ | ||||
|             res.status(200).json({ message: 'User deleted.' }); | ||||
|             return; | ||||
|         } | ||||
|         req.session.message = 'User deleted.'; | ||||
|         req.session.messageType = 'success'; | ||||
|         res.redirect('/admin/users'); | ||||
|         await db.users.deleteOne({ _id: common.getId(req.body.userId) }, {}); | ||||
|         res.status(200).json({ message: 'User deleted.' }); | ||||
|         return; | ||||
|     }catch(ex){ | ||||
|         console.log('Failed to delete user', ex); | ||||
|         if(req.apiAuthenticated){ | ||||
|             res.status(200).json({ message: 'Cannot delete user' }); | ||||
|             return; | ||||
|         } | ||||
|         req.session.message = 'Cannot delete user'; | ||||
|         req.session.messageType = 'danger'; | ||||
|         res.redirect('/admin/users'); | ||||
|         res.status(200).json({ message: 'Cannot delete user' }); | ||||
|         return; | ||||
|     }; | ||||
| }); | ||||
| 
 | ||||
|  |  | |||
|  | @ -49,16 +49,22 @@ test('[Fail] Incorrect user password', async t => { | |||
| 
 | ||||
| test('[Fail] Delete own user account', async t => { | ||||
|     const res = await g.request | ||||
|         .get(`/admin/user/delete/${g.users[0]._id}`) | ||||
|         .expect(302); | ||||
|     t.deepEqual(res.header['location'], '/admin/users'); | ||||
|         .post('/admin/user/delete') | ||||
|         .send({ | ||||
|             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 => { | ||||
|     const res = await g.request | ||||
|         .get('/admin/user/delete/invalid_user_id') | ||||
|         .expect(302); | ||||
|     t.deepEqual(res.header['location'], '/admin/users'); | ||||
|         .post('/admin/user/delete') | ||||
|         .send({ | ||||
|             userId: 'invalid_user_id' | ||||
|         }) | ||||
|         .expect(400); | ||||
|     t.deepEqual(res.body.message, 'User not found.'); | ||||
| }); | ||||
| 
 | ||||
| test('[Success] Create new user', async t => { | ||||
|  |  | |||
|  | @ -19,7 +19,7 @@ | |||
|                             {{/isAnAdmin}} | ||||
|                             {{#isAnAdmin ../session.isAdmin}} | ||||
|                                 <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}} | ||||
| 						</span> | ||||
| 					</li> | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue