"use client"; import { Suspense, useEffect, useState } from "react"; import { useRouter, useSearchParams } from "next/navigation"; import { useTranslations } from "next-intl"; import { useAuthStore } from "@/stores/auth-store"; import { Loader2, AlertCircle } from "lucide-react"; import { Button } from "@/components/ui/button"; import { useParams } from "next/navigation"; function OAuthCallbackInner() { const router = useRouter(); const params = useParams(); const searchParams = useSearchParams(); const t = useTranslations("login"); const { loginWithOAuth } = useAuthStore(); const [error, setError] = useState(null); useEffect(() => { const code = searchParams.get("code"); const state = searchParams.get("state"); const errorParam = searchParams.get("error"); if (errorParam) { setError(errorParam === "access_denied" ? "access_denied" : "token_exchange_failed"); return; } if (!code) { setError("missing_params"); return; } const savedState = sessionStorage.getItem("oauth_state"); if (!state || state !== savedState) { setError("invalid_state"); return; } const codeVerifier = sessionStorage.getItem("oauth_code_verifier"); const serverUrl = sessionStorage.getItem("oauth_server_url"); if (!codeVerifier || !serverUrl) { setError("missing_params"); return; } const redirectUri = `${window.location.origin}/${params.locale}/auth/callback`; loginWithOAuth(serverUrl, code, codeVerifier, redirectUri) .then((success) => { if (success) { sessionStorage.removeItem("oauth_state"); sessionStorage.removeItem("oauth_code_verifier"); sessionStorage.removeItem("oauth_server_url"); let redirectTo = `/${params.locale}`; try { const saved = sessionStorage.getItem('redirect_after_login'); if (saved) { sessionStorage.removeItem('redirect_after_login'); redirectTo = saved; } } catch { /* sessionStorage may be unavailable */ } router.push(redirectTo); } else { setError("token_exchange_failed"); } }) .catch(() => { setError("token_exchange_failed"); }); }, []); // eslint-disable-line react-hooks/exhaustive-deps if (error) { return (

{t("oauth_error.title")}

{t(`oauth_error.${error}`)}

); } return (

{t("oauth_completing")}

); } export default function OAuthCallbackPage() { return (
} >
); }