SamlLogHandler.js 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. const { SamlLog } = require('../../models/SamlLog')
  2. const SessionManager = require('../Authentication/SessionManager')
  3. const logger = require('@overleaf/logger')
  4. const { err: errSerializer } = require('@overleaf/logger/serializers')
  5. function log(req, data, samlAssertion) {
  6. let providerId, sessionId
  7. data = data || {}
  8. try {
  9. const samlLog = new SamlLog()
  10. const { path, query } = req
  11. const { saml } = req.session
  12. const userId = SessionManager.getLoggedInUserId(req.session)
  13. providerId = (req.session.saml?.universityId || '').toString()
  14. sessionId = (req.sessionID || '').toString().substr(0, 8)
  15. samlLog.providerId = providerId
  16. samlLog.sessionId = sessionId
  17. samlLog.path = path
  18. samlLog.userId = userId
  19. data.query = query
  20. data.samlSession = saml
  21. if (data.error instanceof Error) {
  22. const errSerialized = errSerializer(data.error)
  23. if (data.error.tryAgain) {
  24. errSerialized.tryAgain = data.error.tryAgain
  25. }
  26. req.logger.addFields({ providerId, sessionId, userId })
  27. data.error = errSerialized
  28. }
  29. if (samlAssertion) {
  30. const samlAssertionForLog = {
  31. assertionXml: samlAssertion.getAssertionXml(),
  32. responseXml: samlAssertion.getSamlResponseXml(),
  33. assertionJsonExtended: req.user_info,
  34. }
  35. samlLog.samlAssertion = JSON.stringify(samlAssertionForLog)
  36. }
  37. if (data.error) {
  38. data.body = {}
  39. if (req.body.email) {
  40. data.body.email = req.body.email
  41. }
  42. if (req.body.SAMLResponse) {
  43. data.body.SAMLResponse = req.body.SAMLResponse
  44. }
  45. }
  46. try {
  47. samlLog.jsonData = JSON.stringify(data)
  48. } catch (err) {
  49. // log but continue on data errors
  50. logger.error(
  51. { err, sessionId, providerId },
  52. 'SamlLog JSON.stringify Error'
  53. )
  54. }
  55. samlLog.save(err => {
  56. if (err) {
  57. logger.error({ err, sessionId, providerId }, 'SamlLog Error')
  58. }
  59. })
  60. } catch (err) {
  61. logger.error({ err, sessionId, providerId }, 'SamlLog Error')
  62. }
  63. }
  64. const SamlLogHandler = {
  65. log,
  66. }
  67. module.exports = SamlLogHandler