From 7a4f2bf2ea1473b859a68a95a6c6553b122dab30 Mon Sep 17 00:00:00 2001 From: poyrazavsever Date: Mon, 20 Jul 2026 10:25:40 +0300 Subject: [PATCH] refactor(auth): apply fixed public instance locale resolution to auth pages --- app/forgot-password/page.tsx | 9 ++------- app/invite/[token]/actions.ts | 5 ----- app/invite/[token]/page.tsx | 4 +++- app/login/page.tsx | 9 ++------- app/register/page.tsx | 9 ++------- app/reset-password/page.tsx | 9 ++------- 6 files changed, 11 insertions(+), 34 deletions(-) diff --git a/app/forgot-password/page.tsx b/app/forgot-password/page.tsx index 8fe081d..26f0217 100644 --- a/app/forgot-password/page.tsx +++ b/app/forgot-password/page.tsx @@ -1,9 +1,6 @@ import { AuthPageShell } from "@/components/auth/auth-page-shell"; -import { LocaleSelectForm } from "@/components/i18n/locale-select-form"; import { getPublicBranding } from "@/server/branding/runtime"; -import { getSqliteConnection } from "@/server/db/client"; -import { ContentTranslationService } from "@/server/i18n/content"; -import { resolveRequestLocale } from "@/server/i18n/resolver"; +import { resolvePublicLocale } from "@/server/i18n/resolver"; import { createTranslator } from "@/server/i18n/translator"; import Link from "next/link"; import { Alert, AlertDescription } from "poyraz-ui/molecules"; @@ -12,9 +9,8 @@ export const dynamic = "force-dynamic"; export default async function ForgotPasswordPage() { const branding = getPublicBranding(); - const locale = await resolveRequestLocale(); + const locale = await resolvePublicLocale(); const t = createTranslator(locale.locale, ["auth"]).t; - const localization = new ContentTranslationService(getSqliteConnection().db).getPublicLocalizationContext(); return ( - {t("auth.forgot.helper")} diff --git a/app/invite/[token]/actions.ts b/app/invite/[token]/actions.ts index 6c0d0f3..8789647 100644 --- a/app/invite/[token]/actions.ts +++ b/app/invite/[token]/actions.ts @@ -1,13 +1,10 @@ "use server"; -import { cookies } from "next/headers"; import { redirect } from "next/navigation"; import { acceptPortalInvitation, - getPortalInvitationPreview, PortalInvitationError, } from "@/server/auth/invitations"; -import { buildLocaleCookie } from "@/server/i18n/locale"; function inviteErrorCode(error: unknown): string { if (!(error instanceof PortalInvitationError)) return "auth.messages.portalInviteFailed"; @@ -27,7 +24,5 @@ export async function acceptInvitation(formData: FormData) { redirect(`/invite/${encodeURIComponent(token)}?error=true&code=${inviteErrorCode(error)}`); } - const locale = getPortalInvitationPreview(token)?.locale ?? "tr"; - (await cookies()).set(buildLocaleCookie(locale)); redirect("/login?code=auth.invite.success"); } diff --git a/app/invite/[token]/page.tsx b/app/invite/[token]/page.tsx index ea90175..b647ddc 100644 --- a/app/invite/[token]/page.tsx +++ b/app/invite/[token]/page.tsx @@ -9,6 +9,7 @@ import { Input, Label } from "poyraz-ui/atoms"; import { Alert, AlertDescription } from "poyraz-ui/molecules"; import { getPortalInvitationPreview } from "@/server/auth/invitations"; import { getPublicBranding } from "@/server/branding/runtime"; +import { resolveInvitationLocale } from "@/server/i18n/resolver"; import { createTranslator } from "@/server/i18n/translator"; export const dynamic = "force-dynamic"; @@ -28,7 +29,8 @@ export default async function InvitationPage({ notFound(); } - const t = createTranslator(invitation.locale, ["auth"]).t; + const resolvedLocale = await resolveInvitationLocale(invitation.locale); + const t = createTranslator(resolvedLocale.locale, ["auth"]).t; const query = await searchParams; const queryCode = query.code ?? null; const queryMessage = queryCode ? t(queryCode) : query.message; diff --git a/app/login/page.tsx b/app/login/page.tsx index 86f6bfb..153c989 100644 --- a/app/login/page.tsx +++ b/app/login/page.tsx @@ -1,16 +1,13 @@ import { login } from "@/app/login/actions"; import { AuthPageShell } from "@/components/auth/auth-page-shell"; import { ErrorToaster } from "@/components/error-toaster"; -import { LocaleSelectForm } from "@/components/i18n/locale-select-form"; import { LockKeyhole, LogIn, Mail } from "lucide-react"; import Link from "next/link"; import { Input, Label } from "poyraz-ui/atoms"; import { Alert, AlertDescription } from "poyraz-ui/molecules"; import { SubmitButton } from "@/components/auth/submit-button"; import { getPublicBranding } from "@/server/branding/runtime"; -import { getSqliteConnection } from "@/server/db/client"; -import { ContentTranslationService } from "@/server/i18n/content"; -import { resolveRequestLocale } from "@/server/i18n/resolver"; +import { resolvePublicLocale } from "@/server/i18n/resolver"; import { createTranslator } from "@/server/i18n/translator"; import type { TranslationValues } from "@/lib/i18n"; @@ -40,9 +37,8 @@ export default async function LoginPage({ const code = firstParam(resolvedParams?.code); const rawMessage = firstParam(resolvedParams?.message); const branding = getPublicBranding(); - const locale = await resolveRequestLocale(); + const locale = await resolvePublicLocale(); const t = createTranslator(locale.locale, ["auth"]).t; - const localization = new ContentTranslationService(getSqliteConnection().db).getPublicLocalizationContext(); const message = resolveAuthMessage(code, rawMessage, t); const marketing = { headline: t("auth.marketing.headline"), @@ -78,7 +74,6 @@ export default async function LoginPage({ {message} ) : null} -