UNPKG

@flowfuse/flowfuse

Version:

An open source low-code development platform

131 lines (128 loc) 7.4 kB
const { generateBody, triggerObject } = require('./formatters') // Audit Logging of project scoped events module.exports = { getLoggers (app) { const project = { async created (actionedBy, error, team, project) { await log('project.created', actionedBy, project?.id, generateBody({ error, team, project })) }, async deleted (actionedBy, error, team, project) { await log('project.deleted', actionedBy, project?.id, generateBody({ error, team, project })) }, async started (actionedBy, error, project) { await log('project.started', actionedBy, project?.id, generateBody({ error, project })) }, async startFailed (actionedBy, error, project) { await log('project.start-failed', actionedBy || 0, project?.id, generateBody({ error })) }, async stopped (actionedBy, error, project) { await log('project.stopped', actionedBy, project?.id, generateBody({ error, project })) }, async restarted (actionedBy, error, project) { await log('project.restarted', actionedBy, project?.id, generateBody({ error, project })) }, async suspended (actionedBy, error, project) { await log('project.suspended', actionedBy, project?.id, generateBody({ error, project })) }, async copied (actionedBy, error, project, targetProject) { await log('project.copied', actionedBy, project?.id, generateBody({ error, project, targetProject })) }, async imported (actionedBy, error, project, sourceProject, sourceDevice) { await log('project.imported', actionedBy, project?.id, generateBody({ error, project, sourceProject, sourceDevice })) }, async flowImported (actionedBy, error, project) { await log('project.flow-imported', actionedBy, project?.id, generateBody({ error, project })) }, async assignedToPipelineStage (actionedBy, error, project, pipeline, pipelineStage) { await log('project.assigned-to-pipeline-stage', actionedBy, project?.id, generateBody({ error, project, pipeline, pipelineStage })) }, async protected (actionedBy, error, project) { await log('project.protected', actionedBy, project?.id, generateBody({ error, project })) }, async unprotected (actionedBy, error, project) { await log('project.unprotected', actionedBy, project?.id, generateBody({ error, project })) }, device: { async unassigned (actionedBy, error, project, device) { await log('project.device.unassigned', actionedBy, project?.id, generateBody({ error, project, device })) }, async assigned (actionedBy, error, project, device) { await log('project.device.assigned', actionedBy, project?.id, generateBody({ error, project, device })) }, snapshot: { async created (actionedBy, error, project, device, snapshot) { await log('project.device.snapshot.created', actionedBy, project?.id, generateBody({ error, project, device, snapshot })) } } }, type: { async changed (actionedBy, error, project, projectType) { await log('project.type.changed', actionedBy, project?.id, generateBody({ error, project, projectType })) } }, stack: { async changed (actionedBy, error, project, stack) { await log('project.stack.changed', actionedBy, project?.id, generateBody({ error, project, stack })) }, async restart (actionedBy, error, project) { await log('project.stack.restart', actionedBy, project?.id, generateBody({ error, project })) } }, settings: { async updated (actionedBy, error, project, updates) { await log('project.settings.updated', actionedBy, project?.id, generateBody({ error, project, updates })) } }, snapshot: { async created (actionedBy, error, project, snapshot) { await log('project.snapshot.created', actionedBy, project?.id, generateBody({ error, project, snapshot })) }, async updated (actionedBy, error, project, snapshot, updates) { await log('project.snapshot.updated', actionedBy, project?.id, generateBody({ error, project, snapshot, updates })) }, async rolledBack (actionedBy, error, project, snapshot) { await log('project.snapshot.rolled-back', actionedBy, project?.id, generateBody({ error, project, snapshot })) }, async deleted (actionedBy, error, project, snapshot) { await log('project.snapshot.deleted', actionedBy, project?.id, generateBody({ error, project, snapshot })) }, async deviceTargetSet (actionedBy, error, project, snapshot) { await log('project.snapshot.device-target-set', actionedBy, project?.id, generateBody({ error, project, snapshot })) }, async imported (actionedBy, error, project, sourceProject, sourceDevice, snapshot) { await log('project.snapshot.imported', actionedBy, project?.id, generateBody({ error, project, sourceProject, sourceDevice, snapshot })) }, async exported (actionedBy, error, project, snapshot) { await log('project.snapshot.exported', actionedBy, project?.id, generateBody({ error, project, snapshot })) } }, httpToken: { async created (actionedBy, error, project, token) { await log('project.httpToken.created', actionedBy, project?.id, generateBody({ error, project, token })) }, async updated (actionedBy, error, project, updates) { await log('project.httpToken.updated', actionedBy, project?.id, generateBody({ error, project, updates })) }, async deleted (actionedBy, error, project, token) { await log('project.httpToken.deleted', actionedBy, project?.id, generateBody({ error, project, token })) } } } const log = async (event, actionedBy, projectId, body) => { try { const trigger = triggerObject(actionedBy) let whoDidIt = trigger.id if (typeof trigger.id !== 'number' || trigger.id <= 0) { whoDidIt = null body.trigger = trigger } await app.db.controllers.AuditLog.projectLog(projectId, whoDidIt, event, body) } catch (error) { console.warn('Failed to log project scope audit event', event, error) } } return { project } } }