diff --git a/packages/backend/src/controllers/api/v1/admin/saml-auth-providers/get-saml-auth-provider.ee.js b/packages/backend/src/controllers/api/v1/admin/saml-auth-providers/get-saml-auth-provider.ee.js new file mode 100644 index 00000000..611b59ef --- /dev/null +++ b/packages/backend/src/controllers/api/v1/admin/saml-auth-providers/get-saml-auth-provider.ee.js @@ -0,0 +1,10 @@ +import { renderObject } from '../../../../../helpers/renderer.js'; +import SamlAuthProvider from '../../../../../models/saml-auth-provider.ee.js'; + +export default async (request, response) => { + const samlAuthProvider = await SamlAuthProvider.query() + .findById(request.params.samlAuthProviderId) + .throwIfNotFound(); + + renderObject(response, samlAuthProvider); +}; diff --git a/packages/backend/src/controllers/api/v1/admin/saml-auth-providers/get-saml-auth-provider.ee.test.js b/packages/backend/src/controllers/api/v1/admin/saml-auth-providers/get-saml-auth-provider.ee.test.js new file mode 100644 index 00000000..be968421 --- /dev/null +++ b/packages/backend/src/controllers/api/v1/admin/saml-auth-providers/get-saml-auth-provider.ee.test.js @@ -0,0 +1,34 @@ +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 { createRole } from '../../../../../../test/factories/role.js'; +import { createUser } from '../../../../../../test/factories/user.js'; +import { createSamlAuthProvider } from '../../../../../../test/factories/saml-auth-provider.ee.js'; +import getSamlAuthProviderMock from '../../../../../../test/mocks/rest/api/v1/saml-auth-providers/get-saml-auth-provider.ee.js'; +import * as license from '../../../../../helpers/license.ee.js'; + +describe('GET /api/v1/admin/saml-auth-provider/:samlAuthProviderId', () => { + let samlAuthProvider, currentUser, token; + + beforeEach(async () => { + const role = await createRole({ key: 'admin' }); + currentUser = await createUser({ roleId: role.id }); + samlAuthProvider = await createSamlAuthProvider(); + + token = createAuthTokenByUserId(currentUser.id); + }); + + it('should return saml auth provider with specified id', async () => { + vi.spyOn(license, 'hasValidLicense').mockResolvedValue(true); + + const response = await request(app) + .get(`/api/v1/admin/saml-auth-providers/${samlAuthProvider.id}`) + .set('Authorization', token) + .expect(200); + + const expectedPayload = await getSamlAuthProviderMock(samlAuthProvider); + + expect(response.body).toEqual(expectedPayload); + }); +}); diff --git a/packages/backend/src/routes/api/v1/saml-auth-providers.ee.js b/packages/backend/src/routes/api/v1/saml-auth-providers.ee.js index b8028b08..88e3c9a8 100644 --- a/packages/backend/src/routes/api/v1/saml-auth-providers.ee.js +++ b/packages/backend/src/routes/api/v1/saml-auth-providers.ee.js @@ -3,6 +3,7 @@ import { authenticateUser } from '../../../helpers/authentication.js'; import { authorizeAdmin } from '../../../helpers/authorization.js'; import { checkIsEnterprise } from '../../../helpers/check-is-enterprise.js'; import getSamlAuthProvidersAction from '../../../controllers/api/v1/admin/saml-auth-providers/get-saml-auth-providers.ee.js'; +import getSamlAuthProviderAction from '../../../controllers/api/v1/admin/saml-auth-providers/get-saml-auth-provider.ee.js'; const router = Router(); @@ -14,4 +15,12 @@ router.get( getSamlAuthProvidersAction ); +router.get( + '/:samlAuthProviderId', + authenticateUser, + authorizeAdmin, + checkIsEnterprise, + getSamlAuthProviderAction +); + export default router; diff --git a/packages/backend/test/mocks/rest/api/v1/saml-auth-providers/get-saml-auth-provider.ee.js b/packages/backend/test/mocks/rest/api/v1/saml-auth-providers/get-saml-auth-provider.ee.js new file mode 100644 index 00000000..73f3bf71 --- /dev/null +++ b/packages/backend/test/mocks/rest/api/v1/saml-auth-providers/get-saml-auth-provider.ee.js @@ -0,0 +1,29 @@ +const getSamlAuthProvidersMock = async (samlAuthProvider) => { + const data = { + active: samlAuthProvider.active, + certificate: samlAuthProvider.certificate, + defaultRoleId: samlAuthProvider.defaultRoleId, + emailAttributeName: samlAuthProvider.emailAttributeName, + entryPoint: samlAuthProvider.entryPoint, + firstnameAttributeName: samlAuthProvider.firstnameAttributeName, + id: samlAuthProvider.id, + issuer: samlAuthProvider.issuer, + name: samlAuthProvider.name, + roleAttributeName: samlAuthProvider.roleAttributeName, + signatureAlgorithm: samlAuthProvider.signatureAlgorithm, + surnameAttributeName: samlAuthProvider.surnameAttributeName, + }; + + return { + data: data, + meta: { + count: 1, + currentPage: null, + isArray: false, + totalPages: null, + type: 'SamlAuthProvider', + }, + }; +}; + +export default getSamlAuthProvidersMock;