diff --git a/packages/backend/src/graphql/queries/get-saml-auth-provider-role-mappings.ee.js b/packages/backend/src/graphql/queries/get-saml-auth-provider-role-mappings.ee.js deleted file mode 100644 index b6e4246e..00000000 --- a/packages/backend/src/graphql/queries/get-saml-auth-provider-role-mappings.ee.js +++ /dev/null @@ -1,17 +0,0 @@ -import SamlAuthProvider from '../../models/saml-auth-provider.ee.js'; - -const getSamlAuthProviderRoleMappings = async (_parent, params, context) => { - context.currentUser.can('read', 'SamlAuthProvider'); - - const samlAuthProvider = await SamlAuthProvider.query() - .findById(params.id) - .throwIfNotFound(); - - const roleMappings = await samlAuthProvider - .$relatedQuery('samlAuthProvidersRoleMappings') - .orderBy('remote_role_name', 'asc'); - - return roleMappings; -}; - -export default getSamlAuthProviderRoleMappings; diff --git a/packages/backend/src/graphql/query-resolvers.js b/packages/backend/src/graphql/query-resolvers.js index 0a178952..74ccedee 100644 --- a/packages/backend/src/graphql/query-resolvers.js +++ b/packages/backend/src/graphql/query-resolvers.js @@ -9,7 +9,6 @@ import getDynamicFields from './queries/get-dynamic-fields.js'; import getFlow from './queries/get-flow.js'; import getFlows from './queries/get-flows.js'; import getNotifications from './queries/get-notifications.js'; -import getSamlAuthProviderRoleMappings from './queries/get-saml-auth-provider-role-mappings.ee.js'; import getStepWithTestExecutions from './queries/get-step-with-test-executions.js'; import getUsers from './queries/get-users.js'; import testConnection from './queries/test-connection.js'; @@ -26,7 +25,6 @@ const queryResolvers = { getFlow, getFlows, getNotifications, - getSamlAuthProviderRoleMappings, getStepWithTestExecutions, getUsers, testConnection, diff --git a/packages/backend/src/graphql/schema.graphql b/packages/backend/src/graphql/schema.graphql index 90767916..3e1ab036 100644 --- a/packages/backend/src/graphql/schema.graphql +++ b/packages/backend/src/graphql/schema.graphql @@ -26,7 +26,6 @@ type Query { getBillingAndUsage: GetBillingAndUsage getConfig(keys: [String]): JSONObject getNotifications: [Notification] - getSamlAuthProviderRoleMappings(id: String!): [SamlAuthProvidersRoleMapping] getUsers(limit: Int!, offset: Int!): UserConnection } diff --git a/packages/web/src/graphql/queries/get-saml-auth-provider-role-mappings.js b/packages/web/src/graphql/queries/get-saml-auth-provider-role-mappings.js deleted file mode 100644 index b19492d2..00000000 --- a/packages/web/src/graphql/queries/get-saml-auth-provider-role-mappings.js +++ /dev/null @@ -1,11 +0,0 @@ -import { gql } from '@apollo/client'; -export const GET_SAML_AUTH_PROVIDER_ROLE_MAPPINGS = gql` - query GetSamlAuthProviderRoleMappings($id: String!) { - getSamlAuthProviderRoleMappings(id: $id) { - id - samlAuthProviderId - roleId - remoteRoleName - } - } -`; diff --git a/packages/web/src/hooks/useAdminSamlAuthProviderRoleMappings.js b/packages/web/src/hooks/useAdminSamlAuthProviderRoleMappings.js new file mode 100644 index 00000000..513239eb --- /dev/null +++ b/packages/web/src/hooks/useAdminSamlAuthProviderRoleMappings.js @@ -0,0 +1,24 @@ +import { useQuery } from '@tanstack/react-query'; + +import api from 'helpers/api'; + +export default function useAdminSamlAuthProviderRoleMappings({ + adminSamlAuthProviderId, +}) { + const query = useQuery({ + queryKey: ['adminSamlAuthProviderRoleMappings', adminSamlAuthProviderId], + queryFn: async ({ signal }) => { + const { data } = await api.get( + `/v1/admin/saml-auth-providers/${adminSamlAuthProviderId}/role-mappings`, + { + signal, + }, + ); + + return data; + }, + enabled: !!adminSamlAuthProviderId, + }); + + return query; +} diff --git a/packages/web/src/hooks/useSamlAuthProviderRoleMappings.js b/packages/web/src/hooks/useSamlAuthProviderRoleMappings.js deleted file mode 100644 index a76dba4c..00000000 --- a/packages/web/src/hooks/useSamlAuthProviderRoleMappings.js +++ /dev/null @@ -1,21 +0,0 @@ -import * as React from 'react'; -import { useLazyQuery } from '@apollo/client'; -import { GET_SAML_AUTH_PROVIDER_ROLE_MAPPINGS } from 'graphql/queries/get-saml-auth-provider-role-mappings'; -export default function useSamlAuthProviderRoleMappings(providerId) { - const [getSamlAuthProviderRoleMappings, { data, loading }] = useLazyQuery( - GET_SAML_AUTH_PROVIDER_ROLE_MAPPINGS, - ); - React.useEffect(() => { - if (providerId) { - getSamlAuthProviderRoleMappings({ - variables: { - id: providerId, - }, - }); - } - }, [providerId]); - return { - roleMappings: data?.getSamlAuthProviderRoleMappings || [], - loading, - }; -} diff --git a/packages/web/src/pages/Authentication/RoleMappings.jsx b/packages/web/src/pages/Authentication/RoleMappings.jsx index 117671b7..78ee244e 100644 --- a/packages/web/src/pages/Authentication/RoleMappings.jsx +++ b/packages/web/src/pages/Authentication/RoleMappings.jsx @@ -5,29 +5,39 @@ import Stack from '@mui/material/Stack'; import Typography from '@mui/material/Typography'; import useEnqueueSnackbar from 'hooks/useEnqueueSnackbar'; import { useMemo } from 'react'; + import Form from 'components/Form'; import { UPSERT_SAML_AUTH_PROVIDERS_ROLE_MAPPINGS } from 'graphql/mutations/upsert-saml-auth-providers-role-mappings'; import useFormatMessage from 'hooks/useFormatMessage'; -import useSamlAuthProviderRoleMappings from 'hooks/useSamlAuthProviderRoleMappings'; +import useAdminSamlAuthProviderRoleMappings from 'hooks/useAdminSamlAuthProviderRoleMappings'; import RoleMappingsFieldArray from './RoleMappingsFieldsArray'; + function generateFormRoleMappings(roleMappings) { - if (roleMappings.length === 0) { + if (roleMappings?.length === 0) { return [{ roleId: '', remoteRoleName: '' }]; } - return roleMappings.map(({ roleId, remoteRoleName }) => ({ + + return roleMappings?.map(({ roleId, remoteRoleName }) => ({ roleId, remoteRoleName, })); } + function RoleMappings({ provider, providerLoading }) { const formatMessage = useFormatMessage(); const enqueueSnackbar = useEnqueueSnackbar(); - const { roleMappings, loading: roleMappingsLoading } = - useSamlAuthProviderRoleMappings(provider?.id); + + const { data, isLoading: isAdminSamlAuthProviderRoleMappingsLoading } = + useAdminSamlAuthProviderRoleMappings({ + adminSamlAuthProviderId: provider?.id, + }); + const roleMappings = data?.data; + const [ upsertSamlAuthProvidersRoleMappings, { loading: upsertRoleMappingsLoading }, ] = useMutation(UPSERT_SAML_AUTH_PROVIDERS_ROLE_MAPPINGS); + const handleRoleMappingsUpdate = async (values) => { try { if (provider?.id) { @@ -44,6 +54,7 @@ function RoleMappings({ provider, providerLoading }) { }, }, }); + enqueueSnackbar(formatMessage('roleMappingsForm.successfullySaved'), { variant: 'success', SnackbarProps: { @@ -55,15 +66,22 @@ function RoleMappings({ provider, providerLoading }) { throw new Error('Failed while saving!'); } }; + const defaultValues = useMemo( () => ({ roleMappings: generateFormRoleMappings(roleMappings), }), [roleMappings], ); - if (providerLoading || !provider?.id || roleMappingsLoading) { + + if ( + providerLoading || + !provider?.id || + isAdminSamlAuthProviderRoleMappingsLoading + ) { return null; } + return ( <>