import { getOptionalSession } from '@documenso/auth/server/lib/utils/get-session'; import { IS_GOOGLE_SSO_ENABLED, IS_MICROSOFT_SSO_ENABLED, IS_OIDC_SSO_ENABLED, isSignupEnabledForProvider, OIDC_PROVIDER_LABEL, } from '@documenso/lib/constants/auth'; import { isValidReturnTo, normalizeReturnTo } from '@documenso/lib/utils/is-valid-return-to'; import { Alert, AlertDescription } from '@documenso/ui/primitives/alert'; import { msg } from '@lingui/core/macro'; import { useLingui } from '@lingui/react'; import { Trans } from '@lingui/react/macro'; import { useEffect, useState } from 'react'; import { Link, redirect, useSearchParams } from 'react-router'; import { SignInForm } from '~/components/forms/signin'; import { SIGNUP_ERROR_MESSAGES } from '~/components/forms/signup'; import { appMetaTags } from '~/utils/meta'; import type { Route } from './+types/signin'; export function meta() { return appMetaTags(msg`Sign In`); } export async function loader({ request }: Route.LoaderArgs) { const { isAuthenticated } = await getOptionalSession(request); // SSR env variables. const isGoogleSSOEnabled = IS_GOOGLE_SSO_ENABLED; const isMicrosoftSSOEnabled = IS_MICROSOFT_SSO_ENABLED; const isOIDCSSOEnabled = IS_OIDC_SSO_ENABLED; const oidcProviderLabel = OIDC_PROVIDER_LABEL; const isSignupEnabled = isSignupEnabledForProvider('email') || (IS_GOOGLE_SSO_ENABLED && isSignupEnabledForProvider('google')) || (IS_MICROSOFT_SSO_ENABLED && isSignupEnabledForProvider('microsoft')) || (IS_OIDC_SSO_ENABLED && isSignupEnabledForProvider('oidc')); let returnTo = new URL(request.url).searchParams.get('returnTo') ?? undefined; returnTo = isValidReturnTo(returnTo) ? normalizeReturnTo(returnTo) : undefined; if (isAuthenticated) { throw redirect(returnTo || '/'); } return { isGoogleSSOEnabled, isMicrosoftSSOEnabled, isOIDCSSOEnabled, isSignupEnabled, oidcProviderLabel, returnTo, }; } export default function SignIn({ loaderData }: Route.ComponentProps) { const { isGoogleSSOEnabled, isMicrosoftSSOEnabled, isOIDCSSOEnabled, isSignupEnabled, oidcProviderLabel, returnTo } = loaderData; const { _ } = useLingui(); const [searchParams] = useSearchParams(); const [isEmbeddedRedirect, setIsEmbeddedRedirect] = useState(false); const errorParam = searchParams.get('error'); const signupError = errorParam ? SIGNUP_ERROR_MESSAGES[errorParam] : undefined; useEffect(() => { const hash = window.location.hash.slice(1); const params = new URLSearchParams(hash); setIsEmbeddedRedirect(params.get('embedded') === 'true'); }, []); return (
{signupError && ( {_(signupError)} )}

Sign in to your account

Welcome back, we are lucky to have you.


{!isEmbeddedRedirect && isSignupEnabled && (

Don't have an account?{' '} Sign up

)}
); }