22 lines
759 B
TypeScript
22 lines
759 B
TypeScript
/** Internal path safe to use as a post-login redirect target. */
|
|||
|
|
export function getSafeReturnTo(
|
||
|
|
value: string | null | undefined,
|
||
|
|
): string | null {
|
||
|
|
if (!value) return null;
|
||
|
|
if (!value.startsWith("/") || value.startsWith("//")) return null;
|
||
|
|
if (value === "/login" || value.startsWith("/login?")) return null;
|
||
|
|
return value;
|
||
|
|
}
|
||
|
|
|
||
|
|
export function loginPathWithReturnTo(returnTo: string): string {
|
||
|
|
const safe = getSafeReturnTo(returnTo);
|
||
|
|
if (!safe) return "/login";
|
||
|
|
return `/login?returnTo=${encodeURIComponent(safe)}`;
|
||
|
|
}
|
||
|
|
|
||
|
|
export function readReturnToFromLocation(): string {
|
||
|
|
if (typeof window === "undefined") return "/";
|
||
|
|
const params = new URLSearchParams(window.location.search);
|
||
|
|
return getSafeReturnTo(params.get("returnTo")) ?? "/";
|
||
|
|
}
|