51 lines
868 B
Ruby
51 lines
868 B
Ruby
|
# NamespaceValidator
|
||
|
#
|
||
|
# Custom validator for GitLab namespace values.
|
||
|
#
|
||
|
# Values are checked for formatting and exclusion from a list of reserved path
|
||
|
# names.
|
||
|
class NamespaceValidator < ActiveModel::EachValidator
|
||
|
RESERVED = %w(
|
||
|
admin
|
||
|
all
|
||
|
assets
|
||
|
ci
|
||
|
dashboard
|
||
|
files
|
||
|
groups
|
||
|
help
|
||
|
hooks
|
||
|
issues
|
||
|
merge_requests
|
||
|
notes
|
||
|
profile
|
||
|
projects
|
||
|
public
|
||
|
repository
|
||
|
s
|
||
|
search
|
||
|
services
|
||
|
snippets
|
||
|
teams
|
||
|
u
|
||
|
unsubscribes
|
||
|
users
|
||
|
).freeze
|
||
|
|
||
|
def validate_each(record, attribute, value)
|
||
|
unless value =~ Gitlab::Regex.namespace_regex
|
||
|
record.errors.add(attribute, Gitlab::Regex.namespace_regex_message)
|
||
|
end
|
||
|
|
||
|
if reserved?(value)
|
||
|
record.errors.add(attribute, "#{value} is a reserved name")
|
||
|
end
|
||
|
end
|
||
|
|
||
|
private
|
||
|
|
||
|
def reserved?(value)
|
||
|
RESERVED.include?(value)
|
||
|
end
|
||
|
end
|