mirror of
https://github.com/overleaf/overleaf.git
synced 2025-01-24 07:23:43 +00:00
Merge pull request #5976 from overleaf/jk-login-audit-log-type
[web] Add 'method' info to login audit log GitOrigin-RevId: 093fe885bc1b688aebd640d6762f031c752191d4
This commit is contained in:
parent
d7365e2929
commit
c72ec548bb
5 changed files with 56 additions and 12 deletions
|
@ -81,6 +81,7 @@ const AuthenticationController = {
|
|||
}
|
||||
if (user) {
|
||||
// `user` is either a user object or false
|
||||
AuthenticationController.setAuditInfo(req, { method: 'Password login' })
|
||||
return AuthenticationController.finishLogin(user, req, res, next)
|
||||
} else {
|
||||
if (info.redir != null) {
|
||||
|
@ -99,6 +100,8 @@ const AuthenticationController = {
|
|||
return res.redirect('/login')
|
||||
} // OAuth2 'state' mismatch
|
||||
|
||||
const auditInfo = AuthenticationController.getAuditInfo(req)
|
||||
|
||||
const anonymousAnalyticsId = req.session.analyticsId
|
||||
const isNewUser = req.session.justRegistered || false
|
||||
|
||||
|
@ -128,20 +131,27 @@ const AuthenticationController = {
|
|||
AuthenticationController._getRedirectFromSession(req) || '/project'
|
||||
_loginAsyncHandlers(req, user, anonymousAnalyticsId, isNewUser)
|
||||
const userId = user._id
|
||||
UserAuditLogHandler.addEntry(userId, 'login', userId, req.ip, err => {
|
||||
if (err) {
|
||||
return next(err)
|
||||
}
|
||||
_afterLoginSessionSetup(req, user, function (err) {
|
||||
UserAuditLogHandler.addEntry(
|
||||
userId,
|
||||
'login',
|
||||
userId,
|
||||
req.ip,
|
||||
auditInfo,
|
||||
err => {
|
||||
if (err) {
|
||||
return next(err)
|
||||
}
|
||||
AuthenticationController._clearRedirectFromSession(req)
|
||||
AnalyticsRegistrationSourceHelper.clearSource(req.session)
|
||||
AnalyticsRegistrationSourceHelper.clearInbound(req.session)
|
||||
AsyncFormHelper.redirect(req, res, redir)
|
||||
})
|
||||
})
|
||||
_afterLoginSessionSetup(req, user, function (err) {
|
||||
if (err) {
|
||||
return next(err)
|
||||
}
|
||||
AuthenticationController._clearRedirectFromSession(req)
|
||||
AnalyticsRegistrationSourceHelper.clearSource(req.session)
|
||||
AnalyticsRegistrationSourceHelper.clearInbound(req.session)
|
||||
AsyncFormHelper.redirect(req, res, redir)
|
||||
})
|
||||
}
|
||||
)
|
||||
}
|
||||
)
|
||||
},
|
||||
|
@ -369,6 +379,17 @@ const AuthenticationController = {
|
|||
return AuthenticationController.requireBasicAuth(Settings.httpAuthUsers)
|
||||
},
|
||||
|
||||
setAuditInfo(req, info) {
|
||||
if (!req.__authAuditInfo) {
|
||||
req.__authAuditInfo = {}
|
||||
}
|
||||
Object.assign(req.__authAuditInfo, info)
|
||||
},
|
||||
|
||||
getAuditInfo(req) {
|
||||
return req.__authAuditInfo || {}
|
||||
},
|
||||
|
||||
setRedirectInSession(req, value) {
|
||||
if (value == null) {
|
||||
value =
|
||||
|
|
|
@ -84,7 +84,9 @@ async function setNewUserPassword(req, res, next) {
|
|||
})
|
||||
}
|
||||
}
|
||||
|
||||
AuthenticationController.setAuditInfo(req, {
|
||||
method: 'Password reset, set new password',
|
||||
})
|
||||
AuthenticationController.finishLogin(user, req, res, next)
|
||||
}
|
||||
|
||||
|
|
|
@ -69,6 +69,7 @@ describe('Authentication', function () {
|
|||
operation: 'login',
|
||||
ipAddress: '127.0.0.1',
|
||||
initiatorId: ObjectId(user.id),
|
||||
info: { method: 'Password login' },
|
||||
})
|
||||
})
|
||||
})
|
||||
|
|
|
@ -1188,6 +1188,25 @@ describe('AuthenticationController', function () {
|
|||
expect(this.next).to.have.been.calledWith(theError)
|
||||
expect(this.req.login).to.not.have.been.called
|
||||
})
|
||||
|
||||
it('should pass along auditInfo when present', function () {
|
||||
this.AuthenticationController.setAuditInfo(this.req, {
|
||||
method: 'Login',
|
||||
})
|
||||
this.AuthenticationController.finishLogin(
|
||||
this.user,
|
||||
this.req,
|
||||
this.res,
|
||||
this.next
|
||||
)
|
||||
expect(this.UserAuditLogHandler.addEntry).to.have.been.calledWith(
|
||||
this.user._id,
|
||||
'login',
|
||||
this.user._id,
|
||||
'42.42.42.42',
|
||||
{ method: 'Login' }
|
||||
)
|
||||
})
|
||||
})
|
||||
|
||||
describe('_afterLoginSessionSetup', function () {
|
||||
|
|
|
@ -61,6 +61,7 @@ describe('PasswordResetController', function () {
|
|||
(this.AuthenticationController = {
|
||||
getLoggedInUserId: sinon.stub(),
|
||||
finishLogin: sinon.stub(),
|
||||
setAuditInfo: sinon.stub(),
|
||||
}),
|
||||
'../User/UserGetter': (this.UserGetter = {
|
||||
promises: {
|
||||
|
|
Loading…
Reference in a new issue