saml session/error logging

GitOrigin-RevId: bc5e5cafbd4c5da7ba33891fa738efa9a95c5332
This commit is contained in:
Ersun Warncke 2019-11-05 10:09:37 -04:00 committed by sharelatex
parent c6e5f3dda6
commit 7ea1a03c6b
3 changed files with 62 additions and 0 deletions

View file

@ -2,6 +2,8 @@ let ErrorController
const Errors = require('./Errors')
const logger = require('logger-sharelatex')
const AuthenticationController = require('../Authentication/AuthenticationController')
const SamlLogHandler = require('../SamlLog/SamlLogHandler')
const _ = require('lodash')
module.exports = ErrorController = {
notFound(req, res) {
@ -21,6 +23,20 @@ module.exports = ErrorController = {
handleError(error, req, res, next) {
const user = AuthenticationController.getSessionUser(req)
// log errors related to SAML flow
if (req.session.saml) {
const providerId = _.get(req.session.saml, 'universityId', '').toString()
SamlLogHandler.log(providerId, req.sessionID, {
error: {
message: error && error.message,
stack: error && error.stack
},
path: req.path,
query: req.query,
saml: req.session.saml,
user_id: user && user._id
})
}
if (error.code === 'EBADCSRFTOKEN') {
logger.warn(
{ err: error, url: req.url, method: req.method, user },

View file

@ -0,0 +1,20 @@
const { SamlLog } = require('../../models/SamlLog')
const logger = require('logger-sharelatex')
function log(providerId, sessionId, data) {
const samlLog = new SamlLog()
samlLog.providerId = providerId
samlLog.sessionId = sessionId
samlLog.data = data
samlLog.save(err => {
if (err) {
logger.error({ err }, 'SamlLog Error')
}
})
}
const SamlLogHandler = {
log
}
module.exports = SamlLogHandler

View file

@ -0,0 +1,26 @@
const Settings = require('settings-sharelatex')
const mongoose = require('mongoose')
const { Schema } = mongoose
const SamlLogSchema = new Schema(
{
createdAt: { type: Date, default: () => new Date() },
data: { type: Object, default: {} },
providerId: { type: String, default: '' },
sessionId: { type: String, default: '' }
},
{
collection: 'samlLogs'
}
)
const conn = mongoose.createConnection(Settings.mongo.url, {
server: { poolSize: Settings.mongo.poolSize || 10 },
config: { autoIndex: false }
})
const SamlLog = conn.model('SamlLog', SamlLogSchema)
mongoose.model('SamlLog', SamlLogSchema)
exports.SamlLog = SamlLog
exports.SamlLogSchema = SamlLogSchema