mirror of
https://github.com/documenso/documenso.git
synced 2025-11-13 00:03:33 +10:00
84 lines
2.6 KiB
TypeScript
84 lines
2.6 KiB
TypeScript
import { Trans } from '@lingui/react/macro';
|
|
import { Link, redirect } from 'react-router';
|
|
|
|
import { extractCookieFromHeaders } from '@documenso/auth/server/lib/utils/cookies';
|
|
import { getOptionalSession } from '@documenso/auth/server/lib/utils/get-session';
|
|
import {
|
|
IS_GOOGLE_SSO_ENABLED,
|
|
IS_OIDC_SSO_ENABLED,
|
|
OIDC_PROVIDER_LABEL,
|
|
} from '@documenso/lib/constants/auth';
|
|
import { env } from '@documenso/lib/utils/env';
|
|
|
|
import { SignInForm } from '~/components/forms/signin';
|
|
import { appMetaTags } from '~/utils/meta';
|
|
|
|
import type { Route } from './+types/signin';
|
|
|
|
export function meta() {
|
|
return appMetaTags('Sign In');
|
|
}
|
|
|
|
export async function loader({ request }: Route.LoaderArgs) {
|
|
const { isAuthenticated } = await getOptionalSession(request);
|
|
const redirectToCookie = extractCookieFromHeaders('redirectTo', request.headers);
|
|
const redirectToAfterLogin = redirectToCookie ? decodeURIComponent(redirectToCookie) : '';
|
|
|
|
const isGoogleSSOEnabled = IS_GOOGLE_SSO_ENABLED;
|
|
const isOIDCSSOEnabled = IS_OIDC_SSO_ENABLED;
|
|
const oidcProviderLabel = OIDC_PROVIDER_LABEL;
|
|
|
|
if (isAuthenticated) {
|
|
if (redirectToAfterLogin) {
|
|
throw redirect(redirectToAfterLogin);
|
|
}
|
|
|
|
throw redirect('/documents');
|
|
}
|
|
|
|
return {
|
|
isGoogleSSOEnabled,
|
|
isOIDCSSOEnabled,
|
|
oidcProviderLabel,
|
|
redirectToAfterLogin,
|
|
};
|
|
}
|
|
|
|
export default function SignIn({ loaderData }: Route.ComponentProps) {
|
|
const { isGoogleSSOEnabled, isOIDCSSOEnabled, oidcProviderLabel, redirectToAfterLogin } =
|
|
loaderData;
|
|
|
|
return (
|
|
<div className="w-screen max-w-lg px-4">
|
|
<div className="border-border dark:bg-background z-10 rounded-xl border bg-neutral-100 p-6">
|
|
<h1 className="text-2xl font-semibold">
|
|
<Trans>Sign in to your account</Trans>
|
|
</h1>
|
|
|
|
<p className="text-muted-foreground mt-2 text-sm">
|
|
<Trans>Welcome back, we are lucky to have you.</Trans>
|
|
</p>
|
|
<hr className="-mx-6 my-4" />
|
|
|
|
<SignInForm
|
|
isGoogleSSOEnabled={isGoogleSSOEnabled}
|
|
isOIDCSSOEnabled={isOIDCSSOEnabled}
|
|
oidcProviderLabel={oidcProviderLabel}
|
|
returnTo={redirectToAfterLogin ?? undefined}
|
|
/>
|
|
|
|
{env('NEXT_PUBLIC_DISABLE_SIGNUP') !== 'true' && (
|
|
<p className="text-muted-foreground mt-6 text-center text-sm">
|
|
<Trans>
|
|
Don't have an account?{' '}
|
|
<Link to="/signup" className="text-documenso-700 duration-200 hover:opacity-70">
|
|
Sign up
|
|
</Link>
|
|
</Trans>
|
|
</p>
|
|
)}
|
|
</div>
|
|
</div>
|
|
);
|
|
}
|