[web] Managed Group Audit Logs for project management (#29584)

GitOrigin-RevId: 8edf4e580c001db3129c276d23e90ce9e82ac2ea
This commit is contained in:
Miguel Serrano
2025-11-13 09:08:29 +01:00
committed by Copybot
parent 44b79c895f
commit 7d0e75e4f7
2 changed files with 54 additions and 2 deletions

View File

@@ -3,7 +3,17 @@ import { ProjectAuditLogEntry } from '../../models/ProjectAuditLogEntry.js'
import { callbackify } from '@overleaf/promise-utils'
import SubscriptionLocator from '../Subscription/SubscriptionLocator.mjs'
const MANAGED_GROUP_PROJECT_EVENTS = ['accept-invite', 'project-created']
const MANAGED_GROUP_PROJECT_EVENTS = [
'accept-invite',
'project-created',
'project-deleted',
'project-archived',
'project-unarchived',
'project-trashed',
'project-untrashed',
'project-restored',
'project-cloned',
]
export default {
promises: {

View File

@@ -168,7 +168,12 @@ const _ProjectController = {
deleterUser: user,
ipAddress: req.ip,
})
ProjectAuditLogHandler.addEntryIfManagedInBackground(
projectId,
'project-deleted',
user._id,
req.ip
)
res.sendStatus(200)
},
@@ -176,6 +181,12 @@ const _ProjectController = {
const projectId = req.params.Project_id
const userId = SessionManager.getLoggedInUserId(req.session)
await ProjectDeleter.promises.archiveProject(projectId, userId)
ProjectAuditLogHandler.addEntryIfManagedInBackground(
projectId,
'project-archived',
userId,
req.ip
)
res.sendStatus(200)
},
@@ -183,6 +194,12 @@ const _ProjectController = {
const projectId = req.params.Project_id
const userId = SessionManager.getLoggedInUserId(req.session)
await ProjectDeleter.promises.unarchiveProject(projectId, userId)
ProjectAuditLogHandler.addEntryIfManagedInBackground(
projectId,
'project-unarchived',
userId,
req.ip
)
res.sendStatus(200)
},
@@ -190,6 +207,12 @@ const _ProjectController = {
const projectId = req.params.project_id
const userId = SessionManager.getLoggedInUserId(req.session)
await ProjectDeleter.promises.trashProject(projectId, userId)
ProjectAuditLogHandler.addEntryIfManagedInBackground(
projectId,
'project-trashed',
userId,
req.ip
)
res.sendStatus(200)
},
@@ -197,6 +220,12 @@ const _ProjectController = {
const projectId = req.params.project_id
const userId = SessionManager.getLoggedInUserId(req.session)
await ProjectDeleter.promises.untrashProject(projectId, userId)
ProjectAuditLogHandler.addEntryIfManagedInBackground(
projectId,
'project-untrashed',
userId,
req.ip
)
res.sendStatus(200)
},
@@ -212,8 +241,15 @@ const _ProjectController = {
},
async restoreProject(req, res) {
const user = SessionManager.getLoggedInUserId(req.session)
const projectId = req.params.Project_id
await ProjectDeleter.promises.restoreProject(projectId)
ProjectAuditLogHandler.addEntryIfManagedInBackground(
projectId,
'project-restored',
user._id,
req.ip
)
res.sendStatus(200)
},
@@ -235,6 +271,12 @@ const _ProjectController = {
projectName,
tags
)
ProjectAuditLogHandler.addEntryIfManagedInBackground(
projectId,
'project-cloned',
currentUser._id,
req.ip
)
res.json({
name: project.name,
lastUpdated: project.lastUpdated,