From eb21628ee42406e1e5cb351fcd846fd4cb8a1972 Mon Sep 17 00:00:00 2001 From: Meier Lukas Date: Mon, 7 Oct 2024 21:13:15 +0200 Subject: [PATCH] refactor: replace signIn callback with signIn event, adjust getUserByEmail in adapter to check provider (#1223) * refactor: replace signIn callback with signIn event, adjust getUserByEmail in adapter to check provider * test: adjusting tests for adapter and events * docs: add comments for unknown auth provider * fix: missing dayjs import --- .../app/[locale]/auth/login/_login-form.tsx | 27 +-- .../src/app/api/auth/[...nextauth]/route.ts | 28 ++- packages/auth/adapter.ts | 44 +++- packages/auth/callbacks.ts | 50 ----- packages/auth/configuration.ts | 21 +- packages/auth/env.mjs | 2 + packages/auth/events.ts | 131 ++++++++++++ packages/auth/index.ts | 5 +- packages/auth/next.ts | 2 +- .../authorization/ldap-authorization.ts | 87 +------- .../credentials/credentials-provider.ts | 31 ++- .../test/basic-authorization.spec.ts | 4 - .../providers/test/ldap-authorization.spec.ts | 96 +-------- packages/auth/session.ts | 3 +- packages/auth/test/adapter.spec.ts | 67 ++++++ packages/auth/test/callbacks.spec.ts | 154 +------------- packages/auth/test/events.spec.ts | 190 ++++++++++++++++++ packages/validation/src/user.ts | 1 - turbo.json | 1 + 19 files changed, 521 insertions(+), 423 deletions(-) create mode 100644 packages/auth/events.ts create mode 100644 packages/auth/test/adapter.spec.ts create mode 100644 packages/auth/test/events.spec.ts diff --git a/apps/nextjs/src/app/[locale]/auth/login/_login-form.tsx b/apps/nextjs/src/app/[locale]/auth/login/_login-form.tsx index 0c745c656..f4ce00f67 100644 --- a/apps/nextjs/src/app/[locale]/auth/login/_login-form.tsx +++ b/apps/nextjs/src/app/[locale]/auth/login/_login-form.tsx @@ -12,8 +12,7 @@ import type { useForm } from "@homarr/form"; import { useZodForm } from "@homarr/form"; import { showErrorNotification, showSuccessNotification } from "@homarr/notifications"; import { useScopedI18n } from "@homarr/translation/client"; -import type { z } from "@homarr/validation"; -import { validation } from "@homarr/validation"; +import { validation, z } from "@homarr/validation"; interface LoginFormProps { providers: string[]; @@ -22,15 +21,17 @@ interface LoginFormProps { callbackUrl: string; } +const extendedValidation = validation.user.signIn.extend({ provider: z.enum(["credentials", "ldap"]) }); + export const LoginForm = ({ providers, oidcClientName, isOidcAutoLoginEnabled, callbackUrl }: LoginFormProps) => { const t = useScopedI18n("user"); const router = useRouter(); const [isPending, setIsPending] = useState(false); - const form = useZodForm(validation.user.signIn, { + const form = useZodForm(extendedValidation, { initialValues: { name: "", password: "", - credentialType: "basic", + provider: "credentials", }, }); @@ -95,14 +96,14 @@ export const LoginForm = ({ providers, oidcClientName, isOidcAutoLoginEnabled, c {credentialInputsVisible && ( <> -
void signInAsync("credentials", credentials))}> + void signInAsync(credentials.provider, credentials))}> {providers.includes("credentials") && ( - + {t("action.login.label")} @@ -110,7 +111,7 @@ export const LoginForm = ({ providers, oidcClientName, isOidcAutoLoginEnabled, c )} {providers.includes("ldap") && ( - + {t("action.login.labelWith", { provider: "LDAP" })} )} @@ -133,18 +134,18 @@ export const LoginForm = ({ providers, oidcClientName, isOidcAutoLoginEnabled, c interface SubmitButtonProps { isPending: boolean; form: ReturnType FormType>>; - credentialType: "basic" | "ldap"; + provider: "credentials" | "ldap"; } -const SubmitButton = ({ isPending, form, credentialType, children }: PropsWithChildren) => { - const isCurrentProviderActive = form.getValues().credentialType === credentialType; +const SubmitButton = ({ isPending, form, provider, children }: PropsWithChildren) => { + const isCurrentProviderActive = form.getValues().provider === provider; return (