mirror of
https://gitlab.com/gitlab-org/gitlab-foss.git
synced 2025-08-20 14:11:11 +00:00
Add latest changes from gitlab-org/gitlab@master
This commit is contained in:
@ -4,7 +4,7 @@ module Constraints
|
||||
class ProjectUrlConstrainer
|
||||
def matches?(request, existence_check: true)
|
||||
namespace_path = request.params[:namespace_id]
|
||||
project_path = request.params[:project_id] || request.params[:id] || request.params[:repository_id]
|
||||
project_path = request.params[:project_id] || request.params[:id]
|
||||
full_path = [namespace_path, project_path].join('/')
|
||||
|
||||
return false unless ProjectPathValidator.valid_path?(full_path)
|
||||
|
28
lib/constraints/repository_redirect_url_constrainer.rb
Normal file
28
lib/constraints/repository_redirect_url_constrainer.rb
Normal file
@ -0,0 +1,28 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
module Constraints
|
||||
class RepositoryRedirectUrlConstrainer
|
||||
def matches?(request)
|
||||
path = request.params[:repository_path].delete_suffix('.git')
|
||||
query = request.query_string
|
||||
|
||||
git_request?(query) && container_path?(path)
|
||||
end
|
||||
|
||||
# Allow /info/refs, /info/refs?service=git-upload-pack, and
|
||||
# /info/refs?service=git-receive-pack, but nothing else.
|
||||
def git_request?(query)
|
||||
query.blank? ||
|
||||
query == 'service=git-upload-pack' ||
|
||||
query == 'service=git-receive-pack'
|
||||
end
|
||||
|
||||
# Check if the path matches any known repository containers.
|
||||
# These also cover wikis, since a `.wiki` suffix is valid in project/group paths too.
|
||||
def container_path?(path)
|
||||
NamespacePathValidator.valid_path?(path) ||
|
||||
ProjectPathValidator.valid_path?(path) ||
|
||||
path =~ Gitlab::PathRegex.full_snippets_repository_path_regex
|
||||
end
|
||||
end
|
||||
end
|
Reference in New Issue
Block a user