diff --git a/app/scenes/Settings/components/EventListItem.js b/app/scenes/Settings/components/EventListItem.js index bb8baf64..8d82d573 100644 --- a/app/scenes/Settings/components/EventListItem.js +++ b/app/scenes/Settings/components/EventListItem.js @@ -14,6 +14,18 @@ type Props = { const description = event => { switch (event.name) { + case 'api_keys.create': + return ( + + Created the API token {event.data.name} + + ); + case 'api_keys.delete': + return ( + + Revoked the API token {event.data.name} + + ); case 'teams.create': return 'Created the team'; case 'shares.create': diff --git a/server/api/apiKeys.js b/server/api/apiKeys.js index 95569551..bf5ab8cb 100644 --- a/server/api/apiKeys.js +++ b/server/api/apiKeys.js @@ -4,7 +4,7 @@ import Router from 'koa-router'; import auth from '../middlewares/authentication'; import pagination from './middlewares/pagination'; import { presentApiKey } from '../presenters'; -import { ApiKey } from '../models'; +import { ApiKey, Event } from '../models'; import policy from '../policies'; const { authorize } = policy; @@ -22,6 +22,15 @@ router.post('apiKeys.create', auth(), async ctx => { userId: user.id, }); + await Event.create({ + name: 'api_keys.create', + modelId: key.id, + teamId: user.teamId, + actorId: user.id, + data: { name }, + ip: ctx.request.ip, + }); + ctx.body = { data: presentApiKey(key), }; @@ -54,6 +63,15 @@ router.post('apiKeys.delete', auth(), async ctx => { await key.destroy(); + await Event.create({ + name: 'api_keys.delete', + modelId: key.id, + teamId: user.teamId, + actorId: user.id, + data: { name: key.name }, + ip: ctx.request.ip, + }); + ctx.body = { success: true, }; diff --git a/server/models/Event.js b/server/models/Event.js index ab8f10cb..bd9cd255 100644 --- a/server/models/Event.js +++ b/server/models/Event.js @@ -62,6 +62,8 @@ Event.ACTIVITY_EVENTS = [ ]; Event.AUDIT_EVENTS = [ + 'api_keys.create', + 'api_keys.delete', 'users.create', 'users.promote', 'users.demote',