Files
overleaf-cep/services/web/app/src/Features/ServerAdmin/AdminController.js
M Fahru 5c44fb8e9d Merge pull request #18281 from overleaf/mf-decaffeinate-server-admin-controller
[web][admin panel] Decaf cleanup of AdminController

GitOrigin-RevId: fca50565e140435b833c303d2a0dfac7449c3e17
2024-05-15 08:05:24 +00:00

98 lines
2.7 KiB
JavaScript

const logger = require('@overleaf/logger')
const http = require('http')
const https = require('https')
const Settings = require('@overleaf/settings')
const TpdsUpdateSender = require('../ThirdPartyDataStore/TpdsUpdateSender')
const TpdsProjectFlusher = require('../ThirdPartyDataStore/TpdsProjectFlusher')
const EditorRealTimeController = require('../Editor/EditorRealTimeController')
const SystemMessageManager = require('../SystemMessages/SystemMessageManager')
const AdminController = {
_sendDisconnectAllUsersMessage: delay => {
return EditorRealTimeController.emitToAll(
'forceDisconnect',
'Sorry, we are performing a quick update to the editor and need to close it down. Please refresh the page to continue.',
delay
)
},
index: (req, res, next) => {
let url
const openSockets = {}
for (url in http.globalAgent.sockets) {
openSockets[`http://${url}`] = http.globalAgent.sockets[url].map(
socket => socket._httpMessage.path
)
}
for (url in https.globalAgent.sockets) {
openSockets[`https://${url}`] = https.globalAgent.sockets[url].map(
socket => socket._httpMessage.path
)
}
SystemMessageManager.getMessagesFromDB(function (error, systemMessages) {
if (error) {
return next(error)
}
res.render('admin/index', {
title: 'System Admin',
openSockets,
systemMessages,
})
})
},
disconnectAllUsers: (req, res) => {
logger.warn('disconecting everyone')
const delay = (req.query && req.query.delay) > 0 ? req.query.delay : 10
AdminController._sendDisconnectAllUsersMessage(delay)
res.sendStatus(200)
},
openEditor(req, res) {
logger.warn('opening editor')
Settings.editorIsOpen = true
res.sendStatus(200)
},
closeEditor(req, res) {
logger.warn('closing editor')
Settings.editorIsOpen = req.body.isOpen
res.sendStatus(200)
},
flushProjectToTpds(req, res, next) {
TpdsProjectFlusher.flushProjectToTpds(req.body.project_id, error => {
if (error) {
return next(error)
}
res.sendStatus(200)
})
},
pollDropboxForUser(req, res) {
const { user_id: userId } = req.body
TpdsUpdateSender.pollDropboxForUser(userId, () => res.sendStatus(200))
},
createMessage(req, res, next) {
SystemMessageManager.createMessage(req.body.content, function (error) {
if (error) {
return next(error)
}
res.sendStatus(200)
})
},
clearMessages(req, res, next) {
SystemMessageManager.clearMessages(function (error) {
if (error) {
return next(error)
}
res.sendStatus(200)
})
},
}
module.exports = AdminController