Skip to content
Extraits de code Groupes Projets
security.ts 1,04 ko
Newer Older
  • Learn to ignore specific revisions
  • Brieuc Dubois's avatar
    Brieuc Dubois a validé
    import { redirect } from '@sveltejs/kit';
    
    export function isRedirectPathValid(path: string, origin: string): boolean {
    	try {
    		const url = new URL(path, origin);
    		return url.origin == origin;
    	} catch (e) {
    		return false;
    	}
    }
    
    export function safeRedirect(path: string | null | undefined, origin: string) {
    	if (!path || !isRedirectPathValid(path, origin)) path = '/';
    	return redirect(302, path);
    }
    
    export function safeRedirectAuto(url: URL) {
    	return safeRedirect(url.searchParams.get('redirect'), url.origin);
    }
    
    export function validateEmail(email: unknown): email is string {
    	return (
    		typeof email === 'string' &&
    		email.length >= 3 &&
    		email.length <= 255 &&
    		/^[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,}$/.test(email)
    	);
    }
    
    export function validateUsername(username: unknown): username is string {
    
    Brieuc Dubois's avatar
    Brieuc Dubois a validé
    	return typeof username === 'string' && username.length >= 3 && username.length <= 31;
    
    Brieuc Dubois's avatar
    Brieuc Dubois a validé
    }
    
    export function validatePassword(password: unknown): password is string {
    	return typeof password === 'string' && password.length >= 8 && password.length <= 255;
    }