MessageController.coffee 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. logger = require "logger-sharelatex"
  2. metrics = require "../../metrics"
  3. MessageManager = require "./MessageManager"
  4. MessageFormatter = require "./MessageFormatter"
  5. SocketManager = require "../Sockets/SocketManager"
  6. AuthorizationManager = require "../Authorization/AuthorizationManager"
  7. module.exports = MessageController =
  8. DEFAULT_MESSAGE_LIMIT: 50
  9. sendMessage: (client, data, callback = (error) ->) ->
  10. content = data?.message?.content
  11. room_id = data?.room?.id
  12. return callback("malformed message") if not (content? and room_id?)
  13. client.get "id", (error, user_id) ->
  14. logger.log user_id: user_id, room_id: room_id, "sending message"
  15. AuthorizationManager.canClientSendMessageToRoom client, room_id, (error, authorized) ->
  16. if error?
  17. logger.err err:error, user_id:user_id, "something went wrong checking if canClientSendMessageToRoom"
  18. return callback("something went wrong")
  19. if authorized
  20. SocketManager.getClientAttributes client, ["id"], (error, values) ->
  21. if error?
  22. logger.err err:error, user_id:user_id, "something went wrong getClientAttributes"
  23. return callback("something went wrong")
  24. newMessageOpts =
  25. content: content
  26. room_id: room_id
  27. user_id: values[0]
  28. timestamp: Date.now()
  29. MessageManager.createMessage newMessageOpts, (error, message) ->
  30. if error?
  31. logger.err err:error, user_id:user_id, "something went wrong createMessage"
  32. return callback("something went wrong")
  33. MessageManager.populateMessagesWithUsers [message], (error, messages) ->
  34. if error?
  35. logger.err err:error, user_id:user_id, "something went wrong populateMessagesWithUsers"
  36. return callback("something went wrong")
  37. message = MessageFormatter.formatMessageForClientSide(messages[0])
  38. message.room =
  39. id: room_id
  40. SocketManager.emitToRoom data.room.id, "messageReceived", message:message
  41. metrics.inc "editor.instant-message"
  42. logger.log user_id: user_id, room_id: room_id, "sent message"
  43. callback()
  44. else
  45. logger.log user_id: user_id, room_id: room_id, "unauthorized attempt to send message"
  46. callback("unknown room")
  47. getMessages: (client, data, callback = (error, messages) ->) ->
  48. room_id = data?.room?.id
  49. return callback("malformed message") if not room_id?
  50. client.get "id", (error, user_id) ->
  51. logger.log user_id: user_id, room_id: room_id, "getting messages"
  52. AuthorizationManager.canClientReadMessagesInRoom client, room_id, (error, authorized) ->
  53. if error?
  54. logger.err err:error, user_id:user_id, "something went canClientReadMessagesInRoom"
  55. return callback("something went wrong")
  56. if authorized
  57. query = room_id: room_id
  58. if data.before?
  59. query.timestamp = $lt: data.before
  60. options =
  61. order_by: "timestamp"
  62. sort_order: -1
  63. limit: data.limit || MessageController.DEFAULT_MESSAGE_LIMIT
  64. MessageManager.getMessages query, options, (error, messages) ->
  65. if error?
  66. logger.err err:error, user_id:user_id, "something went getMessages"
  67. return callback("something went wrong")
  68. MessageManager.populateMessagesWithUsers messages, (error, messages) ->
  69. if error?
  70. logger.err err:error, user_id:user_id, "something went populateMessagesWithUsers"
  71. return callback("something went wrong")
  72. messages = MessageFormatter.formatMessagesForClientSide messages
  73. logger.log user_id: user_id, room_id: room_id, "got messages"
  74. callback null, messages
  75. else
  76. logger.log user_id: user_id, room_id: room_id, "unauthorized attempt to get messages"
  77. callback("unknown room")