overleaf/services/real-time/app/coffee/HttpController.js

59 lines
2.1 KiB
JavaScript

/* eslint-disable
camelcase,
handle-callback-err,
*/
// TODO: This file was created by bulk-decaffeinate.
// Fix any style issues and re-enable lint.
/*
* decaffeinate suggestions:
* DS102: Remove unnecessary code created because of implicit returns
* DS207: Consider shorter variations of null checks
* Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md
*/
let HttpController;
const async = require("async");
module.exports = (HttpController = {
// The code in this controller is hard to unit test because of a lot of
// dependencies on internal socket.io methods. It is not critical to the running
// of ShareLaTeX, and is only used for getting stats about connected clients,
// and for checking internal state in acceptance tests. The acceptances tests
// should provide appropriate coverage.
_getConnectedClientView(ioClient, callback) {
if (callback == null) { callback = function(error, client) {}; }
const client_id = ioClient.id;
const {project_id, user_id, first_name, last_name, email, connected_time} = ioClient.ol_context;
const client = {client_id, project_id, user_id, first_name, last_name, email, connected_time};
client.rooms = [];
for (const name in ioClient.manager.roomClients[client_id]) {
const joined = ioClient.manager.roomClients[client_id][name];
if (joined && (name !== "")) {
client.rooms.push(name.replace(/^\//, "")); // Remove leading /
}
}
return callback(null, client);
},
getConnectedClients(req, res, next) {
const io = req.app.get("io");
const ioClients = io.sockets.clients();
return async.map(ioClients, HttpController._getConnectedClientView, function(error, clients) {
if (error != null) { return next(error); }
return res.json(clients);
});
},
getConnectedClient(req, res, next) {
const {client_id} = req.params;
const io = req.app.get("io");
const ioClient = io.sockets.sockets[client_id];
if (!ioClient) {
res.sendStatus(404);
return;
}
return HttpController._getConnectedClientView(ioClient, function(error, client) {
if (error != null) { return next(error); }
return res.json(client);
});
}
});