1
0
Fork 0
mirror of synced 2024-09-11 15:08:05 +12:00

Minor fix for audit log system - after the switch to use an async queue for handling of audit log storage, context was lost - in multi-tenant environments need to carry the tenant ID into the queue job so that context can be applied.

This commit is contained in:
mike12345567 2023-03-01 16:38:19 +00:00
parent c3806c0605
commit bba6f6941c
2 changed files with 24 additions and 20 deletions

View file

@ -8,7 +8,7 @@ import {
HostInfo, HostInfo,
} from "@budibase/types" } from "@budibase/types"
import { EventProcessor } from "./types" import { EventProcessor } from "./types"
import { getAppId } from "../../context" import { getAppId, doInTenant } from "../../context"
import BullQueue from "bull" import BullQueue from "bull"
import { createQueue, JobQueue } from "../../queue" import { createQueue, JobQueue } from "../../queue"
import { isAudited } from "../../utils" import { isAudited } from "../../utils"
@ -26,28 +26,30 @@ export default class AuditLogsProcessor implements EventProcessor {
JobQueue.AUDIT_LOG JobQueue.AUDIT_LOG
) )
return AuditLogsProcessor.auditLogQueue.process(async job => { return AuditLogsProcessor.auditLogQueue.process(async job => {
let properties = job.data.properties return doInTenant(job.data.tenantId, async () => {
if (properties.audited) { let properties = job.data.properties
properties = { if (properties.audited) {
...properties, properties = {
...properties.audited, ...properties,
...properties.audited,
}
delete properties.audited
} }
delete properties.audited
}
// this feature is disabled by default due to privacy requirements // this feature is disabled by default due to privacy requirements
// in some countries - available as env var in-case it is desired // in some countries - available as env var in-case it is desired
// in self host deployments // in self host deployments
let hostInfo: HostInfo | undefined = {} let hostInfo: HostInfo | undefined = {}
if (env.ENABLE_AUDIT_LOG_IP_ADDR) { if (env.ENABLE_AUDIT_LOG_IP_ADDR) {
hostInfo = job.data.opts.hostInfo hostInfo = job.data.opts.hostInfo
} }
await writeAuditLogs(job.data.event, properties, { await writeAuditLogs(job.data.event, properties, {
userId: job.data.opts.userId, userId: job.data.opts.userId,
timestamp: job.data.opts.timestamp, timestamp: job.data.opts.timestamp,
appId: job.data.opts.appId, appId: job.data.opts.appId,
hostInfo, hostInfo,
})
}) })
}) })
} }
@ -72,6 +74,7 @@ export default class AuditLogsProcessor implements EventProcessor {
appId: getAppId(), appId: getAppId(),
hostInfo: identity.hostInfo, hostInfo: identity.hostInfo,
}, },
tenantId: identity.tenantId!,
}) })
} }
} }

View file

@ -18,4 +18,5 @@ export type AuditLogQueueEvent = {
event: Event event: Event
properties: any properties: any
opts: AuditWriteOpts opts: AuditWriteOpts
tenantId: string
} }