admin.js 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. "use strict";
  2. var express = require('express');
  3. var router = express.Router();
  4. const Promise = require('bluebird');
  5. const validator = require('validator');
  6. const _ = require('lodash');
  7. /**
  8. * Admin
  9. */
  10. router.get('/', (req, res) => {
  11. res.redirect('/admin/profile');
  12. });
  13. router.get('/profile', (req, res) => {
  14. if(res.locals.isGuest) {
  15. return res.render('error-forbidden');
  16. }
  17. res.render('pages/admin/profile', { adminTab: 'profile' });
  18. });
  19. router.get('/stats', (req, res) => {
  20. if(res.locals.isGuest) {
  21. return res.render('error-forbidden');
  22. }
  23. Promise.all([
  24. db.Entry.count(),
  25. db.UplFile.count(),
  26. db.User.count()
  27. ]).spread((totalEntries, totalUploads, totalUsers) => {
  28. return res.render('pages/admin/stats', {
  29. totalEntries, totalUploads, totalUsers,
  30. adminTab: 'stats'
  31. }) || true;
  32. }).catch((err) => {
  33. throw err;
  34. });
  35. });
  36. router.get('/users', (req, res) => {
  37. if(!res.locals.rights.manage) {
  38. return res.render('error-forbidden');
  39. }
  40. db.User.find({})
  41. .select('-password -rights')
  42. .sort('name email')
  43. .exec().then((usrs) => {
  44. res.render('pages/admin/users', { adminTab: 'users', usrs });
  45. });
  46. });
  47. router.get('/users/:id', (req, res) => {
  48. if(!res.locals.rights.manage) {
  49. return res.render('error-forbidden');
  50. }
  51. if(!validator.isMongoId(req.params.id)) {
  52. return res.render('error-forbidden');
  53. }
  54. db.User.findById(req.params.id)
  55. .select('-password -providerId')
  56. .exec().then((usr) => {
  57. let usrOpts = {
  58. canChangeEmail: (usr.email !== 'guest' && usr.provider === 'local' && usr.email !== req.app.locals.appconfig.admin),
  59. canChangeName: (usr.email !== 'guest'),
  60. canChangePassword: (usr.email !== 'guest' && usr.provider === 'local'),
  61. canChangeRole: (usr.email !== 'guest' && !(usr.provider === 'local' && usr.email === req.app.locals.appconfig.admin)),
  62. canBeDeleted: (usr.email !== 'guest' && !(usr.provider === 'local' && usr.email === req.app.locals.appconfig.admin))
  63. };
  64. res.render('pages/admin/users-edit', { adminTab: 'users', usr, usrOpts });
  65. });
  66. });
  67. router.post('/users/:id', (req, res) => {
  68. if(!res.locals.rights.manage) {
  69. return res.status(401).json({ msg: 'Unauthorized' });
  70. }
  71. if(!validator.isMongoId(req.params.id)) {
  72. return res.status(400).json({ msg: 'Invalid User ID' });
  73. }
  74. return db.User.findById(req.params.id).then((usr) => {
  75. usr.name = _.trim(req.body.name);
  76. usr.rights = JSON.parse(req.body.rights);
  77. if(usr.provider === 'local' && req.body.password !== '********') {
  78. let nPwd = _.trim(req.body.password);
  79. if(nPwd.length < 6) {
  80. return Promise.reject(new Error('New Password too short!'))
  81. } else {
  82. return db.User.hashPassword(nPwd).then((pwd) => {
  83. usr.password = pwd;
  84. return usr.save();
  85. });
  86. }
  87. } else {
  88. return usr.save();
  89. }
  90. }).then(() => {
  91. return res.json({ msg: 'OK' });
  92. }).catch((err) => {
  93. res.status(400).json({ msg: err.message });
  94. })
  95. });
  96. router.get('/settings', (req, res) => {
  97. if(!res.locals.rights.manage) {
  98. return res.render('error-forbidden');
  99. }
  100. res.render('pages/admin/settings', { adminTab: 'settings' });
  101. });
  102. module.exports = router;