import useSWR from 'swr';
import { useTranslation } from 'next-i18next';
import { Prism as SyntaxHighlighter } from 'react-syntax-highlighter/dist/cjs';
import { materialOceanic } from 'react-syntax-highlighter/dist/cjs/styles/prism';
import { fetcher } from '../utils';
import type { SSOTrace } from '../types';
import { Loading, Error, PageHeader, Badge } from '../shared';
import { CopyToClipboardButton } from '../shared/InputWithCopyButton';
const ListItem = ({ term, value }: { term: string; value: string | JSX.Element }) => (
{term}
{value}
);
export const SSOTracerInfo = ({ urls }: { urls: { getTracer: string } }) => {
const { t } = useTranslation('common');
const { data, isLoading, error } = useSWR<{ data: SSOTrace & { traceId: string } }>(
urls.getTracer,
fetcher
);
if (isLoading) {
return ;
}
if (error) {
return ;
}
if (!data) {
return null;
}
const trace = data.data;
const assertionType = trace.context.samlResponse ? 'Response' : trace.context.samlRequest ? 'Request' : '-';
let badgeText = '';
if (trace.context.isOIDCFederated) {
if (trace.context.requestedOIDCFlow) {
badgeText = t('bui-shared-oidc-federation');
} else {
badgeText = t('bui-tracer-oauth2-federation');
}
} else if (trace.context.isSAMLFederated) {
badgeText = t('bui-tracer-saml-federation');
} else if (trace.context.isIdPFlow) {
badgeText = t('bui-tracer-idp-login');
} else if (trace.context.requestedOIDCFlow) {
badgeText = t('bui-shared-oidc');
} else {
badgeText = t('bui-tracer-oauth2');
}
return (
{badgeText}
}
/>
{typeof trace.timestamp === 'number' && (
)}
{trace.context.tenant && }
{trace.context.product && }
{trace.context.relayState && (
)}
{trace.context.redirectUri && (
)}
{trace.context.clientID && (
)}
{trace.context.issuer && }
{trace.context.acsUrl && }
{trace.context.entityId && (
)}
{trace.context.providerName && (
)}
{assertionType === 'Response' && trace.context.samlResponse && (
{trace.context.samlResponse}
>
}
/>
)}
{assertionType === 'Request' && trace.context.samlRequest && (
{trace.context.samlRequest}
>
}
/>
)}
{typeof trace.context.profile === 'object' && trace.context.profile && (
{JSON.stringify(trace.context.profile)}
}
/>
)}
{trace.context.error_description && (
)}
{trace.context.error_uri && (
)}
{trace.context.oidcTokenSet?.id_token && (
{trace.context.oidcTokenSet.id_token}
>
}
/>
)}
{trace.context.oidcTokenSet?.access_token && (
{trace.context.oidcTokenSet.access_token}
>
}
/>
)}
{trace.context.stack && (
{trace.context.stack}
}
/>
)}
{trace.context.session_state_from_op_error && (
)}
{trace.context.scope_from_op_error && (
)}
);
};