HEX
Server: Apache/2.4.52 (Ubuntu)
System: Linux spn-python 5.15.0-89-generic #99-Ubuntu SMP Mon Oct 30 20:42:41 UTC 2023 x86_64
User: arjun (1000)
PHP: 8.1.2-1ubuntu2.20
Disabled: NONE
Upload Files
File: //home/arjun/projects/unlimited-leads/Unlimited-Leads-Be/utils/validators.py
import re
import phonenumbers
from rest_framework.exceptions import ValidationError
from django.utils.translation import gettext_lazy as _


def validate_password_strength(value):
    conditions = [
        len(value) >= 8,  # Minimum length 8
        re.search(r"[A-Z]", value),  # At least one uppercase letter
        re.search(r"[a-z]", value),  # At least one lowercase letter
        re.search(r"\d", value),  # At least one digit
        re.search(r'[!@#$%^&*(),.?":{}|<>]', value),  # At least one special character
    ]

    if not all(conditions):
        raise ValidationError(
            "Password must contain at least 8 characters, including an uppercase letter, a lowercase letter, a digit, and a special character."
        )


def validate_phone_number(value):
    try:
        phone_number = phonenumbers.parse(value, None)
        if not phonenumbers.is_valid_number(phone_number):
            raise ValidationError(_("Invalid phone number format."))
    except phonenumbers.phonenumberutil.NumberParseException:
        raise ValidationError(_("Invalid phone number format."))


def validate_otp(value):

    if re.match(r"\d{6}", value) is None:
        raise ValidationError("Enter valid otp")


def validate_name(value):
    name = str(value).strip()
    if len(name) < 1 or len(name) > 100:
        raise ValidationError("must be between 1 and 100 characters long.")
    if not re.match(r"^[A-Za-z0-9 \-_]+$", name):
        raise ValidationError(
            "It can only contain letters, numbers, spaces, and hyphens."
        )
    return name