From d3111d3ba3f1bb6c64d8edaa05b14f412e614eea Mon Sep 17 00:00:00 2001 From: Max Peintner Date: Mon, 23 Dec 2024 09:32:01 +0100 Subject: [PATCH] handle error when linking --- .../(login)/idp/[provider]/failure/page.tsx | 2 +- .../(login)/idp/[provider]/success/page.tsx | 43 +++++++++++-------- .../components/idps/pages/linking-failed.tsx | 9 ++-- .../components/idps/pages/linking-success.tsx | 9 ++-- .../components/idps/pages/login-failed.tsx | 12 +++--- .../components/idps/pages/login-success.tsx | 9 ++-- 6 files changed, 45 insertions(+), 39 deletions(-) diff --git a/apps/login/src/app/(login)/idp/[provider]/failure/page.tsx b/apps/login/src/app/(login)/idp/[provider]/failure/page.tsx index a8bc6d9cb5..a3cc0ee883 100644 --- a/apps/login/src/app/(login)/idp/[provider]/failure/page.tsx +++ b/apps/login/src/app/(login)/idp/[provider]/failure/page.tsx @@ -28,7 +28,7 @@ export default async function Page(props: {

{t("loginError.title")}

-
{t("loginError.description")}
+

{t("loginError.description")}

); diff --git a/apps/login/src/app/(login)/idp/[provider]/success/page.tsx b/apps/login/src/app/(login)/idp/[provider]/success/page.tsx index 4ae6126c77..cc3f7129d1 100644 --- a/apps/login/src/app/(login)/idp/[provider]/success/page.tsx +++ b/apps/login/src/app/(login)/idp/[provider]/success/page.tsx @@ -74,17 +74,20 @@ export default async function Page(props: { if (link && options?.isLinkingAllowed) { console.log(userId); - const idpLink = await addIDPLink( - { - id: idpInformation.idpId, - userId: idpInformation.userId, - userName: idpInformation.userName, - }, - userId, - ).catch((error) => { + let idpLink; + try { + idpLink = await addIDPLink( + { + id: idpInformation.idpId, + userId: idpInformation.userId, + userName: idpInformation.userName, + }, + userId, + ); + } catch (error) { console.error(error); return linkingFailed(branding); - }); + } if (!idpLink) { console.log("linking failed"); @@ -126,17 +129,21 @@ export default async function Page(props: { } if (foundUser) { - const idpLink = await addIDPLink( - { - id: idpInformation.idpId, - userId: idpInformation.userId, - userName: idpInformation.userName, - }, - foundUser.userId, - ).catch((error) => { + let idpLink; + try { + idpLink = await addIDPLink( + { + id: idpInformation.idpId, + userId: idpInformation.userId, + userName: idpInformation.userName, + }, + foundUser.userId, + ); + } catch (error) { console.error(error); return linkingFailed(branding); - }); + } + if (!idpLink) { return linkingFailed(branding); } else { diff --git a/apps/login/src/components/idps/pages/linking-failed.tsx b/apps/login/src/components/idps/pages/linking-failed.tsx index 94678fb293..82d6a06739 100644 --- a/apps/login/src/components/idps/pages/linking-failed.tsx +++ b/apps/login/src/components/idps/pages/linking-failed.tsx @@ -1,13 +1,12 @@ -"use client"; - import { LanguageProvider } from "@/components/language-provider"; import { BrandingSettings } from "@zitadel/proto/zitadel/settings/v2/branding_settings_pb"; -import { useTranslations } from "next-intl"; +import { getLocale, getTranslations } from "next-intl/server"; import { Alert, AlertType } from "../../alert"; import { DynamicTheme } from "../../dynamic-theme"; -export function linkingFailed(branding?: BrandingSettings) { - const t = useTranslations("idp"); +export async function linkingFailed(branding?: BrandingSettings) { + const locale = getLocale(); + const t = await getTranslations({ locale, namespace: "idp" }); return ( diff --git a/apps/login/src/components/idps/pages/linking-success.tsx b/apps/login/src/components/idps/pages/linking-success.tsx index 39671d8f60..66098ed6ff 100644 --- a/apps/login/src/components/idps/pages/linking-success.tsx +++ b/apps/login/src/components/idps/pages/linking-success.tsx @@ -1,17 +1,16 @@ -"use client"; - import { BrandingSettings } from "@zitadel/proto/zitadel/settings/v2/branding_settings_pb"; -import { useTranslations } from "next-intl"; +import { getLocale, getTranslations } from "next-intl/server"; import { DynamicTheme } from "../../dynamic-theme"; import { IdpSignin } from "../../idp-signin"; -export function linkingSuccess( +export async function linkingSuccess( userId: string, idpIntent: { idpIntentId: string; idpIntentToken: string }, authRequestId?: string, branding?: BrandingSettings, ) { - const t = useTranslations("idp"); + const locale = getLocale(); + const t = await getTranslations({ locale, namespace: "idp" }); return ( diff --git a/apps/login/src/components/idps/pages/login-failed.tsx b/apps/login/src/components/idps/pages/login-failed.tsx index 5bddf29a08..ea8b22ccf5 100644 --- a/apps/login/src/components/idps/pages/login-failed.tsx +++ b/apps/login/src/components/idps/pages/login-failed.tsx @@ -1,13 +1,15 @@ -"use client"; - import { LanguageProvider } from "@/components/language-provider"; import { BrandingSettings } from "@zitadel/proto/zitadel/settings/v2/branding_settings_pb"; -import { useTranslations } from "next-intl"; +import { getLocale, getTranslations } from "next-intl/server"; import { Alert, AlertType } from "../../alert"; import { DynamicTheme } from "../../dynamic-theme"; -export function loginFailed(branding?: BrandingSettings, error: string = "") { - const t = useTranslations("idp"); +export async function loginFailed( + branding?: BrandingSettings, + error: string = "", +) { + const locale = getLocale(); + const t = await getTranslations({ locale, namespace: "idp" }); return ( diff --git a/apps/login/src/components/idps/pages/login-success.tsx b/apps/login/src/components/idps/pages/login-success.tsx index 39aa71c642..62da260c04 100644 --- a/apps/login/src/components/idps/pages/login-success.tsx +++ b/apps/login/src/components/idps/pages/login-success.tsx @@ -1,18 +1,17 @@ -"use client"; - import { LanguageProvider } from "@/components/language-provider"; import { BrandingSettings } from "@zitadel/proto/zitadel/settings/v2/branding_settings_pb"; -import { useTranslations } from "next-intl"; +import { getLocale, getTranslations } from "next-intl/server"; import { DynamicTheme } from "../../dynamic-theme"; import { IdpSignin } from "../../idp-signin"; -export function loginSuccess( +export async function loginSuccess( userId: string, idpIntent: { idpIntentId: string; idpIntentToken: string }, authRequestId?: string, branding?: BrandingSettings, ) { - const t = useTranslations("idp"); + const locale = getLocale(); + const t = await getTranslations({ locale, namespace: "idp" }); return (