diff options
Diffstat (limited to 'app/validators/web_hooks/wildcard_branch_filter_validator.rb')
-rw-r--r-- | app/validators/web_hooks/wildcard_branch_filter_validator.rb | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/app/validators/web_hooks/wildcard_branch_filter_validator.rb b/app/validators/web_hooks/wildcard_branch_filter_validator.rb new file mode 100644 index 00000000000..12ec78f05de --- /dev/null +++ b/app/validators/web_hooks/wildcard_branch_filter_validator.rb @@ -0,0 +1,34 @@ +# frozen_string_literal: true + +# WildcardBranchFilterValidator +# +# Custom validator for wildcard branch filter. Squishes whitespace and ignores +# empty string. This only checks that a string is a valid wildcard git branch +# like "feature/login" and "feature/*". It doesn't check whether a branch already +# exists. +# +# Example: +# +# class Webhook < ActiveRecord::Base +# validates :push_events_branch_filter, "web_hooks/wildcard_branch_filter": true +# end +# +module WebHooks + class WildcardBranchFilterValidator < ActiveModel::EachValidator + def validate_each(record, attribute, value) + value.squish! unless value.nil? + + return unless value.present? + + value_without_wildcards = value.tr('*', 'x') + + unless Gitlab::GitRefValidator.validate(value_without_wildcards) + record.errors.add(attribute, "is not a valid branch name") + end + + return if value.length <= 4000 + + record.errors.add(attribute, "is longer than the allowed length of 4000 characters.") + end + end +end |