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',