AdminController.js 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. const logger = require('@overleaf/logger')
  2. const http = require('http')
  3. const https = require('https')
  4. const Settings = require('@overleaf/settings')
  5. const TpdsUpdateSender = require('../ThirdPartyDataStore/TpdsUpdateSender')
  6. const TpdsProjectFlusher = require('../ThirdPartyDataStore/TpdsProjectFlusher')
  7. const EditorRealTimeController = require('../Editor/EditorRealTimeController')
  8. const SystemMessageManager = require('../SystemMessages/SystemMessageManager')
  9. const AdminController = {
  10. _sendDisconnectAllUsersMessage: delay => {
  11. return EditorRealTimeController.emitToAll(
  12. 'forceDisconnect',
  13. 'Sorry, we are performing a quick update to the editor and need to close it down. Please refresh the page to continue.',
  14. delay
  15. )
  16. },
  17. index: (req, res, next) => {
  18. let url
  19. const openSockets = {}
  20. for (url in http.globalAgent.sockets) {
  21. openSockets[`http://${url}`] = http.globalAgent.sockets[url].map(
  22. socket => socket._httpMessage.path
  23. )
  24. }
  25. for (url in https.globalAgent.sockets) {
  26. openSockets[`https://${url}`] = https.globalAgent.sockets[url].map(
  27. socket => socket._httpMessage.path
  28. )
  29. }
  30. SystemMessageManager.getMessagesFromDB(function (error, systemMessages) {
  31. if (error) {
  32. return next(error)
  33. }
  34. res.render('admin/index', {
  35. title: 'System Admin',
  36. openSockets,
  37. systemMessages,
  38. })
  39. })
  40. },
  41. disconnectAllUsers: (req, res) => {
  42. logger.warn('disconecting everyone')
  43. const delay = (req.query && req.query.delay) > 0 ? req.query.delay : 10
  44. AdminController._sendDisconnectAllUsersMessage(delay)
  45. res.sendStatus(200)
  46. },
  47. openEditor(req, res) {
  48. logger.warn('opening editor')
  49. Settings.editorIsOpen = true
  50. res.sendStatus(200)
  51. },
  52. closeEditor(req, res) {
  53. logger.warn('closing editor')
  54. Settings.editorIsOpen = req.body.isOpen
  55. res.sendStatus(200)
  56. },
  57. flushProjectToTpds(req, res, next) {
  58. TpdsProjectFlusher.flushProjectToTpds(req.body.project_id, error => {
  59. if (error) {
  60. return next(error)
  61. }
  62. res.sendStatus(200)
  63. })
  64. },
  65. pollDropboxForUser(req, res) {
  66. const { user_id: userId } = req.body
  67. TpdsUpdateSender.pollDropboxForUser(userId, () => res.sendStatus(200))
  68. },
  69. createMessage(req, res, next) {
  70. SystemMessageManager.createMessage(req.body.content, function (error) {
  71. if (error) {
  72. return next(error)
  73. }
  74. res.sendStatus(200)
  75. })
  76. },
  77. clearMessages(req, res, next) {
  78. SystemMessageManager.clearMessages(function (error) {
  79. if (error) {
  80. return next(error)
  81. }
  82. res.sendStatus(200)
  83. })
  84. },
  85. }
  86. module.exports = AdminController