def validate_email(email): if len(email) > 254: raise ValidationError('Invalid Email') if not email or '@' not in email: raise ValidationError('Invalid Email') if email.split('@')[1].lower() in settings.BLACKLISTED_DOMAINS: raise ValidationError('Invalid Email') user_part, domain_part = email.rsplit('@', 1) if not USER_REGEX.match(user_part): raise ValidationError('Invalid Email') if not DOMAIN_REGEX.match(domain_part): try: domain_part = domain_part.encode('idna').decode('ascii') except UnicodeError: pass else: if DOMAIN_REGEX.match(domain_part): return True raise ValidationError('Invalid Email') return True
def validate_personal_site(value): if value: try: validate_url(value) except ValidationError: # Reraise with a better message raise ValidationError('Invalid personal URL.')
def validate_profile_websites(profile_websites): for value in profile_websites or []: try: validate_url(value) except ValidationError: # Reraise with a better message raise ValidationError('Invalid personal URL.')
def __call__(self, value): # Check first if the scheme is valid (if there is a scheme used) if '://' in value: scheme = value.split('://')[0].lower() if scheme not in self.schemes: raise ValidationError(self.message + ' ' + value) else: value = 'http://' + value # implicit scheme # Then check full URL try: super(URLValidator, self).__call__(value) except ValidationError as e: # Trivial case failed. Try for possible IDN domain if value: try: scheme, netloc, path, query, fragment = urlsplit(value) except ValueError: # for example, "Invalid IPv6 URL" raise ValidationError(self.message + ' ' + value) try: netloc = netloc.encode('idna').decode( 'ascii') # IDN -> ACE except UnicodeError: # invalid domain part raise e url = urlunsplit((scheme, netloc, path, query, fragment)) super(URLValidator, self).__call__(url) else: raise else: # Now verify IPv6 in the netloc part host_match = re.search(r'^\[(.+)\](?::\d{2,5})?$', urlsplit(value).netloc) if host_match: potential_ip = host_match.groups()[0] try: validate_ipv6_address(potential_ip) except ValidationError: raise ValidationError(self.message, code=self.code) url = value # The maximum length of a full host name is 253 characters per RFC 1034 # section 3.1. It's defined to be 255 bytes or less, but this includes # one byte for the length of the name and one byte for the trailing dot # that's used to indicate absolute names in DNS. if len(urlsplit(value).netloc) > 253: raise ValidationError(self.message, code=self.code)
def validator(value): if not isinstance(value, collections.Hashable): raise ValidationError('Must specify a single choice; value cannot be a collection') if ignore_case and isinstance(value, basestring): value = value.upper() if value in choice_set: return True else: raise ValidationValueError('Value must be one of these options: {}'.format(choices))
def validate_email(email): if len(email) > 254: raise ValidationError("Invalid Email") if not email or '@' not in email: raise ValidationError("Invalid Email") user_part, domain_part = email.rsplit('@', 1) if not USER_REGEX.match(user_part): raise ValidationError("Invalid Email") if not DOMAIN_REGEX.match(domain_part): try: domain_part = domain_part.encode('idna').decode('ascii') except UnicodeError: pass else: if DOMAIN_REGEX.match(domain_part): return True raise ValidationError("Invalid Email") return True
def ensure_external_identity_uniqueness(provider, identity, user=None): from framework.auth.core import User # avoid circular import users_with_identity = User.find( Q('external_identity.{}.{}'.format(provider, identity), 'ne', None)) for existing_user in users_with_identity: if user and user._id == existing_user._id: continue if existing_user.external_identity[provider][identity] == 'VERIFIED': if user and user.external_identity.get(provider, {}).get( identity, {}): user.external_identity[provider].pop(identity) if user.external_identity[provider] == {}: user.external_identity.pop(provider) user.save( ) # Note: This won't work in v2 because it rolls back transactions when status >= 400 raise ValidationError( 'Another user has already claimed this external identity') existing_user.external_identity[provider].pop(identity) if existing_user.external_identity[provider] == {}: existing_user.external_identity.pop(provider) existing_user.save() return
def validate_email(item): if not (item and re.match(r'^.+@[^.].*\.[a-z]{2,10}$', item, re.IGNORECASE) and item == item.strip().lower()): raise ValidationError("Invalid Email")
def __call__(self, value): if not self.regex.search(value): raise ValidationError( 'Value must match regex {0} and flags {1}; received value <{2}>' .format(self.regex.pattern, self.regex.flags, value))
def __call__(self, value): if self.compare(value, self.limit_value): raise ValidationError('Received bad value: <{}>.'.format(value))