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:
parent
1498a9cb0f
commit
3143a5d260
3 changed files with 2 additions and 29 deletions
|
@ -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 },
|
||||
|
|
|
@ -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
|
|
@ -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
|
||||
|
||||
|
|
Loading…
Reference in a new issue