{"version":3,"file":"RoleAssignmentsSection.mjs","sources":["../../../../../../../../web/src/adminPortal/sso/RoleAssignmentsSection.tsx"],"sourcesContent":["import { Add } from '@mui/icons-material';\nimport { B2BSSOSAMLUpdateConnectionOptions, B2BSSOUpdateExternalConnectionOptions } from '@stytch/core/public';\nimport React, { SetStateAction, useCallback, useMemo } from 'react';\n\nimport { deepEqual } from '../../utils/deepEqual';\nimport { Autocomplete } from '../components/Autocomplete';\nimport { Button } from '../components/Button';\nimport { FlexBox } from '../components/FlexBox';\nimport { Input } from '../components/Input';\nimport { RolesList } from '../components/RolesList';\nimport { SettingsContainer, useSettingsContainer } from '../components/SettingsContainer';\nimport { SettingsSection } from '../components/SettingsSection';\nimport { Table } from '../components/Table';\nimport { Typography } from '../components/Typography';\nimport { TableItemRenderer } from '../shared/components/types';\nimport { getSsoConnectionRoleAssignments, getSsoGroupRoleAssignments } from '../utils/getSsoRoleAssignments';\nimport { useFormState } from '../utils/useFormState';\nimport { useMutateSsoConnection } from '../utils/useMutateSsoConnection';\nimport { useRbac } from '../utils/useRbac';\nimport { useRoleAutocomplete } from '../utils/useRoleAutocomplete';\nimport { getIdpInfo } from './IdpInfo';\nimport { useSsoRouterController } from './SSORouter';\nimport { ExternalTaggedConnection, SAMLTaggedConnection } from './TaggedConnection';\n\ntype ImplicitRoleAssignment = {\n  group: string;\n  roleIds: string[];\n};\n\ninterface RoleAssignmentsFormState {\n  connectionRoleIds: string[];\n  groupedRoles: ImplicitRoleAssignment[];\n}\n\nconst RoleAssignmentsSectionBody = ({\n  connection,\n  localState,\n  setLocalState,\n  remoteState,\n}: {\n  connection: SAMLTaggedConnection | ExternalTaggedConnection;\n  localState: RoleAssignmentsFormState;\n  setLocalState: (state: SetStateAction<RoleAssignmentsFormState>) => void;\n  remoteState: RoleAssignmentsFormState;\n}) => {\n  const { editing } = useSettingsContainer();\n\n  const { data: canGetOrgCustomRoles } = useRbac('stytch.custom-org-roles', 'get');\n\n  const { connectionRoleIds, groupedRoles } = editing ? localState : remoteState;\n\n  const connectionNeedsGroupAttributeMapping =\n    connection.connectionType === 'saml' && !connection.attribute_mapping.groups;\n\n  const roleAutocompleteProps = useRoleAutocomplete({ includeOrgRoles: canGetOrgCustomRoles ?? false });\n\n  const handleAddGroupRole = useCallback(() => {\n    setLocalState((state) => ({\n      ...state,\n      groupedRoles: [...state.groupedRoles, { group: '', roleIds: [] }],\n    }));\n  }, [setLocalState]);\n\n  const handleConnectionRolesChange = useCallback(\n    (value: string[]): void => {\n      return setLocalState((state) => ({ ...state, connectionRoleIds: value }));\n    },\n    [setLocalState],\n  );\n\n  const idpInfo = connection.connectionType === 'saml' ? getIdpInfo(connection.identity_provider, 'saml') : undefined;\n\n  const implicitRoleAssignments =\n    connection.connectionType === 'saml'\n      ? connection.saml_connection_implicit_role_assignments\n      : connection.external_connection_implicit_role_assignments;\n\n  return (\n    <FlexBox flexDirection=\"column\" gap={2}>\n      <SettingsSection\n        title=\"Connection Roles\"\n        tooltipText=\"Connection Roles are automatically assigned to all Members who authenticate via this SSO connection.\"\n      >\n        {editing ? (\n          <Autocomplete {...roleAutocompleteProps} value={connectionRoleIds} onChange={handleConnectionRolesChange} />\n        ) : implicitRoleAssignments.length > 0 ? (\n          <RolesList roles={implicitRoleAssignments} />\n        ) : (\n          <Typography variant=\"body2\">No roles assigned.</Typography>\n        )}\n      </SettingsSection>\n      <SettingsSection\n        title=\"Group Roles\"\n        tooltipText=\"If a Member is part of a group, they will be assigned both the Connection Role and their Group Role.\"\n      >\n        {connection.connectionType === 'external' && (\n          <Typography variant=\"body2\">\n            Ensure a &quot;groups&quot; key exists in the external connection Attribute Mapping first to assign group\n            roles.\n          </Typography>\n        )}\n        {!connectionNeedsGroupAttributeMapping ? (\n          editing ? (\n            <>\n              {groupedRoles.map(({ group, roleIds }, i) => (\n                <FlexBox key={i} alignItems=\"stretch\" justifyContent=\"space-between\">\n                  <Input\n                    label=\"Group name\"\n                    fullWidth\n                    value={group}\n                    onChange={(value) => {\n                      setLocalState((state) => ({\n                        ...state,\n                        groupedRoles: state.groupedRoles.map((item, index) =>\n                          index === i ? { ...item, group: value } : item,\n                        ),\n                      }));\n                    }}\n                  />\n                  <Autocomplete\n                    {...roleAutocompleteProps}\n                    label=\"Group Role\"\n                    value={roleIds}\n                    fullWidth\n                    onChange={(values) => {\n                      setLocalState((state) => ({\n                        ...state,\n                        groupedRoles: state.groupedRoles.map((item, index) =>\n                          index === i ? { ...item, roleIds: values } : item,\n                        ),\n                      }));\n                    }}\n                  />\n                </FlexBox>\n              ))}\n              <Button variant=\"text\" startIcon={<Add />} onClick={handleAddGroupRole}>\n                Add group roles\n              </Button>\n            </>\n          ) : groupedRoles.length > 0 ? (\n            <Table\n              items={groupedRoles}\n              rowKeyExtractor={roleAssignmentKeyExtractor}\n              itemRenderer={roleAssignmentItemRenderer}\n            ></Table>\n          ) : (\n            <Typography variant=\"body2\">No roles assigned.</Typography>\n          )\n        ) : (\n          idpInfo && (\n            <Typography variant=\"body2\">\n              Add a &quot;groups&quot; key in the {idpInfo.idp.attributeMappingLabel} first to assign group roles.\n            </Typography>\n          )\n        )}\n      </SettingsSection>\n    </FlexBox>\n  );\n};\n\nconst roleAssignmentKeyExtractor = ({ group }: ImplicitRoleAssignment) => group;\n\nconst roleAssignmentItemRenderer: TableItemRenderer<ImplicitRoleAssignment>[] = [\n  {\n    title: 'Group',\n    getValue: ({ group }) => (\n      <Typography variant=\"body2\" color=\"secondary\">\n        {group}\n      </Typography>\n    ),\n  },\n  { title: 'Role', getValue: ({ roleIds }) => <RolesList roles={roleIds} /> },\n];\n\nexport const RoleAssignmentsSection = ({\n  canUpdateConnection,\n  connection,\n}: {\n  canUpdateConnection: boolean;\n  connection: SAMLTaggedConnection | ExternalTaggedConnection;\n}) => {\n  const implicitRoleAssignments = getSsoConnectionRoleAssignments(connection);\n  const implicitGroupAssignments = getSsoGroupRoleAssignments(connection);\n\n  const connectionRoleIds = useMemo(\n    () => implicitRoleAssignments.map(({ role_id }) => role_id),\n    [implicitRoleAssignments],\n  );\n\n  const groupedRoles = useMemo(() => {\n    return Object.values(\n      implicitGroupAssignments.reduce<Record<string, ImplicitRoleAssignment>>((acc, { group, role_id }) => {\n        if (!acc[group]) {\n          acc[group] = { group, roleIds: [] };\n        }\n\n        acc[group].roleIds.push(role_id);\n\n        return acc;\n      }, {}),\n    );\n  }, [implicitGroupAssignments]);\n\n  const remoteState = useMemo<RoleAssignmentsFormState>(\n    () => ({\n      connectionRoleIds,\n      groupedRoles,\n    }),\n    [connectionRoleIds, groupedRoles],\n  );\n\n  const { localState, setLocalState, editing, handleSetEditing } = useFormState({ remoteState });\n\n  const { mutate } = useMutateSsoConnection(connection.connectionType);\n\n  const handleSave = useCallback(async () => {\n    const baseOptions = {\n      connection_id: connection.connection_id,\n    };\n\n    const implicitRoleAssignments = !deepEqual(remoteState.connectionRoleIds, localState.connectionRoleIds)\n      ? localState.connectionRoleIds.map((role_id) => ({\n          role_id,\n        }))\n      : undefined;\n\n    const filteredGroupRoles = localState.groupedRoles.filter(({ group, roleIds }) => group && roleIds.length > 0);\n    const implicitGroupAssignments = !deepEqual(remoteState.groupedRoles, filteredGroupRoles)\n      ? filteredGroupRoles.flatMap(({ group, roleIds }) => roleIds.map((role_id) => ({ group, role_id })))\n      : undefined;\n\n    if (connection.connectionType === 'saml') {\n      const mutatedProperties: Partial<B2BSSOSAMLUpdateConnectionOptions> = {\n        ...(implicitRoleAssignments && { saml_connection_implicit_role_assignments: implicitRoleAssignments }),\n        ...(implicitGroupAssignments && { saml_group_implicit_role_assignments: implicitGroupAssignments }),\n      };\n\n      if (Object.keys(mutatedProperties).length > 0) {\n        return mutate({ ...baseOptions, ...mutatedProperties }, { errorMessage: 'Failed to update role assignments.' });\n      }\n    } else {\n      const mutatedProperties: Partial<B2BSSOUpdateExternalConnectionOptions> = {\n        ...(implicitRoleAssignments && { external_connection_implicit_role_assignments: implicitRoleAssignments }),\n        ...(implicitGroupAssignments && { external_group_implicit_role_assignments: implicitGroupAssignments }),\n      };\n\n      if (Object.keys(mutatedProperties).length > 0) {\n        return mutate({ ...baseOptions, ...mutatedProperties }, { errorMessage: 'Failed to update role assignments.' });\n      }\n    }\n\n    return Promise.resolve();\n  }, [\n    connection.connectionType,\n    connection.connection_id,\n    localState.connectionRoleIds,\n    localState.groupedRoles,\n    mutate,\n    remoteState.connectionRoleIds,\n    remoteState.groupedRoles,\n  ]);\n\n  const { useBlockNavigation } = useSsoRouterController();\n\n  return (\n    <SettingsContainer\n      title=\"Role assignments\"\n      hasCTA={canUpdateConnection}\n      onSave={handleSave}\n      useBlockNavigation={useBlockNavigation}\n      editing={editing}\n      setEditing={handleSetEditing}\n    >\n      <RoleAssignmentsSectionBody\n        connection={connection}\n        localState={localState}\n        remoteState={remoteState}\n        setLocalState={setLocalState}\n      />\n    </SettingsContainer>\n  );\n};\n"],"names":["RoleAssignmentsSectionBody","connection","localState","setLocalState","remoteState","editing","useSettingsContainer","data","canGetOrgCustomRoles","useRbac","connectionRoleIds","groupedRoles","connectionNeedsGroupAttributeMapping","connectionType","attribute_mapping","groups","roleAutocompleteProps","useRoleAutocomplete","includeOrgRoles","handleAddGroupRole","useCallback","state","group","roleIds","handleConnectionRolesChange","value","idpInfo","getIdpInfo","identity_provider","undefined","implicitRoleAssignments","saml_connection_implicit_role_assignments","external_connection_implicit_role_assignments","React","FlexBox","flexDirection","gap","SettingsSection","title","tooltipText","Autocomplete","onChange","length","RolesList","roles","Typography","variant","map","i","key","alignItems","justifyContent","Input","label","fullWidth","item","index","values","Button","startIcon","Add","onClick","Table","items","rowKeyExtractor","roleAssignmentKeyExtractor","itemRenderer","roleAssignmentItemRenderer","idp","attributeMappingLabel","getValue","color","RoleAssignmentsSection","canUpdateConnection","getSsoConnectionRoleAssignments","implicitGroupAssignments","getSsoGroupRoleAssignments","useMemo","role_id","Object","reduce","acc","push","handleSetEditing","useFormState","mutate","useMutateSsoConnection","handleSave","baseOptions","connection_id","deepEqual","filteredGroupRoles","filter","flatMap","mutatedProperties","saml_group_implicit_role_assignments","keys","errorMessage","external_group_implicit_role_assignments","Promise","resolve","useBlockNavigation","useSsoRouterController","SettingsContainer","hasCTA","onSave","setEditing"],"mappings":"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"}