import { useState } from "react"; import LicenseRequired from "@calcom/features/ee/common/components/v2/LicenseRequired"; import ConfigDialogForm from "@calcom/features/ee/sso/components/ConfigDialogForm"; import { useLocale } from "@calcom/lib/hooks/useLocale"; import { trpc } from "@calcom/trpc/react"; import { Icon } from "@calcom/ui"; import { Alert } from "@calcom/ui/Alert"; import { ClipboardCopyIcon } from "@calcom/ui/Icon"; import { Button, showToast, Label } from "@calcom/ui/v2"; import Badge from "@calcom/ui/v2/core/Badge"; import ConfirmationDialogContent from "@calcom/ui/v2/core/ConfirmationDialogContent"; import { Dialog, DialogTrigger, DialogContent } from "@calcom/ui/v2/core/Dialog"; import Meta from "@calcom/ui/v2/core/Meta"; import SkeletonLoader from "@calcom/ui/v2/core/apps/SkeletonLoader"; 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.useQuery(["viewer.saml.get", { teamId }], { onError: (err) => { setHasError(true); setErrorMessage(err.message); }, onSuccess: () => { setHasError(false); setErrorMessage(""); }, }); const mutation = trpc.useMutation("viewer.saml.delete", { async onSuccess() { await utils.invalidateQueries(["viewer.saml.get"]); 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")} > )} {/* Add/Update SAML Connection */} setConfigModal(false)} teamId={teamId} /> > ); }
{t("saml_sp_description")}
{connection.acsUrl}
{connection.entityId}