| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- logger = require "logger-sharelatex"
- metrics = require "../../metrics"
- MessageManager = require "./MessageManager"
- MessageFormatter = require "./MessageFormatter"
- SocketManager = require "../Sockets/SocketManager"
- AuthorizationManager = require "../Authorization/AuthorizationManager"
- module.exports = MessageController =
- DEFAULT_MESSAGE_LIMIT: 50
- sendMessage: (client, data, callback = (error) ->) ->
- content = data?.message?.content
- room_id = data?.room?.id
- return callback("malformed message") if not (content? and room_id?)
- client.get "id", (error, user_id) ->
- logger.log user_id: user_id, room_id: room_id, "sending message"
- AuthorizationManager.canClientSendMessageToRoom client, room_id, (error, authorized) ->
- if error?
- logger.err err:error, user_id:user_id, "something went wrong checking if canClientSendMessageToRoom"
- return callback("something went wrong")
- if authorized
- SocketManager.getClientAttributes client, ["id"], (error, values) ->
- if error?
- logger.err err:error, user_id:user_id, "something went wrong getClientAttributes"
- return callback("something went wrong")
- newMessageOpts =
- content: content
- room_id: room_id
- user_id: values[0]
- timestamp: Date.now()
- MessageManager.createMessage newMessageOpts, (error, message) ->
- if error?
- logger.err err:error, user_id:user_id, "something went wrong createMessage"
- return callback("something went wrong")
- MessageManager.populateMessagesWithUsers [message], (error, messages) ->
- if error?
- logger.err err:error, user_id:user_id, "something went wrong populateMessagesWithUsers"
- return callback("something went wrong")
- message = MessageFormatter.formatMessageForClientSide(messages[0])
- message.room =
- id: room_id
- SocketManager.emitToRoom data.room.id, "messageReceived", message:message
- metrics.inc "editor.instant-message"
- logger.log user_id: user_id, room_id: room_id, "sent message"
- callback()
- else
- logger.log user_id: user_id, room_id: room_id, "unauthorized attempt to send message"
- callback("unknown room")
- getMessages: (client, data, callback = (error, messages) ->) ->
- room_id = data?.room?.id
- return callback("malformed message") if not room_id?
- client.get "id", (error, user_id) ->
- logger.log user_id: user_id, room_id: room_id, "getting messages"
- AuthorizationManager.canClientReadMessagesInRoom client, room_id, (error, authorized) ->
- if error?
- logger.err err:error, user_id:user_id, "something went canClientReadMessagesInRoom"
- return callback("something went wrong")
- if authorized
- query = room_id: room_id
- if data.before?
- query.timestamp = $lt: data.before
- options =
- order_by: "timestamp"
- sort_order: -1
- limit: data.limit || MessageController.DEFAULT_MESSAGE_LIMIT
- MessageManager.getMessages query, options, (error, messages) ->
- if error?
- logger.err err:error, user_id:user_id, "something went getMessages"
- return callback("something went wrong")
- MessageManager.populateMessagesWithUsers messages, (error, messages) ->
- if error?
- logger.err err:error, user_id:user_id, "something went populateMessagesWithUsers"
- return callback("something went wrong")
- messages = MessageFormatter.formatMessagesForClientSide messages
- logger.log user_id: user_id, room_id: room_id, "got messages"
- callback null, messages
- else
- logger.log user_id: user_id, room_id: room_id, "unauthorized attempt to get messages"
- callback("unknown room")
|