From e9bc9b1aa8dbb6f4c14992cc77a2ddf1bc2e2de7 Mon Sep 17 00:00:00 2001 From: Faruk AYDIN Date: Wed, 27 Mar 2024 13:42:18 +0100 Subject: [PATCH 1/3] fix: Typo for the get auth clients test file --- .../src/controllers/api/v1/apps/get-auth-clients.ee.test.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/backend/src/controllers/api/v1/apps/get-auth-clients.ee.test.js b/packages/backend/src/controllers/api/v1/apps/get-auth-clients.ee.test.js index 3f04a10f..c671ce74 100644 --- a/packages/backend/src/controllers/api/v1/apps/get-auth-clients.ee.test.js +++ b/packages/backend/src/controllers/api/v1/apps/get-auth-clients.ee.test.js @@ -7,7 +7,7 @@ import getAuthClientsMock from '../../../../../test/mocks/rest/api/v1/apps/get-a import { createAppAuthClient } from '../../../../../test/factories/app-auth-client.js'; import * as license from '../../../../helpers/license.ee.js'; -describe('GET /api/v1/app/:appKey/auth-clients', () => { +describe('GET /api/v1/apps/:appKey/auth-clients', () => { let currentUser, token; beforeEach(async () => { From 85b4cd4998dda7a292e0cdd4af07a7b38da19d20 Mon Sep 17 00:00:00 2001 From: Faruk AYDIN Date: Wed, 27 Mar 2024 13:42:41 +0100 Subject: [PATCH 2/3] feat: Implement new admin get auth clients API endpoint --- .../api/v1/admin/apps/get-auth-clients.ee.js | 10 +++++ .../v1/admin/apps/get-auth-clients.ee.test.js | 44 +++++++++++++++++++ .../src/routes/api/v1/admin/apps.ee.js | 27 ++++++++++++ packages/backend/src/routes/index.js | 6 ++- .../api/v1/admin/apps/get-auth-clients.js | 18 ++++++++ 5 files changed, 103 insertions(+), 2 deletions(-) create mode 100644 packages/backend/src/controllers/api/v1/admin/apps/get-auth-clients.ee.js create mode 100644 packages/backend/src/controllers/api/v1/admin/apps/get-auth-clients.ee.test.js create mode 100644 packages/backend/src/routes/api/v1/admin/apps.ee.js create mode 100644 packages/backend/test/mocks/rest/api/v1/admin/apps/get-auth-clients.js diff --git a/packages/backend/src/controllers/api/v1/admin/apps/get-auth-clients.ee.js b/packages/backend/src/controllers/api/v1/admin/apps/get-auth-clients.ee.js new file mode 100644 index 00000000..257e0dd7 --- /dev/null +++ b/packages/backend/src/controllers/api/v1/admin/apps/get-auth-clients.ee.js @@ -0,0 +1,10 @@ +import { renderObject } from '../../../../../helpers/renderer.js'; +import AppAuthClient from '../../../../../models/app-auth-client.js'; + +export default async (request, response) => { + const appAuthClients = await AppAuthClient.query() + .where({ app_key: request.params.appKey }) + .orderBy('created_at', 'desc'); + + renderObject(response, appAuthClients); +}; diff --git a/packages/backend/src/controllers/api/v1/admin/apps/get-auth-clients.ee.test.js b/packages/backend/src/controllers/api/v1/admin/apps/get-auth-clients.ee.test.js new file mode 100644 index 00000000..0f59a846 --- /dev/null +++ b/packages/backend/src/controllers/api/v1/admin/apps/get-auth-clients.ee.test.js @@ -0,0 +1,44 @@ +import { vi, describe, it, expect, beforeEach } from 'vitest'; +import request from 'supertest'; +import app from '../../../../../app.js'; +import createAuthTokenByUserId from '../../../../../helpers/create-auth-token-by-user-id.js'; +import { createUser } from '../../../../../../test/factories/user.js'; +import { createRole } from '../../../../../../test/factories/role.js'; +import getAuthClientsMock from '../../../../../../test/mocks/rest/api/v1/admin/apps/get-auth-clients.js'; +import { createAppAuthClient } from '../../../../../../test/factories/app-auth-client.js'; +import * as license from '../../../../../helpers/license.ee.js'; + +describe('GET /api/v1/admin/apps/:appKey/auth-clients', () => { + let currentUser, adminRole, token; + + beforeEach(async () => { + vi.spyOn(license, 'hasValidLicense').mockResolvedValue(true); + + adminRole = await createRole({ key: 'admin' }); + currentUser = await createUser({ roleId: adminRole.id }); + + token = createAuthTokenByUserId(currentUser.id); + }); + + it('should return specified app auth client info', async () => { + const appAuthClientOne = await createAppAuthClient({ + appKey: 'deepl', + }); + + const appAuthClientTwo = await createAppAuthClient({ + appKey: 'deepl', + }); + + const response = await request(app) + .get('/api/v1/admin/apps/deepl/auth-clients') + .set('Authorization', token) + .expect(200); + + const expectedPayload = getAuthClientsMock([ + appAuthClientTwo, + appAuthClientOne, + ]); + + expect(response.body).toEqual(expectedPayload); + }); +}); diff --git a/packages/backend/src/routes/api/v1/admin/apps.ee.js b/packages/backend/src/routes/api/v1/admin/apps.ee.js new file mode 100644 index 00000000..0994d054 --- /dev/null +++ b/packages/backend/src/routes/api/v1/admin/apps.ee.js @@ -0,0 +1,27 @@ +import { Router } from 'express'; +import asyncHandler from 'express-async-handler'; +import { authenticateUser } from '../../../../helpers/authentication.js'; +import { authorizeAdmin } from '../../../../helpers/authorization.js'; +import { checkIsEnterprise } from '../../../../helpers/check-is-enterprise.js'; +import getAuthClientsAction from '../../../../controllers/api/v1/admin/apps/get-auth-clients.ee.js'; +import getRoleAction from '../../../../controllers/api/v1/admin/roles/get-role.ee.js'; + +const router = Router(); + +router.get( + '/:appKey/auth-clients', + authenticateUser, + authorizeAdmin, + checkIsEnterprise, + asyncHandler(getAuthClientsAction) +); + +router.get( + '/:appKey/auth-clients/:appAuthClientId', + authenticateUser, + authorizeAdmin, + checkIsEnterprise, + asyncHandler(getRoleAction) +); + +export default router; diff --git a/packages/backend/src/routes/index.js b/packages/backend/src/routes/index.js index f582352e..5ded51ac 100644 --- a/packages/backend/src/routes/index.js +++ b/packages/backend/src/routes/index.js @@ -13,6 +13,7 @@ import appsRouter from './api/v1/apps.js'; import connectionsRouter from './api/v1/connections.js'; import executionsRouter from './api/v1/executions.js'; import samlAuthProvidersRouter from './api/v1/saml-auth-providers.ee.js'; +import adminAppsRouter from './api/v1/admin/apps.ee.js'; import adminSamlAuthProvidersRouter from './api/v1/admin/saml-auth-providers.ee.js'; import rolesRouter from './api/v1/admin/roles.ee.js'; import permissionsRouter from './api/v1/admin/permissions.ee.js'; @@ -35,10 +36,11 @@ router.use('/api/v1/flows', flowsRouter); router.use('/api/v1/steps', stepsRouter); router.use('/api/v1/executions', executionsRouter); router.use('/api/v1/saml-auth-providers', samlAuthProvidersRouter); -router.use('/api/v1/admin/saml-auth-providers', adminSamlAuthProvidersRouter); +router.use('/api/v1/admin/apps', adminAppsRouter); +router.use('/api/v1/admin/users', adminUsersRouter); router.use('/api/v1/admin/roles', rolesRouter); router.use('/api/v1/admin/permissions', permissionsRouter); -router.use('/api/v1/admin/users', adminUsersRouter); +router.use('/api/v1/admin/saml-auth-providers', adminSamlAuthProvidersRouter); router.use('/api/v1/admin/app-auth-clients', adminAppAuthClientsRouter); export default router; diff --git a/packages/backend/test/mocks/rest/api/v1/admin/apps/get-auth-clients.js b/packages/backend/test/mocks/rest/api/v1/admin/apps/get-auth-clients.js new file mode 100644 index 00000000..dd0cc5ee --- /dev/null +++ b/packages/backend/test/mocks/rest/api/v1/admin/apps/get-auth-clients.js @@ -0,0 +1,18 @@ +const getAdminAppAuthClientsMock = (appAuthClients) => { + return { + data: appAuthClients.map((appAuthClient) => ({ + name: appAuthClient.name, + id: appAuthClient.id, + active: appAuthClient.active, + })), + meta: { + count: appAuthClients.length, + currentPage: null, + isArray: true, + totalPages: null, + type: 'AppAuthClient', + }, + }; +}; + +export default getAdminAppAuthClientsMock; From a873fd14bd20dee0029df04e8c5ed1fda7fd752b Mon Sep 17 00:00:00 2001 From: Faruk AYDIN Date: Wed, 27 Mar 2024 13:44:01 +0100 Subject: [PATCH 3/3] chore: Remove old admin app auth clients API endpoint --- .../get-app-auth-clients.ee.js | 11 ----- .../get-app-auth-clients.ee.test.js | 41 ------------------- .../api/v1/admin/app-auth-clients.ee.js | 9 ---- .../app-auth-clients/get-app-auth-clients.js | 19 --------- 4 files changed, 80 deletions(-) delete mode 100644 packages/backend/src/controllers/api/v1/admin/app-auth-clients/get-app-auth-clients.ee.js delete mode 100644 packages/backend/src/controllers/api/v1/admin/app-auth-clients/get-app-auth-clients.ee.test.js delete mode 100644 packages/backend/test/mocks/rest/api/v1/admin/app-auth-clients/get-app-auth-clients.js diff --git a/packages/backend/src/controllers/api/v1/admin/app-auth-clients/get-app-auth-clients.ee.js b/packages/backend/src/controllers/api/v1/admin/app-auth-clients/get-app-auth-clients.ee.js deleted file mode 100644 index 03d0aeee..00000000 --- a/packages/backend/src/controllers/api/v1/admin/app-auth-clients/get-app-auth-clients.ee.js +++ /dev/null @@ -1,11 +0,0 @@ -import { renderObject } from '../../../../../helpers/renderer.js'; -import AppAuthClient from '../../../../../models/app-auth-client.js'; - -export default async (request, response) => { - const appAuthClients = await AppAuthClient.query().orderBy( - 'created_at', - 'desc' - ); - - renderObject(response, appAuthClients); -}; diff --git a/packages/backend/src/controllers/api/v1/admin/app-auth-clients/get-app-auth-clients.ee.test.js b/packages/backend/src/controllers/api/v1/admin/app-auth-clients/get-app-auth-clients.ee.test.js deleted file mode 100644 index b3394c89..00000000 --- a/packages/backend/src/controllers/api/v1/admin/app-auth-clients/get-app-auth-clients.ee.test.js +++ /dev/null @@ -1,41 +0,0 @@ -import { vi, describe, it, expect, beforeEach } from 'vitest'; -import request from 'supertest'; -import app from '../../../../../app.js'; -import createAuthTokenByUserId from '../../../../../helpers/create-auth-token-by-user-id.js'; -import { createUser } from '../../../../../../test/factories/user.js'; -import getAdminAppAuthClientsMock from '../../../../../../test/mocks/rest/api/v1/admin/app-auth-clients/get-app-auth-clients.js'; -import { createAppAuthClient } from '../../../../../../test/factories/app-auth-client.js'; -import { createRole } from '../../../../../../test/factories/role.js'; -import * as license from '../../../../../helpers/license.ee.js'; - -describe('GET /api/v1/admin/app-auth-clients', () => { - let currentUser, currentUserRole, token; - - describe('with valid license key', () => { - beforeEach(async () => { - vi.spyOn(license, 'hasValidLicense').mockResolvedValue(true); - - currentUserRole = await createRole({ key: 'admin' }); - currentUser = await createUser({ roleId: currentUserRole.id }); - - token = createAuthTokenByUserId(currentUser.id); - }); - - it('should return app auth clients', async () => { - const appAuthClientOne = await createAppAuthClient(); - const appAuthClientTwo = await createAppAuthClient(); - - const response = await request(app) - .get('/api/v1/admin/app-auth-clients') - .set('Authorization', token) - .expect(200); - - const expectedPayload = getAdminAppAuthClientsMock([ - appAuthClientTwo, - appAuthClientOne, - ]); - - expect(response.body).toEqual(expectedPayload); - }); - }); -}); diff --git a/packages/backend/src/routes/api/v1/admin/app-auth-clients.ee.js b/packages/backend/src/routes/api/v1/admin/app-auth-clients.ee.js index cda5e2e0..961b6616 100644 --- a/packages/backend/src/routes/api/v1/admin/app-auth-clients.ee.js +++ b/packages/backend/src/routes/api/v1/admin/app-auth-clients.ee.js @@ -3,19 +3,10 @@ import asyncHandler from 'express-async-handler'; import { authenticateUser } from '../../../../helpers/authentication.js'; import { authorizeAdmin } from '../../../../helpers/authorization.js'; import { checkIsEnterprise } from '../../../../helpers/check-is-enterprise.js'; -import getAdminAppAuthClientsAction from '../../../../controllers/api/v1/admin/app-auth-clients/get-app-auth-clients.ee.js'; import getAdminAppAuthClientAction from '../../../../controllers/api/v1/admin/app-auth-clients/get-app-auth-client.ee.js'; const router = Router(); -router.get( - '/', - authenticateUser, - authorizeAdmin, - checkIsEnterprise, - asyncHandler(getAdminAppAuthClientsAction) -); - router.get( '/:appAuthClientId', authenticateUser, diff --git a/packages/backend/test/mocks/rest/api/v1/admin/app-auth-clients/get-app-auth-clients.js b/packages/backend/test/mocks/rest/api/v1/admin/app-auth-clients/get-app-auth-clients.js deleted file mode 100644 index cb40da1a..00000000 --- a/packages/backend/test/mocks/rest/api/v1/admin/app-auth-clients/get-app-auth-clients.js +++ /dev/null @@ -1,19 +0,0 @@ -const getAdminAppAuthClientsMock = (appAuthClients) => { - return { - data: appAuthClients.map((appAuthClient) => ({ - appConfigId: appAuthClient.appConfigId, - name: appAuthClient.name, - id: appAuthClient.id, - active: appAuthClient.active, - })), - meta: { - count: appAuthClients.length, - currentPage: null, - isArray: true, - totalPages: null, - type: 'AppAuthClient', - }, - }; -}; - -export default getAdminAppAuthClientsMock;