website poc
This commit is contained in:
53
apps/website/lib/email-validation.ts
Normal file
53
apps/website/lib/email-validation.ts
Normal file
@@ -0,0 +1,53 @@
|
||||
import { z } from 'zod';
|
||||
|
||||
/**
|
||||
* Email validation schema using Zod
|
||||
*/
|
||||
export const emailSchema = z.string()
|
||||
.email('Invalid email format')
|
||||
.min(3, 'Email too short')
|
||||
.max(254, 'Email too long')
|
||||
.toLowerCase()
|
||||
.trim();
|
||||
|
||||
/**
|
||||
* Validates an email address
|
||||
* @param email - The email address to validate
|
||||
* @returns Validation result with sanitized email or error
|
||||
*/
|
||||
export function validateEmail(email: string): {
|
||||
success: boolean;
|
||||
email?: string;
|
||||
error?: string;
|
||||
} {
|
||||
const result = emailSchema.safeParse(email);
|
||||
|
||||
if (result.success) {
|
||||
return {
|
||||
success: true,
|
||||
email: result.data,
|
||||
};
|
||||
}
|
||||
|
||||
return {
|
||||
success: false,
|
||||
error: result.error.errors[0]?.message || 'Invalid email',
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if email appears to be from a disposable email service
|
||||
* Basic check - can be extended with comprehensive list
|
||||
*/
|
||||
const DISPOSABLE_DOMAINS = new Set([
|
||||
'tempmail.com',
|
||||
'throwaway.email',
|
||||
'guerrillamail.com',
|
||||
'mailinator.com',
|
||||
'10minutemail.com',
|
||||
]);
|
||||
|
||||
export function isDisposableEmail(email: string): boolean {
|
||||
const domain = email.split('@')[1]?.toLowerCase();
|
||||
return domain ? DISPOSABLE_DOMAINS.has(domain) : false;
|
||||
}
|
||||
Reference in New Issue
Block a user