mirror of https://github.com/jumpserver/jumpserver
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
60 lines
1.7 KiB
60 lines
1.7 KiB
# -*- coding: utf-8 -*- |
|
# |
|
import re |
|
|
|
import phonenumbers |
|
from django.core.validators import RegexValidator |
|
from django.utils.translation import gettext_lazy as _ |
|
from phonenumbers.phonenumberutil import NumberParseException |
|
from rest_framework import serializers |
|
from rest_framework.validators import ( |
|
UniqueTogetherValidator, ValidationError |
|
) |
|
|
|
from common.utils.strings import no_special_chars |
|
|
|
alphanumeric = RegexValidator(r'^[0-9a-zA-Z_@\-\.]*$', _('Special char not allowed')) |
|
|
|
alphanumeric_re = re.compile(r'^[0-9a-zA-Z_@\-\.]*$') |
|
|
|
alphanumeric_cn_re = re.compile(r'^[0-9a-zA-Z_@\-\.\u4E00-\u9FA5]*$') |
|
|
|
alphanumeric_win_re = re.compile(r'^[0-9a-zA-Z_@#%&~\^\$\-\.\u4E00-\u9FA5]*$') |
|
|
|
|
|
class ProjectUniqueValidator(UniqueTogetherValidator): |
|
def __call__(self, attrs, serializer): |
|
try: |
|
super().__call__(attrs, serializer) |
|
except ValidationError as e: |
|
errors = {} |
|
for field in self.fields: |
|
if field == "org_id": |
|
continue |
|
errors[field] = _('This field must be unique.') |
|
raise ValidationError(errors) |
|
|
|
|
|
class NoSpecialChars: |
|
def __call__(self, value): |
|
if not no_special_chars(value): |
|
raise serializers.ValidationError( |
|
_("Should not contains special characters") |
|
) |
|
|
|
|
|
class PhoneValidator: |
|
message = _('The mobile phone number format is incorrect') |
|
|
|
def __call__(self, value): |
|
if not value: |
|
return |
|
|
|
try: |
|
phone = phonenumbers.parse(value, 'CN') |
|
valid = phonenumbers.is_valid_number(phone) |
|
except NumberParseException: |
|
valid = False |
|
|
|
if not valid: |
|
raise serializers.ValidationError(self.message)
|
|
|