SamlLogHandler.js 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  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. data.error = errSerialized
  27. }
  28. if (samlAssertion) {
  29. const samlAssertionForLog = {
  30. assertionXml: samlAssertion.getAssertionXml(),
  31. responseXml: samlAssertion.getSamlResponseXml(),
  32. assertionJsonExtended: req.user_info,
  33. }
  34. samlLog.samlAssertion = JSON.stringify(samlAssertionForLog)
  35. }
  36. if (data.error) {
  37. data.body = {}
  38. if (req.body.email) {
  39. data.body.email = req.body.email
  40. }
  41. if (req.body.SAMLResponse) {
  42. data.body.SAMLResponse = req.body.SAMLResponse
  43. }
  44. }
  45. try {
  46. samlLog.jsonData = JSON.stringify(data)
  47. } catch (err) {
  48. // log but continue on data errors
  49. logger.error(
  50. { err, sessionId, providerId },
  51. 'SamlLog JSON.stringify Error'
  52. )
  53. }
  54. samlLog.save(err => {
  55. if (err) {
  56. logger.error({ err, sessionId, providerId }, 'SamlLog Error')
  57. }
  58. })
  59. } catch (err) {
  60. logger.error({ err, sessionId, providerId }, 'SamlLog Error')
  61. }
  62. }
  63. const SamlLogHandler = {
  64. log,
  65. }
  66. module.exports = SamlLogHandler