import { useState } from "react"; import LicenseRequired from "@calcom/features/ee/common/components/v2/LicenseRequired"; import ConfigDialogForm from "@calcom/features/ee/sso/components/ConfigDialogForm"; import { APP_NAME } from "@calcom/lib/constants"; import { useLocale } from "@calcom/lib/hooks/useLocale"; import { trpc } from "@calcom/trpc/react"; import { Alert, Badge, Button, ClipboardCopyIcon, ConfirmationDialogContent, Dialog, DialogContent, DialogTrigger, Icon, Label, Meta, showToast, SkeletonLoader, } from "@calcom/ui"; export default function SAMLConfiguration({ teamId }: { teamId: number | null }) { const { t } = useLocale(); const utils = trpc.useContext(); const [hasError, setHasError] = useState(false); const [errorMessage, setErrorMessage] = useState(""); const [configModal, setConfigModal] = useState(false); const { data: connection, isLoading } = trpc.viewer.saml.get.useQuery( { teamId }, { onError: (err) => { setHasError(true); setErrorMessage(err.message); }, onSuccess: () => { setHasError(false); setErrorMessage(""); }, } ); const mutation = trpc.viewer.saml.delete.useMutation({ async onSuccess() { await utils.viewer.saml.get.invalidate(); showToast(t("saml_config_deleted_successfully"), "success"); }, onError: (err) => { showToast(err.message, "error"); }, }); const deleteConnection = () => { mutation.mutate({ teamId, }); }; if (isLoading) { return ; } if (hasError) { return ( <> > ); } return ( <> {connection && connection.provider ? ( SAML SSO enabled via {connection.provider} ) : ( {t("saml_not_configured_yet")} )} { setConfigModal(true); }}> {t("saml_btn_configure")} {/* Service Provider Details */} {connection && connection.provider && ( <> {t("saml_sp_title")} {t("saml_sp_description")} {t("saml_sp_acs_url")} {connection.acsUrl} { navigator.clipboard.writeText(connection.acsUrl); showToast(t("saml_sp_acs_url_copied"), "success"); }} type="button" className="px-4 text-base"> {t("copy")} {t("saml_sp_entity_id")} {connection.entityId} { navigator.clipboard.writeText(connection.entityId); showToast(t("saml_sp_entity_id_copied"), "success"); }} type="button" className="px-4 text-base"> {t("copy")} > )} {/* Danger Zone and Delete Confirmation */} {connection && connection.provider && ( <> {t("danger_zone")} {t("delete_saml_configuration")} {t("delete_saml_configuration_confirmation_message", { appName: APP_NAME })} > )} {/* Add/Update SAML Connection */} setConfigModal(false)} teamId={teamId} /> > ); }
{t("saml_sp_description")}
{connection.acsUrl}
{connection.entityId}