+
+
+ {twoFactorAuthenticationMethod === 'totp' ? (
+
+
+ {organisationTwoFactorGracePeriodDays > 0 ? (
+
{match(acceptFailureReason) diff --git a/apps/remix/app/routes/_unauthenticated+/organisation.sso.confirmation.$token.tsx b/apps/remix/app/routes/_unauthenticated+/organisation.sso.confirmation.$token.tsx index a93f096c5..e9335a968 100644 --- a/apps/remix/app/routes/_unauthenticated+/organisation.sso.confirmation.$token.tsx +++ b/apps/remix/app/routes/_unauthenticated+/organisation.sso.confirmation.$token.tsx @@ -86,6 +86,12 @@ export async function loader({ params }: Route.LoaderArgs) { name: true, url: true, avatarImageId: true, + organisationGlobalSettings: { + select: { + twoFactorRequired: true, + twoFactorGracePeriodDays: true, + }, + }, }, }); @@ -107,6 +113,10 @@ export async function loader({ params }: Route.LoaderArgs) { name: organisation.name, url: organisation.url, avatar: organisation.avatarImageId, + // Non-blocking notice data: SSO membership creation always succeeds; + // the 2FA grace window starts at join. + twoFactorRequired: organisation.organisationGlobalSettings.twoFactorRequired, + twoFactorGracePeriodDays: organisation.organisationGlobalSettings.twoFactorGracePeriodDays, }, } as const; } @@ -266,6 +276,26 @@ export default function OrganisationSsoConfirmationTokenPage({ loaderData }: Rou
+
+
+
+
+
+
+ {canSkip && !recoveryCodes && (
+
+