serializers.js 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  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: 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. if (req.params) {
  31. const projectId =
  32. req.params.projectId || req.params.project_id || req.params.Project_id
  33. const userId = req.params.userId || req.params.user_id
  34. const docId = req.params.docId || req.params.doc_id
  35. if (projectId) {
  36. entry.projectId = projectId
  37. }
  38. if (userId) {
  39. entry.userId = userId
  40. }
  41. if (docId) {
  42. entry.docId = docId
  43. }
  44. }
  45. return entry
  46. }
  47. function resSerializer(res) {
  48. if (!res) {
  49. return res
  50. }
  51. return {
  52. statusCode: res.statusCode,
  53. headers: {
  54. 'content-length': res.getHeader && res.getHeader('content-length'),
  55. },
  56. }
  57. }
  58. function getRemoteIp(req) {
  59. if (req.ip) {
  60. return req.ip
  61. }
  62. if (req.socket) {
  63. if (req.socket.socket && req.socket.socket.remoteAddress) {
  64. return req.socket.socket.remoteAddress
  65. } else if (req.socket.remoteAddress) {
  66. return req.socket.remoteAddress
  67. }
  68. }
  69. return null
  70. }
  71. module.exports = { err: errSerializer, req: reqSerializer, res: resSerializer }