def password_validator(request): # Заполненость бара пароля - зависит от длины пароля if not request.POST.get('password', 0): bar_width = 0 elif len(request.POST.get('password', 0)) >= PASSWORD_MAX_LENGTH: bar_width = 100 else: bar_width = int((float(len(request.POST.get('password', 0)))/PASSWORD_MAX_LENGTH)*100) # В случае отсутствия ошибок вернутся следующие поля result = {'success': True, 'bar_type': 'progress-success', 'error_messages': '', 'width': bar_width} try: only_ansi_symbols(request.POST.get('password')) complexity(request.POST.get('password')) dictionary_words(request.POST.get('password')) validate_length(request.POST.get('password')) common_sequences(request.POST.get('password')) if PASSWORD_WITHOUT_WHITESPACES: validate_whitespaces(request.POST.get('password')) except ValidationError, err: # произошла ошибка валидации result = {'success': False, 'error_messages': err.messages[0], 'width': bar_width, 'bar_type': 'progress-danger'}
def validate_password(self, value): """Check password constraints.""" try: validators.validate_length(value) validators.complexity(value) except ValidationError as exc: raise serializers.ValidationError(exc.messages[0]) return value
def clean_password1(self): password = self.cleaned_data['password1'] validate_length(password) common_sequences(password) complexity(password) return password
def validate(self, data): data = super(AccountSerializer, self).validate(data) user = self.context['request'].user old_pwd = data.get('old_password') new_pwd = data.get('new_password') confirm_pwd = data.get('confirm_password') if new_pwd: try: validators.validate_password(password=new_pwd) password_validators.complexity(new_pwd) password_validators.common_sequences(new_pwd) password_validators.validate_length(new_pwd) except exceptions.ValidationError as e: raise serializers.ValidationError( {'new_password': [e.messages]}) if new_pwd != confirm_pwd: raise serializers.ValidationError( {'new_password': [constants.PASSWORD_MISMATCH_ERROR]}) if not user.check_password(old_pwd): raise serializers.ValidationError( {'old_password': [constants.INVALID_PASSWORD_ERROR]}) return data
def validate_password(self, password): password_validators.complexity(password) password_validators.common_sequences(password) password_validators.validate_length(password) return password