From 9941198dac8df8599331863ecf75b60d5eb3e83e Mon Sep 17 00:00:00 2001 From: Ben Irvin Date: Thu, 18 Aug 2022 14:03:59 +0200 Subject: [PATCH] fix regeneration --- .../core/admin/server/controllers/api-token.js | 9 +++++---- packages/core/admin/server/routes/api-tokens.js | 2 +- .../server/services/__tests__/api-token.test.js | 3 ++- packages/core/admin/server/services/api-token.js | 3 ++- .../admin/server/tests/admin-api-token.test.e2e.js | 14 ++++++++++++++ 5 files changed, 24 insertions(+), 7 deletions(-) diff --git a/packages/core/admin/server/controllers/api-token.js b/packages/core/admin/server/controllers/api-token.js index 8cde465fc1..71b719f97c 100644 --- a/packages/core/admin/server/controllers/api-token.js +++ b/packages/core/admin/server/controllers/api-token.js @@ -39,16 +39,17 @@ module.exports = { }, async regenerate(ctx) { - const { body } = ctx.request; + const { id } = ctx.params; const apiTokenService = getService('api-token'); - const alreadyExists = await apiTokenService.exists({ name: body.id }); - if (!alreadyExists) { + const apiTokenExists = await apiTokenService.getById(id); + if (!apiTokenExists) { ctx.notFound('API Token not found'); return; } - const accessToken = await apiTokenService.regenerate(body.id); + const accessToken = await apiTokenService.regenerate(id); + ctx.created({ data: accessToken }); }, diff --git a/packages/core/admin/server/routes/api-tokens.js b/packages/core/admin/server/routes/api-tokens.js index acb34d9b45..e994382db6 100644 --- a/packages/core/admin/server/routes/api-tokens.js +++ b/packages/core/admin/server/routes/api-tokens.js @@ -57,7 +57,7 @@ module.exports = [ }, }, { - method: 'PUT', + method: 'POST', path: '/api-tokens/:id/regenerate', handler: 'api-token.regenerate', config: { diff --git a/packages/core/admin/server/services/__tests__/api-token.test.js b/packages/core/admin/server/services/__tests__/api-token.test.js index 6669db03c7..789a9166f1 100644 --- a/packages/core/admin/server/services/__tests__/api-token.test.js +++ b/packages/core/admin/server/services/__tests__/api-token.test.js @@ -258,7 +258,8 @@ describe('API Token', () => { const id = 1; const res = await apiTokenService.regenerate(id); - expect(update).toHaveBeenCalledWith(id, { + expect(update).toHaveBeenCalledWith({ + where: { id }, select: ['id', 'accessKey'], data: { accessKey: apiTokenService.hash(mockedApiToken.hexedString), diff --git a/packages/core/admin/server/services/api-token.js b/packages/core/admin/server/services/api-token.js index 23f4f55bbe..cba015b91d 100644 --- a/packages/core/admin/server/services/api-token.js +++ b/packages/core/admin/server/services/api-token.js @@ -138,8 +138,9 @@ const create = async (attributes) => { const regenerate = async (id) => { const accessKey = crypto.randomBytes(128).toString('hex'); - const apiToken = await strapi.query('admin::api-token').update(id, { + const apiToken = await strapi.query('admin::api-token').update({ select: ['id', 'accessKey'], + where: { id }, data: { accessKey: hash(accessKey), }, diff --git a/packages/core/admin/server/tests/admin-api-token.test.e2e.js b/packages/core/admin/server/tests/admin-api-token.test.e2e.js index 2c49c6f722..3d4d77787b 100644 --- a/packages/core/admin/server/tests/admin-api-token.test.e2e.js +++ b/packages/core/admin/server/tests/admin-api-token.test.e2e.js @@ -608,4 +608,18 @@ describe('Admin API Token v2 CRUD (e2e)', () => { updatedAt: expect.any(String), }); }); + + test('Regenerates an api token access key)', async () => { + const token = await createValidToken(); + + const res = await rq({ + url: `/admin/api-tokens/${token.id}/regenerate`, + method: 'POST', + }); + + expect(res.statusCode).toBe(200); + expect(res.body.data).toMatchObject({ + accessKey: expect.any(String), + }); + }); });