admin.js 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. "use strict";
  2. var express = require('express');
  3. var router = express.Router();
  4. const Promise = require('bluebird');
  5. const validator = require('validator');
  6. /**
  7. * Admin
  8. */
  9. router.get('/', (req, res) => {
  10. res.redirect('/admin/profile');
  11. });
  12. router.get('/profile', (req, res) => {
  13. if(res.locals.isGuest) {
  14. return res.render('error-forbidden');
  15. }
  16. res.render('pages/admin/profile', { adminTab: 'profile' });
  17. });
  18. router.get('/stats', (req, res) => {
  19. if(res.locals.isGuest) {
  20. return res.render('error-forbidden');
  21. }
  22. Promise.all([
  23. db.Entry.count(),
  24. db.UplFile.count(),
  25. db.User.count()
  26. ]).spread((totalEntries, totalUploads, totalUsers) => {
  27. return res.render('pages/admin/stats', {
  28. totalEntries, totalUploads, totalUsers,
  29. adminTab: 'stats'
  30. }) || true;
  31. }).catch((err) => {
  32. throw err;
  33. });
  34. });
  35. router.get('/users', (req, res) => {
  36. if(!res.locals.rights.manage) {
  37. return res.render('error-forbidden');
  38. }
  39. db.User.find({})
  40. .select('-password -rights')
  41. .sort('name email')
  42. .exec().then((usrs) => {
  43. res.render('pages/admin/users', { adminTab: 'users', usrs });
  44. });
  45. });
  46. router.get('/users/:id', (req, res) => {
  47. if(!res.locals.rights.manage) {
  48. return res.render('error-forbidden');
  49. }
  50. if(!validator.isMongoId(req.params.id)) {
  51. return res.render('error-forbidden');
  52. }
  53. db.User.findById(req.params.id)
  54. .select('-password -providerId')
  55. .exec().then((usr) => {
  56. let usrOpts = {
  57. canChangeEmail: (usr.email !== 'guest' && usr.provider === 'local' && usr.email !== req.app.locals.appconfig.admin),
  58. canChangeName: (usr.email !== 'guest'),
  59. canChangePassword: (usr.email !== 'guest' && usr.provider === 'local'),
  60. canChangeRole: (usr.email !== 'guest' && !(usr.provider === 'local' && usr.email === req.app.locals.appconfig.admin)),
  61. canBeDeleted: (usr.email !== 'guest' && !(usr.provider === 'local' && usr.email === req.app.locals.appconfig.admin))
  62. };
  63. res.render('pages/admin/users-edit', { adminTab: 'users', usr, usrOpts });
  64. });
  65. });
  66. router.get('/settings', (req, res) => {
  67. if(!res.locals.rights.manage) {
  68. return res.render('error-forbidden');
  69. }
  70. res.render('pages/admin/settings', { adminTab: 'settings' });
  71. });
  72. module.exports = router;