import { Button } from "@/components/ui/button"; import { Card, CardDescription, CardFooter, CardHeader, CardTitle, } from "@/components/ui/card"; import { useAppContext } from "@/context/app-context"; import { useUserContext } from "@/context/user-context"; import { isValidUrl } from "@/lib/utils"; import { Trans, useTranslation } from "react-i18next"; import { Navigate, useLocation, useNavigate } from "react-router"; import DOMPurify from "dompurify"; import { useState } from "react"; export const ContinuePage = () => { const { isLoggedIn } = useUserContext(); if (!isLoggedIn) { return ; } const { domain, disableContinue } = useAppContext(); const { search } = useLocation(); const [loading, setLoading] = useState(false); const searchParams = new URLSearchParams(search); const redirectURI = searchParams.get("redirect_uri"); if (!redirectURI) { return ; } if (!isValidUrl(DOMPurify.sanitize(redirectURI))) { return ; } const handleRedirect = () => { setLoading(true); window.location.href = DOMPurify.sanitize(redirectURI); } if (disableContinue) { handleRedirect(); } const { t } = useTranslation(); const navigate = useNavigate(); const url = new URL(redirectURI); if (!(url.hostname == domain) && !url.hostname.endsWith(`.${domain}`)) { return ( {t("untrustedRedirectTitle")} , }} values={{ domain }} /> ); } if (url.protocol === "http:" && window.location.protocol === "https:") { return ( {t("continueInsecureRedirectTitle")} , }} /> ); } return ( {t("continueTitle")} {t("continueSubtitle")} ); };