create-plume-react-project
Version:
CLI to create Plume React Project
41 lines (37 loc) • 998 B
text/typescript
const KEY: string = '__post_login_redirect__';
/**
* Check if the given URL is a safe URL within the same origin.
* @param url The URL to check.
*/
export function isSafeAppUrl(url: string | null | undefined): boolean {
if (!url) {
return false;
}
// allow relative path like "/dashboard"
if (url.startsWith('/') && !url.startsWith('//')) {
return true;
}
try {
const target: URL = new URL(url, window.location.origin);
return target.origin === window.location.origin;
} catch {
return false;
}
}
/**
* Store a safe redirect URL in session storage.
* @param url
*/
export function setRedirectUrl(url: string) {
if (isSafeAppUrl(url)) {
sessionStorage.setItem(KEY, url);
}
}
/**
* Consume (get and remove) the stored redirect URL from session storage.
*/
export function consumeRedirectUrl(): string | null {
const url: string | null = sessionStorage.getItem(KEY);
sessionStorage.removeItem(KEY);
return isSafeAppUrl(url) ? url : null;
}