예제 #1
0
        public ValidateAndHashIfNeeded(ReadOnlySettings settings)
        {
            this.settings = settings;

            // validators

            defaultQueuePathValidation = queuePath =>
            {
                var validationResult = new ValidationResult();

                if (!queueAndTopicPathValidationRegex.IsMatch(queuePath))
                {
                    validationResult.AddErrorForInvalidCharacters($"Queue path {queuePath} contains illegal characters. Legal characters should match the following regex: `{queuePath}`.");
                }

                var maximumLength = settings.GetOrDefault <int>(WellKnownConfigurationKeys.Topology.Addressing.Sanitization.QueuePathMaximumLength);
                if (queuePath.Length > maximumLength)
                {
                    validationResult.AddErrorForInvalidLenth($"Queue path `{queuePath}` exceeds maximum length of {maximumLength} characters.");
                }

                return(validationResult);
            };

            defaultTopicPathValidation = topicPath =>
            {
                var validationResult = new ValidationResult();

                if (!queueAndTopicPathValidationRegex.IsMatch(topicPath))
                {
                    validationResult.AddErrorForInvalidCharacters($"Topic path {topicPath} contains illegal characters. Legal characters should match the following regex: `{topicPath}`.");
                }

                var maximumLength = settings.GetOrDefault <int>(WellKnownConfigurationKeys.Topology.Addressing.Sanitization.TopicPathMaximumLength);
                if (topicPath.Length > maximumLength)
                {
                    validationResult.AddErrorForInvalidLenth($"Topic path `{topicPath}` exceeds maximum length of {maximumLength} characters.");
                }

                return(validationResult);
            };

            defaultSubscriptionNameValidation = subscriptionName =>
            {
                var validationResult = new ValidationResult();

                if (!subscriptionAndRuleNameValidationRegex.IsMatch(subscriptionName))
                {
                    validationResult.AddErrorForInvalidCharacters($"Subscription name {subscriptionName} contains illegal characters. Legal characters should match the following regex: `{subscriptionName}`.");
                }

                var maximumLength = settings.GetOrDefault <int>(WellKnownConfigurationKeys.Topology.Addressing.Sanitization.SubscriptionNameMaximumLength);
                if (subscriptionName.Length > maximumLength)
                {
                    validationResult.AddErrorForInvalidLenth($"Subscription name `{subscriptionName}` exceeds maximum length of {maximumLength} characters.");
                }

                return(validationResult);
            };

            defaultRuleNameValidation = ruleName =>
            {
                var validationResult = new ValidationResult();

                if (!subscriptionAndRuleNameValidationRegex.IsMatch(ruleName))
                {
                    validationResult.AddErrorForInvalidCharacters($"Rule name {ruleName} contains illegal characters. Legal characters should match the following regex: `{ruleName}`.");
                }

                var maximumLength = settings.GetOrDefault <int>(WellKnownConfigurationKeys.Topology.Addressing.Sanitization.RuleNameMaximumLength);
                if (ruleName.Length > maximumLength)
                {
                    validationResult.AddErrorForInvalidLenth($"Rule name `{ruleName}` exceeds maximum length of {maximumLength} characters.");
                }

                return(validationResult);
            };

            // sanitizers

            defaultQueuePathSanitization        = queuePath => queueAndTopicPathSanitizationRegex.Replace(queuePath, string.Empty);
            defaultTopicPathSanitization        = topicPath => queueAndTopicPathSanitizationRegex.Replace(topicPath, string.Empty);
            defaultSubscriptionNameSanitization = subscriptionPath => subscriptionAndRuleNameSanitizationRegex.Replace(subscriptionPath, string.Empty);
            defaultRuleNameSanitization         = rulePath => subscriptionAndRuleNameSanitizationRegex.Replace(rulePath, string.Empty);

            // hash
            defaultHashing = entityPathOrName => MD5DeterministicNameBuilder.Build(entityPathOrName);
        }
        public ThrowOnFailedValidation(ReadOnlySettings settings)
        {
            this.settings = settings;

            // validators

            defaultQueuePathValidation = queuePath =>
            {
                var validationResult = new ValidationResult();

                if (!queueAndTopicNameRegex.IsMatch(queuePath))
                {
                    validationResult.AddErrorForInvalidCharacters($"Queue path {queuePath} contains illegal characters. Legal characters should match the following regex: `{queuePath}`.");
                }

                var maximumLength = settings.GetOrDefault <int>(WellKnownConfigurationKeys.Topology.Addressing.Sanitization.QueuePathMaximumLength);
                if (queuePath.Length > maximumLength)
                {
                    validationResult.AddErrorForInvalidLenth($"Queue path `{queuePath}` exceeds maximum length of {maximumLength} characters.");
                }

                return(validationResult);
            };

            defaultTopicPathValidation = topicPath =>
            {
                var validationResult = new ValidationResult();

                if (!queueAndTopicNameRegex.IsMatch(topicPath))
                {
                    validationResult.AddErrorForInvalidCharacters($"Topic path {topicPath} contains illegal characters. Legal characters should match the following regex: `{topicPath}`.");
                }

                var maximumLength = settings.GetOrDefault <int>(WellKnownConfigurationKeys.Topology.Addressing.Sanitization.TopicPathMaximumLength);
                if (topicPath.Length > maximumLength)
                {
                    validationResult.AddErrorForInvalidLenth($"Topic path `{topicPath}` exceeds maximum length of {maximumLength} characters.");
                }

                return(validationResult);
            };

            defaultSubscriptionNameValidation = subscriptionName =>
            {
                var validationResult = new ValidationResult();

                if (!subscriptionAndRuleNameRegex.IsMatch(subscriptionName))
                {
                    validationResult.AddErrorForInvalidCharacters($"Subscription name {subscriptionName} contains illegal characters. Legal characters should match the following regex: `{subscriptionName}`.");
                }

                var maximumLength = settings.GetOrDefault <int>(WellKnownConfigurationKeys.Topology.Addressing.Sanitization.SubscriptionNameMaximumLength);
                if (subscriptionName.Length > maximumLength)
                {
                    validationResult.AddErrorForInvalidLenth($"Subscription name `{subscriptionName}` exceeds maximum length of {maximumLength} characters.");
                }

                return(validationResult);
            };

            defaultRuleNameValidation = ruleName =>
            {
                var validationResult = new ValidationResult();

                if (!subscriptionAndRuleNameRegex.IsMatch(ruleName))
                {
                    validationResult.AddErrorForInvalidCharacters($"Rule name {ruleName} contains illegal characters. Legal characters should match the following regex: `{ruleName}`.");
                }

                var maximumLength = settings.GetOrDefault <int>(WellKnownConfigurationKeys.Topology.Addressing.Sanitization.RuleNameMaximumLength);
                if (ruleName.Length > maximumLength)
                {
                    validationResult.AddErrorForInvalidLenth($"Rule name `{ruleName}` exceeds maximum length of {maximumLength} characters.");
                }

                return(validationResult);
            };
        }