{"version":3,"file":"DetailedAttributeMappingTable.mjs","sources":["../../../../../../../../web/src/adminPortal/sso/DetailedAttributeMappingTable.tsx"],"sourcesContent":["import { adminPortalAssets } from '@stytch/internal-assets';\nimport React, { useState } from 'react';\n\nimport { Instruction } from '../components/Instruction';\nimport { InstructionSet } from '../components/InstructionSet';\nimport { Switch } from '../components/Switch';\nimport { Table } from '../components/Table';\nimport { Typography } from '../components/Typography';\nimport { Screenshot } from '../shared/components/Screenshot';\nimport { TableItemRenderer } from '../shared/components/types';\nimport { StateProps } from '../utils/useFormState';\nimport { useOrgInfo } from '../utils/useOrgInfo';\nimport { AttributeMappingState, AttributeMappingTable } from './AttributeMappingTable';\nimport { getIdpAndConnectionInfo, SamlSupportedAttributeMappingIdp } from './IdpInfo';\nimport { SAMLTaggedConnection } from './TaggedConnection';\n\nexport interface DetailedAttributeMappingTableProps<TState> extends StateProps<TState> {\n  connection: SAMLTaggedConnection;\n}\n\ntype IdpInstructionProps = {\n  isGroupInfoIncluded: boolean;\n  handleIncludeGroupInfoChange: (value: boolean) => void;\n};\n\nconst createAttributeItems = (attributeMap: Record<string, string>) => {\n  return Object.entries(attributeMap).map(([key, value]) => ({ key, value }));\n};\n\nconst AttributeTable = ({\n  itemsMap,\n  itemRenderer,\n}: {\n  itemsMap: Record<string, string>;\n  itemRenderer: TableItemRenderer<{\n    key: string;\n    value: string;\n  }>[];\n}) => {\n  const items = createAttributeItems(itemsMap);\n\n  return (\n    <Table titleVariant=\"caption\" rowKeyExtractor={({ key }) => key} itemRenderer={itemRenderer} items={items}></Table>\n  );\n};\n\nconst OktaSamlInstructions = ({ isGroupInfoIncluded, handleIncludeGroupInfoChange }: IdpInstructionProps) => {\n  const { data } = useOrgInfo();\n  const organizationName = data?.organization_name ?? '';\n\n  return (\n    <InstructionSet>\n      <Instruction>\n        Under <b>Attribute Statements (optional)</b> add the following attributes to send to {organizationName} as part\n        of the SAML Assertion with the <b>Basic</b> name format:\n      </Instruction>\n      <AttributeTable\n        itemsMap={{\n          firstName: 'user.firstName',\n          lastName: 'user.lastName',\n          id: 'user.id',\n        }}\n        itemRenderer={[\n          {\n            title: 'Name',\n            getValue: ({ key }) => <Typography variant=\"body2\">{key}</Typography>,\n          },\n          { title: 'Value', getValue: ({ value }) => <Typography variant=\"body2\">{value}</Typography> },\n        ]}\n      />\n      <Switch\n        label=\"Include group info in the SAML Assertion.\"\n        checked={isGroupInfoIncluded}\n        onChange={handleIncludeGroupInfoChange}\n      />\n      {isGroupInfoIncluded && (\n        <>\n          <Instruction>\n            Under <b>Group Attribute Statements</b> add a mapping with the <b>Basic</b> name format:\n          </Instruction>\n          <AttributeTable\n            itemsMap={{\n              groups: 'Matches regex',\n            }}\n            itemRenderer={[\n              {\n                title: 'Name',\n                getValue: ({ key }) => <Typography variant=\"body2\">{key}</Typography>,\n              },\n              { title: 'Filter', getValue: ({ value }) => <Typography variant=\"body2\">{value}</Typography> },\n              { title: 'Value', getValue: () => <Typography variant=\"body2\">.*</Typography> },\n            ]}\n          />\n          <Instruction>\n            Save and continue, selecting <b>internal</b> as the <b>App Type</b>.\n          </Instruction>\n        </>\n      )}\n      <Instruction>Your configuration page should look like the following:</Instruction>\n      <Screenshot src={adminPortalAssets.oktaSamlSettingsConfig} alt=\"Okta SAML settings config\" />\n    </InstructionSet>\n  );\n};\n\nconst EntraSamlInstructions = () => (\n  <InstructionSet>\n    <Instruction>\n      Next select <b>Edit</b> on Step 2 of the setup <b>Attributes & Claims</b>.\n    </Instruction>\n    <Instruction>\n      Under <b>Required Claims</b> click on <b>Unique User Identifier (Name ID)</b> and set the following values and\n      save:\n    </Instruction>\n    <AttributeTable\n      itemsMap={{\n        'Email address': 'user.primaryauthoritativeemail',\n      }}\n      itemRenderer={[\n        {\n          title: 'Name Identifier Format',\n          getValue: ({ key }) => <Typography variant=\"body2\">{key}</Typography>,\n        },\n        { title: 'Source attribute', getValue: ({ value }) => <Typography variant=\"body2\">{value}</Typography> },\n      ]}\n    />\n    <Screenshot src={adminPortalAssets.entraEditNameidClaim} alt=\"Entra Edit NameID Claim\" />\n    <Instruction>\n      After saving the Name ID claim, under <b>Additional Claims</b> edit the following claims to match the below\n      format:\n    </Instruction>\n    <AttributeTable\n      itemsMap={{\n        firstName: 'user.givenname',\n        lastName: 'user.surname',\n        id: 'user.objectid',\n      }}\n      itemRenderer={[\n        {\n          title: 'Name',\n          getValue: ({ key }) => <Typography variant=\"body2\">{key}</Typography>,\n        },\n        { title: 'Source Attribute', getValue: ({ value }) => <Typography variant=\"body2\">{value}</Typography> },\n      ]}\n    />\n    <Screenshot src={adminPortalAssets.entraAttributesAndClaims} alt=\"Entra Attributes and Claims\" />\n    <Instruction>\n      Click <b>Save</b> and close out of the <b>Attributes & Claims</b> page.\n    </Instruction>\n  </InstructionSet>\n);\n\nconst GoogleSamlInstructions = ({ isGroupInfoIncluded, handleIncludeGroupInfoChange }: IdpInstructionProps) => {\n  return (\n    <InstructionSet>\n      <Instruction>\n        On the <b>Attributes</b> page select <b>Add Mapping</b> and select the following fields for the Google Directory\n        attribute mapping to the provided string for the App attribute input:\n      </Instruction>\n      <AttributeTable\n        itemsMap={{\n          'First Name': 'firstName',\n          'Last Name': 'lastName',\n        }}\n        itemRenderer={[\n          {\n            title: 'Google Directory attribute: Basic Information',\n            getValue: ({ key }) => <Typography variant=\"body2\">{key}</Typography>,\n          },\n          { title: 'App attributes', getValue: ({ value }) => <Typography variant=\"body2\">{value}</Typography> },\n        ]}\n      />\n      <Switch\n        label=\"Include group info in Google Groups.\"\n        checked={isGroupInfoIncluded}\n        onChange={handleIncludeGroupInfoChange}\n      />\n      {isGroupInfoIncluded && (\n        <>\n          <Instruction>\n            Under Group membership select the groups that you wish to include information about and set the App\n            attribute input to:\n          </Instruction>\n          <AttributeTable\n            itemsMap={{\n              groups: 'groups',\n            }}\n            itemRenderer={[{ title: 'App attribute', getValue: () => <Typography variant=\"body2\">groups</Typography> }]}\n          />\n          <Instruction>\n            Click <b>Finish</b>.\n          </Instruction>\n        </>\n      )}\n      <Instruction>\n        On the app page under <b>User Access</b> click on <b>OFF for everyone</b> to open the <b>Service status</b> to{' '}\n        <b>ON for everyone</b>, or search for specific Groups on the left hand navigation in order to selectively enable\n        for particular Google Groups.\n      </Instruction>\n      <Screenshot src={adminPortalAssets.googleUserAccess} alt=\"Google User Access\" />\n      <Screenshot src={adminPortalAssets.googleAccessOn} alt=\"Google Access ON\" />\n    </InstructionSet>\n  );\n};\n\nexport const DetailedAttributeMappingTable = <TState extends AttributeMappingState>({\n  connection: connectionProp,\n  localState,\n  setLocalState,\n  remoteState,\n}: DetailedAttributeMappingTableProps<TState>) => {\n  const { connection } = getIdpAndConnectionInfo(connectionProp);\n\n  const [isGroupInfoIncluded, setIsGroupInfoIncluded] = useState(false);\n\n  const handleIncludeGroupInfoChange = (value: boolean) => {\n    setIsGroupInfoIncluded(value);\n    setLocalState((prevState) => {\n      return {\n        ...prevState,\n        attributeMapping: {\n          ...prevState.attributeMapping,\n          groups: value ? 'groups' : '',\n        },\n      };\n    });\n  };\n\n  const samlMap: Record<SamlSupportedAttributeMappingIdp, React.ReactNode> = {\n    okta: (\n      <OktaSamlInstructions\n        isGroupInfoIncluded={isGroupInfoIncluded}\n        handleIncludeGroupInfoChange={handleIncludeGroupInfoChange}\n      />\n    ),\n    'microsoft-entra': <EntraSamlInstructions />,\n    'google-workspace': (\n      <GoogleSamlInstructions\n        isGroupInfoIncluded={isGroupInfoIncluded}\n        handleIncludeGroupInfoChange={handleIncludeGroupInfoChange}\n      />\n    ),\n  };\n\n  return connection.identity_provider in samlMap ? (\n    samlMap[connection.identity_provider as SamlSupportedAttributeMappingIdp]\n  ) : (\n    <AttributeMappingTable editing localState={localState} setLocalState={setLocalState} remoteState={remoteState} />\n  );\n};\n"],"names":["createAttributeItems","attributeMap","Object","entries","map","key","value","AttributeTable","itemsMap","itemRenderer","items","React","Table","titleVariant","rowKeyExtractor","OktaSamlInstructions","isGroupInfoIncluded","handleIncludeGroupInfoChange","data","useOrgInfo","organizationName","organization_name","InstructionSet","Instruction","b","firstName","lastName","id","title","getValue","Typography","variant","Switch","label","checked","onChange","groups","Screenshot","src","adminPortalAssets","oktaSamlSettingsConfig","alt","EntraSamlInstructions","entraEditNameidClaim","entraAttributesAndClaims","GoogleSamlInstructions","googleUserAccess","googleAccessOn","DetailedAttributeMappingTable","connection","connectionProp","localState","setLocalState","remoteState","getIdpAndConnectionInfo","setIsGroupInfoIncluded","useState","prevState","attributeMapping","samlMap","okta","identity_provider","AttributeMappingTable","editing"],"mappings":"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"}