diff --git a/packages/backend/src/controllers/api/v1/apps/get-auth-clients.ee.js b/packages/backend/src/controllers/api/v1/apps/get-auth-clients.ee.js new file mode 100644 index 00000000..06eceec1 --- /dev/null +++ b/packages/backend/src/controllers/api/v1/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, active: true }) + .orderBy('created_at', 'desc'); + + renderObject(response, appAuthClients); +}; 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 new file mode 100644 index 00000000..3f04a10f --- /dev/null +++ b/packages/backend/src/controllers/api/v1/apps/get-auth-clients.ee.test.js @@ -0,0 +1,42 @@ +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 getAuthClientsMock from '../../../../../test/mocks/rest/api/v1/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/app/:appKey/auth-clients', () => { + let currentUser, token; + + beforeEach(async () => { + vi.spyOn(license, 'hasValidLicense').mockResolvedValue(true); + + currentUser = await createUser(); + + 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/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/apps.js b/packages/backend/src/routes/api/v1/apps.js index 24d9c52f..9bbc1e4f 100644 --- a/packages/backend/src/routes/api/v1/apps.js +++ b/packages/backend/src/routes/api/v1/apps.js @@ -7,6 +7,7 @@ import getAppAction from '../../../controllers/api/v1/apps/get-app.js'; import getAppsAction from '../../../controllers/api/v1/apps/get-apps.js'; import getAuthAction from '../../../controllers/api/v1/apps/get-auth.js'; import getConfigAction from '../../../controllers/api/v1/apps/get-config.ee.js'; +import getAuthClientsAction from '../../../controllers/api/v1/apps/get-auth-clients.ee.js'; import getTriggersAction from '../../../controllers/api/v1/apps/get-triggers.js'; import getTriggerSubstepsAction from '../../../controllers/api/v1/apps/get-trigger-substeps.js'; import getActionsAction from '../../../controllers/api/v1/apps/get-actions.js'; @@ -26,6 +27,13 @@ router.get( asyncHandler(getConfigAction) ); +router.get( + '/:appKey/auth-clients', + authenticateUser, + checkIsEnterprise, + asyncHandler(getAuthClientsAction) +); + router.get( '/:appKey/triggers', authenticateUser, diff --git a/packages/backend/test/factories/app-auth-client.js b/packages/backend/test/factories/app-auth-client.js index 3d51f80f..0cadf197 100644 --- a/packages/backend/test/factories/app-auth-client.js +++ b/packages/backend/test/factories/app-auth-client.js @@ -1,5 +1,4 @@ import { faker } from '@faker-js/faker'; -import { createAppConfig } from './app-config.js'; import AppAuthClient from '../../src/models/app-auth-client'; const formattedAuthDefaults = { @@ -12,7 +11,7 @@ const formattedAuthDefaults = { export const createAppAuthClient = async (params = {}) => { params.name = params?.name || faker.person.fullName(); params.id = params?.id || faker.string.uuid(); - params.appConfigId = params?.appConfigId || (await createAppConfig()).id; + params.appKey = params?.appKey || 'deepl'; params.active = params?.active ?? true; params.formattedAuthDefaults = params?.formattedAuthDefaults || formattedAuthDefaults; diff --git a/packages/backend/test/mocks/rest/api/v1/app-auth-clients/get-app-auth-clients.js b/packages/backend/test/mocks/rest/api/v1/apps/get-auth-clients.js similarity index 100% rename from packages/backend/test/mocks/rest/api/v1/app-auth-clients/get-app-auth-clients.js rename to packages/backend/test/mocks/rest/api/v1/apps/get-auth-clients.js