serializers.js 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. const OError = require('@overleaf/o-error')
  2. function errSerializer(err) {
  3. if (!err) {
  4. return err
  5. }
  6. return {
  7. message: err.message,
  8. name: err.name,
  9. stack: err.stack && OError.getFullStack(err),
  10. info: OError.getFullInfo(err),
  11. code: err.code,
  12. signal: err.signal,
  13. }
  14. }
  15. function reqSerializer(req) {
  16. if (!req) {
  17. return req
  18. }
  19. const headers = req.headers || {}
  20. const entry = {
  21. method: req.method,
  22. url: req.originalUrl || req.url,
  23. remoteAddress: getRemoteIp(req),
  24. headers: {
  25. referer: headers.referer || headers.referrer,
  26. 'user-agent': headers['user-agent'],
  27. 'content-length': headers['content-length'],
  28. },
  29. }
  30. const projectId =
  31. req.params.projectId || req.params.project_id || req.params.Project_id
  32. const userId = req.params.userId || req.params.user_id
  33. const docId = req.params.docId || req.params.doc_id
  34. if (projectId) {
  35. entry.projectId = projectId
  36. }
  37. if (userId) {
  38. entry.userId = userId
  39. }
  40. if (docId) {
  41. entry.docId = docId
  42. }
  43. return entry
  44. }
  45. function resSerializer(res) {
  46. if (!res) {
  47. return res
  48. }
  49. return {
  50. statusCode: res.statusCode,
  51. headers: {
  52. 'content-length': res.getHeader && res.getHeader('content-length'),
  53. },
  54. }
  55. }
  56. function getRemoteIp(req) {
  57. if (req.ip) {
  58. return req.ip
  59. }
  60. if (req.socket) {
  61. if (req.socket.socket && req.socket.socket.remoteAddress) {
  62. return req.socket.socket.remoteAddress
  63. } else if (req.socket.remoteAddress) {
  64. return req.socket.remoteAddress
  65. }
  66. }
  67. return null
  68. }
  69. module.exports = { err: errSerializer, req: reqSerializer, res: resSerializer }