Initial commit
This commit is contained in:
45
lib/auth/validation.ts
Normal file
45
lib/auth/validation.ts
Normal file
@@ -0,0 +1,45 @@
|
||||
export function sanitizeText(value: string) {
|
||||
return value.trim();
|
||||
}
|
||||
|
||||
export function sanitizeMessage(value: string) {
|
||||
// Allow only alphanumeric, spaces, underscores, newlines, and basic punctuation
|
||||
// Remove any HTML tags, scripts, and dangerous characters
|
||||
return value
|
||||
.trim()
|
||||
.replace(/<[^>]*>/g, '') // Remove HTML tags
|
||||
.replace(/[^\w\s\n\r_.,!?'-]/g, '') // Keep only safe characters
|
||||
.slice(0, 5000); // Limit length
|
||||
}
|
||||
|
||||
export interface PasswordRequirement {
|
||||
name: string;
|
||||
met: boolean;
|
||||
}
|
||||
|
||||
export function getPasswordRequirements(value: string): PasswordRequirement[] {
|
||||
return [
|
||||
{
|
||||
name: "8-20 Characters",
|
||||
met: value.length >= 8 && value.length <= 20,
|
||||
},
|
||||
{
|
||||
name: "At least one capital letter",
|
||||
met: /[A-Z]/.test(value),
|
||||
},
|
||||
{
|
||||
name: "At least one number",
|
||||
met: /\d/.test(value),
|
||||
},
|
||||
{
|
||||
name: "No spaces",
|
||||
met: !/\s/.test(value),
|
||||
},
|
||||
];
|
||||
}
|
||||
|
||||
export function isStrongPassword(value: string) {
|
||||
// 8-20 chars, at least one uppercase, at least one number, no spaces
|
||||
return /^(?=.*[A-Z])(?=.*\d)[A-Za-z0-9!@#$%^&*()_+\-=\[\]{};':"\\|,.<>\/?]{8,20}$/.test(value) && !/\s/.test(value);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user