updates
This commit is contained in:
59
Backend/src/utils/password_validation.py
Normal file
59
Backend/src/utils/password_validation.py
Normal file
@@ -0,0 +1,59 @@
|
||||
"""
|
||||
Password validation utilities for enforcing password strength requirements.
|
||||
"""
|
||||
import re
|
||||
from typing import Tuple, List
|
||||
|
||||
# Password strength requirements
|
||||
MIN_PASSWORD_LENGTH = 8
|
||||
REQUIRE_UPPERCASE = True
|
||||
REQUIRE_LOWERCASE = True
|
||||
REQUIRE_NUMBER = True
|
||||
REQUIRE_SPECIAL = True
|
||||
|
||||
def validate_password_strength(password: str) -> Tuple[bool, List[str]]:
|
||||
"""
|
||||
Validate password meets strength requirements.
|
||||
|
||||
Args:
|
||||
password: The password to validate
|
||||
|
||||
Returns:
|
||||
Tuple of (is_valid, list_of_errors)
|
||||
"""
|
||||
errors = []
|
||||
|
||||
if not password:
|
||||
return False, ['Password is required']
|
||||
|
||||
# Check minimum length
|
||||
if len(password) < MIN_PASSWORD_LENGTH:
|
||||
errors.append(f'Password must be at least {MIN_PASSWORD_LENGTH} characters long')
|
||||
|
||||
# Check for uppercase letter
|
||||
if REQUIRE_UPPERCASE and not re.search(r'[A-Z]', password):
|
||||
errors.append('Password must contain at least one uppercase letter')
|
||||
|
||||
# Check for lowercase letter
|
||||
if REQUIRE_LOWERCASE and not re.search(r'[a-z]', password):
|
||||
errors.append('Password must contain at least one lowercase letter')
|
||||
|
||||
# Check for number
|
||||
if REQUIRE_NUMBER and not re.search(r'\d', password):
|
||||
errors.append('Password must contain at least one number')
|
||||
|
||||
# Check for special character
|
||||
if REQUIRE_SPECIAL and not re.search(r'[!@#$%^&*(),.?":{}|<>]', password):
|
||||
errors.append('Password must contain at least one special character (!@#$%^&*(),.?":{}|<>)')
|
||||
|
||||
# Check for common weak passwords
|
||||
common_passwords = [
|
||||
'password', '12345678', 'qwerty', 'abc123', 'password123',
|
||||
'admin', 'letmein', 'welcome', 'monkey', '1234567890'
|
||||
]
|
||||
if password.lower() in common_passwords:
|
||||
errors.append('Password is too common. Please choose a stronger password')
|
||||
|
||||
is_valid = len(errors) == 0
|
||||
return is_valid, errors
|
||||
|
||||
Reference in New Issue
Block a user