diff --git a/packages/core/admin/ee/server/controllers/audit-logs.js b/packages/core/admin/ee/server/controllers/audit-logs.js index 1366b04b40..b886c10336 100644 --- a/packages/core/admin/ee/server/controllers/audit-logs.js +++ b/packages/core/admin/ee/server/controllers/audit-logs.js @@ -3,7 +3,7 @@ const { validateFindMany } = require('../validation/audit-logs'); module.exports = { - async getAuditLogs(ctx) { + async findMany(ctx) { const { query } = ctx.request; await validateFindMany(query); @@ -12,4 +12,13 @@ module.exports = { ctx.body = body; }, + + async findOne(ctx) { + const { id } = ctx.params; + + const auditLogs = strapi.container.get('audit-logs'); + const body = await auditLogs.findOne(id); + + ctx.body = body; + }, }; diff --git a/packages/core/admin/ee/server/routes/features-routes.js b/packages/core/admin/ee/server/routes/features-routes.js index dfb3794c06..bb085adfd8 100644 --- a/packages/core/admin/ee/server/routes/features-routes.js +++ b/packages/core/admin/ee/server/routes/features-routes.js @@ -47,7 +47,16 @@ module.exports = { { method: 'GET', path: '/audit-logs', - handler: 'auditLogs.getAuditLogs', + handler: 'auditLogs.findMany', + config: { + // @TODO: Check to right permissions + policies: ['admin::isAuthenticatedAdmin'], + }, + }, + { + method: 'GET', + path: '/audit-logs/:id', + handler: 'auditLogs.findOne', config: { // @TODO: Check to right permissions policies: ['admin::isAuthenticatedAdmin'], diff --git a/packages/core/admin/ee/server/services/__tests__/audit-logs.test.js b/packages/core/admin/ee/server/services/__tests__/audit-logs.test.js index 5f3d139ca4..39dd3c88a0 100644 --- a/packages/core/admin/ee/server/services/__tests__/audit-logs.test.js +++ b/packages/core/admin/ee/server/services/__tests__/audit-logs.test.js @@ -45,6 +45,7 @@ describe('Audit logs service', () => { const mockAddContentType = jest.fn(); const mockEntityServiceCreate = jest.fn(); const mockEntityServiceFindPage = jest.fn(); + const mockEntityServiceFindOne = jest.fn(); const mockGet = jest.fn((name) => { if (name === 'content-types') { return { @@ -68,6 +69,7 @@ describe('Audit logs service', () => { entityService: { create: mockEntityServiceCreate, findPage: mockEntityServiceFindPage, + findOne: mockEntityServiceFindOne, }, eventHub: createEventHub(), requestContext: { @@ -164,12 +166,33 @@ describe('Audit logs service', () => { await strapi.eventHub.emit('entry.create', { meta: 'test' }); - const params = { page: 1, pageSize: 10, order: 'createdAt:DESC', populate: ['user'] }; + const params = { page: 1, pageSize: 10, order: 'createdAt:DESC' }; const result = await auditLogsService.findMany(params); expect(mockEntityServiceFindPage).toHaveBeenCalledTimes(1); - expect(mockEntityServiceFindPage).toHaveBeenCalledWith('admin::audit-log', params); + expect(mockEntityServiceFindPage).toHaveBeenCalledWith('admin::audit-log', { + ...params, + populate: ['user'], + fields: ['action', 'date'], + }); expect(result).toEqual({ results: [], pagination: {} }); }); + + it('should find one audit log with the right params', async () => { + const auditLogsService = createAuditLogsService(strapi); + await auditLogsService.register(); + mockEntityServiceFindOne.mockResolvedValueOnce({ id: 1 }); + + await strapi.eventHub.emit('entry.create', { meta: 'test' }); + + const result = await auditLogsService.findOne(1); + + expect(mockEntityServiceFindOne).toHaveBeenCalledTimes(1); + expect(mockEntityServiceFindOne).toHaveBeenCalledWith('admin::audit-log', 1, { + populate: ['user'], + fields: ['action', 'date', 'payload'], + }); + expect(result).toEqual({ id: 1, user: null }); + }); }); }); diff --git a/packages/core/admin/ee/server/services/audit-logs.js b/packages/core/admin/ee/server/services/audit-logs.js index db8f670fba..e5bb0caf6e 100644 --- a/packages/core/admin/ee/server/services/audit-logs.js +++ b/packages/core/admin/ee/server/services/audit-logs.js @@ -93,6 +93,20 @@ const createAuditLogsService = (strapi) => { }; }, + async findOne(id) { + const result = await this._provider.findOne(id); + + if (!result) { + return null; + } + + const { user, ...rest } = result; + return { + ...rest, + user: user ? getService('user').sanitizeUser(user) : null, + }; + }, + unsubscribe() { if (this._eventHubUnsubscribe) { this._eventHubUnsubscribe(); diff --git a/packages/providers/audit-logs-local/lib/index.js b/packages/providers/audit-logs-local/lib/index.js index 259351a02e..ea7bf67ce5 100644 --- a/packages/providers/audit-logs-local/lib/index.js +++ b/packages/providers/audit-logs-local/lib/index.js @@ -22,9 +22,17 @@ const provider = { findMany(query) { return strapi.entityService.findPage('admin::audit-log', { populate: ['user'], + fields: ['action', 'date'], ...query, }); }, + + findOne(id) { + return strapi.entityService.findOne('admin::audit-log', id, { + populate: ['user'], + fields: ['action', 'date', 'payload'], + }); + }, }; }, };