2021-02-03 16:09:17 -05:00
|
|
|
# frozen_string_literal: true
|
|
|
|
|
2020-12-01 07:09:17 -05:00
|
|
|
scope(path: '*repository_path', format: false) do
|
|
|
|
constraints(repository_path: Gitlab::PathRegex.repository_git_route_regex) do
|
2020-01-24 13:09:00 -05:00
|
|
|
scope(module: :repositories) do
|
2020-12-01 07:09:17 -05:00
|
|
|
# Git HTTP API
|
|
|
|
scope(controller: :git_http) do
|
|
|
|
get '/info/refs', action: :info_refs
|
|
|
|
post '/git-upload-pack', action: :git_upload_pack
|
|
|
|
post '/git-receive-pack', action: :git_receive_pack
|
|
|
|
end
|
|
|
|
|
|
|
|
# NOTE: LFS routes are exposed on all repository types, but we still check for
|
2020-12-15 10:09:59 -05:00
|
|
|
# LFS availability on the repository container in LfsRequest#lfs_check_access!
|
2020-12-01 07:09:17 -05:00
|
|
|
|
|
|
|
# Git LFS API (metadata)
|
|
|
|
scope(path: 'info/lfs/objects', controller: :lfs_api) do
|
|
|
|
post :batch
|
|
|
|
post '/', action: :deprecated
|
|
|
|
get '/*oid', action: :deprecated
|
|
|
|
end
|
|
|
|
|
|
|
|
scope(path: 'info/lfs') do
|
|
|
|
resources :lfs_locks, controller: :lfs_locks_api, path: 'locks' do
|
|
|
|
post :unlock, on: :member
|
|
|
|
post :verify, on: :collection
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
# GitLab LFS object storage
|
|
|
|
scope(path: 'gitlab-lfs/objects/*oid', controller: :lfs_storage, constraints: { oid: /[a-f0-9]{64}/ }) do
|
|
|
|
get '/', action: :download
|
|
|
|
|
|
|
|
constraints(size: /[0-9]+/) do
|
|
|
|
put '/*size/authorize', action: :upload_authorize
|
|
|
|
put '/*size', action: :upload_finalize
|
|
|
|
end
|
|
|
|
end
|
2016-11-07 10:14:34 -05:00
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2019-07-23 21:53:06 -04:00
|
|
|
# Redirect /group/project.wiki.git to the project wiki
|
2020-12-01 07:09:17 -05:00
|
|
|
constraints(repository_path: Gitlab::PathRegex.repository_wiki_git_route_regex) do
|
2019-07-23 21:53:06 -04:00
|
|
|
wiki_redirect = redirect do |params, request|
|
2020-12-01 07:09:17 -05:00
|
|
|
container_path = params[:repository_path].delete_suffix('.wiki.git')
|
|
|
|
path = File.join(container_path, '-', 'wikis')
|
2021-02-03 16:09:17 -05:00
|
|
|
path += "?#{request.query_string}" unless request.query_string.blank?
|
2019-07-23 21:53:06 -04:00
|
|
|
path
|
|
|
|
end
|
|
|
|
|
|
|
|
get '/', to: wiki_redirect
|
|
|
|
end
|
|
|
|
|
2016-11-14 09:55:31 -05:00
|
|
|
# Redirect /group/project/info/refs to /group/project.git/info/refs
|
2020-12-01 07:09:17 -05:00
|
|
|
# This allows cloning a repository without the trailing `.git`
|
|
|
|
constraints(repository_path: Gitlab::PathRegex.repository_route_regex) do
|
2016-11-14 09:55:31 -05:00
|
|
|
ref_redirect = redirect do |params, request|
|
2020-12-01 07:09:17 -05:00
|
|
|
path = "#{params[:repository_path]}.git/info/refs"
|
2021-02-03 16:09:17 -05:00
|
|
|
path += "?#{request.query_string}" unless request.query_string.blank?
|
2016-11-14 09:55:31 -05:00
|
|
|
path
|
|
|
|
end
|
2016-11-07 10:14:34 -05:00
|
|
|
|
2020-12-01 07:09:17 -05:00
|
|
|
get '/info/refs', constraints: ::Constraints::RepositoryRedirectUrlConstrainer.new, to: ref_redirect
|
2016-11-14 09:55:31 -05:00
|
|
|
end
|
|
|
|
end
|