Przeglądaj źródła

Relay messages received via HTTP into the project

James Allen 11 lat temu
rodzic
commit
536118b0cf

+ 8 - 0
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

+ 12 - 0
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?

+ 1 - 0
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

+ 2 - 0
services/real-time/config/settings.defaults.coffee

@@ -9,6 +9,8 @@ module.exports =
 		realTime:
 			port: 3026
 			host: "localhost"
+			user: "sharelatex"
+			pass: "password"
 			
 	apis:
 		web:

+ 2 - 0
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",