From 536118b0cfc8bfe1eeded8fd42b08abb1f8f73a2 Mon Sep 17 00:00:00 2001 From: James Allen Date: Tue, 3 Mar 2015 17:15:19 +0000 Subject: [PATCH] Relay messages received via HTTP into the project --- .../real-time/app/coffee/HttpApiController.coffee | 8 ++++++++ services/real-time/app/coffee/Router.coffee | 12 ++++++++++++ .../app/coffee/WebsocketLoadBalancer.coffee | 1 + services/real-time/config/settings.defaults.coffee | 2 ++ services/real-time/package.json | 2 ++ 5 files changed, 25 insertions(+) create mode 100644 services/real-time/app/coffee/HttpApiController.coffee diff --git a/services/real-time/app/coffee/HttpApiController.coffee b/services/real-time/app/coffee/HttpApiController.coffee new file mode 100644 index 0000000000..faa06b9822 --- /dev/null +++ b/services/real-time/app/coffee/HttpApiController.coffee @@ -0,0 +1,8 @@ +WebsocketLoadBalancer = require "./WebsocketLoadBalancer" +logger = require "logger-sharelatex" + +module.exports = HttpApiController = + sendMessage: (req, res, next) -> + logger.log {message: req.params.message}, "sending message" + WebsocketLoadBalancer.emitToRoom req.params.project_id, req.params.message, req.body + res.send 204 # No content \ No newline at end of file diff --git a/services/real-time/app/coffee/Router.coffee b/services/real-time/app/coffee/Router.coffee index da26d46015..0fee1cb837 100644 --- a/services/real-time/app/coffee/Router.coffee +++ b/services/real-time/app/coffee/Router.coffee @@ -1,8 +1,18 @@ metrics = require "metrics-sharelatex" logger = require "logger-sharelatex" +settings = require "settings-sharelatex" WebsocketController = require "./WebsocketController" HttpController = require "./HttpController" +HttpApiController = require "./HttpApiController" Utils = require "./Utils" +bodyParser = require "body-parser" + +basicAuth = require('basic-auth-connect') +httpAuth = basicAuth (user, pass)-> + isValid = user == settings.internal.realTime.user and pass == settings.internal.realTime.pass + if !isValid + logger.err user:user, pass:pass, "invalid login details" + return isValid module.exports = Router = _handleError: (callback = ((error) ->), error, client, method, extraAttrs = {}) -> @@ -19,6 +29,8 @@ module.exports = Router = app.set("io", io) app.get "/clients", HttpController.getConnectedClients app.get "/clients/:client_id", HttpController.getConnectedClient + + app.post "/project/:project_id/message/:message", httpAuth, bodyParser.json(limit: "5mb"), HttpApiController.sendMessage session.on 'connection', (error, client, session) -> if error? diff --git a/services/real-time/app/coffee/WebsocketLoadBalancer.coffee b/services/real-time/app/coffee/WebsocketLoadBalancer.coffee index 3c2c49580c..38a1029d83 100644 --- a/services/real-time/app/coffee/WebsocketLoadBalancer.coffee +++ b/services/real-time/app/coffee/WebsocketLoadBalancer.coffee @@ -12,6 +12,7 @@ module.exports = WebsocketLoadBalancer = if !room_id? logger.warn {message, payload}, "no room_id provided, ignoring emitToRoom" return + logger.log {room_id, message, payload}, "emitting to room" @rclientPub.publish "editor-events", JSON.stringify room_id: room_id message: message diff --git a/services/real-time/config/settings.defaults.coffee b/services/real-time/config/settings.defaults.coffee index ffc64cabf7..50abd714c4 100644 --- a/services/real-time/config/settings.defaults.coffee +++ b/services/real-time/config/settings.defaults.coffee @@ -9,6 +9,8 @@ module.exports = realTime: port: 3026 host: "localhost" + user: "sharelatex" + pass: "password" apis: web: diff --git a/services/real-time/package.json b/services/real-time/package.json index 56a13842a9..648e57abed 100644 --- a/services/real-time/package.json +++ b/services/real-time/package.json @@ -9,6 +9,8 @@ }, "dependencies": { "async": "^0.9.0", + "basic-auth-connect": "^1.0.0", + "body-parser": "^1.12.0", "connect-redis": "^2.1.0", "cookie-parser": "^1.3.3", "express": "^4.10.1",