old_console/users/services/validators.py
2024-11-02 14:12:45 +03:00

88 lines
2.5 KiB
Python

import re
from datetime import date
from rest_framework.exceptions import ValidationError
class NumberValidator(object):
@staticmethod
def validate(password):
if not re.findall('\\d', password):
raise ValidationError("The password must contain at least 1 digit, 0-9.")
class SizeValidator(object):
@staticmethod
def validate(password):
if len(password) < 8:
raise ValidationError("The password size must be more than 8 characters")
class UppercaseValidator(object):
@staticmethod
def validate(password):
if not re.findall('[A-Z]', password):
raise ValidationError("The password must contain at least 1 uppercase letter, A-Z.")
class LowercaseValidator(object):
@staticmethod
def validate(password):
if not re.findall('[a-z]', password):
raise ValidationError("The password must contain at least 1 lowercase letter, a-z.")
class OnlyCharNumericValidator:
"""Validator only numeric and latin alphabet."""
@staticmethod
def validate(data: str, *, field_name: str = 'username'):
if not re.findall('^[a-zA-Z0-9]*$', data):
raise ValidationError(f'The {field_name} must be contain only latin alphabet and digit, 0-9')
def timezone_validation(data):
"""
Validate timezone field
:param data: serializer post data
:return: data if timezone field exists in data dict and validation errors in other cases
"""
try:
data['timezone']
except KeyError:
raise ValidationError("Timezone is required")
def password_validation(data):
"""
Validate password for UppercaseValidator,LowercaseValidator,NumberValidator
:param data: serializer post data
:return: data if OK and validation errors in other cases
"""
try:
password = data['user']['password']
UppercaseValidator.validate(password)
LowercaseValidator.validate(password)
NumberValidator.validate(password)
SizeValidator.validate(password)
except KeyError:
return data
def validate_expire_date(data):
"""
Validate field expire_date
:param data: data
:return: if expire_date in the past return validation error, else return data.Today's date also cannot be specified
"""
try:
expire_date = data["expire_date"]
if expire_date and expire_date <= date.today():
raise ValidationError("The user's blocking date should be in the future")
return data
except KeyError:
return data