Use the namespace validator for validating all paths

Since the namespacevalidator now knows the difference between a
top-level and another path, this could all be handled there.
This commit is contained in:
Bob Van Landuyt 2017-04-12 09:44:05 +02:00
parent 1498a9cb0f
commit 3143a5d260
3 changed files with 2 additions and 29 deletions

View file

@ -196,7 +196,7 @@ class Project < ActiveRecord::Base
message: Gitlab::Regex.project_name_regex_message }
validates :path,
presence: true,
project_path: true,
namespace: true,
length: { maximum: 255 },
format: { with: Gitlab::Regex.project_path_regex,
message: Gitlab::Regex.project_path_regex_message },

View file

@ -1,27 +0,0 @@
# ProjectPathValidator
#
# Custom validator for GitLab project path values.
#
# Values are checked for formatting and exclusion from a list of reserved path
# names.
#
# This is basically the same as the `NamespaceValidator` but it skips the validation
# of the format with `Gitlab::Regex.namespace_regex`. The format of projects
# is validated in the class itself.
class ProjectPathValidator < NamespaceValidator
def self.valid?(value)
!reserved?(value)
end
def self.reserved?(value, type: :wildcard)
super(value, type: :wildcard)
end
delegate :reserved?, to: :class
def validate_each(record, attribute, value)
if reserved?(value)
record.errors.add(attribute, "#{value} is a reserved name")
end
end
end

View file

@ -4,7 +4,7 @@ class ProjectUrlConstrainer
project_path = request.params[:project_id] || request.params[:id]
full_path = namespace_path + '/' + project_path
unless ProjectPathValidator.valid?(project_path)
unless NamespaceValidator.valid_full_path?(full_path)
return false
end