fix :file_path - add requirements:
This commit is contained in:
parent
d540d43e2d
commit
f3b6c552f6
3 changed files with 22 additions and 6 deletions
5
changelogs/unreleased/31470-fix-api-files-raw.yml
Normal file
5
changelogs/unreleased/31470-fix-api-files-raw.yml
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
---
|
||||||
|
title: Fix the /projects/:id/repository/files/:file_path/raw endpoint to handle dots in the file_path
|
||||||
|
merge_request: 13512
|
||||||
|
author: mahcsig
|
||||||
|
type: fixed
|
|
@ -1,5 +1,7 @@
|
||||||
module API
|
module API
|
||||||
class Files < Grape::API
|
class Files < Grape::API
|
||||||
|
FILE_ENDPOINT_REQUIREMENTS = API::PROJECT_ENDPOINT_REQUIREMENTS.merge(file_path: API::NO_SLASH_URL_PART_REGEX)
|
||||||
|
|
||||||
# Prevents returning plain/text responses for files with .txt extension
|
# Prevents returning plain/text responses for files with .txt extension
|
||||||
after_validation { content_type "application/json" }
|
after_validation { content_type "application/json" }
|
||||||
|
|
||||||
|
@ -58,13 +60,13 @@ module API
|
||||||
params do
|
params do
|
||||||
requires :id, type: String, desc: 'The project ID'
|
requires :id, type: String, desc: 'The project ID'
|
||||||
end
|
end
|
||||||
resource :projects, requirements: { id: %r{[^/]+} } do
|
resource :projects, requirements: FILE_ENDPOINT_REQUIREMENTS do
|
||||||
desc 'Get raw file contents from the repository'
|
desc 'Get raw file contents from the repository'
|
||||||
params do
|
params do
|
||||||
requires :file_path, type: String, desc: 'The url encoded path to the file. Ex. lib%2Fclass%2Erb'
|
requires :file_path, type: String, desc: 'The url encoded path to the file. Ex. lib%2Fclass%2Erb'
|
||||||
requires :ref, type: String, desc: 'The name of branch, tag commit'
|
requires :ref, type: String, desc: 'The name of branch, tag commit'
|
||||||
end
|
end
|
||||||
get ":id/repository/files/:file_path/raw" do
|
get ":id/repository/files/:file_path/raw", requirements: FILE_ENDPOINT_REQUIREMENTS do
|
||||||
assign_file_vars!
|
assign_file_vars!
|
||||||
|
|
||||||
send_git_blob @repo, @blob
|
send_git_blob @repo, @blob
|
||||||
|
@ -75,7 +77,7 @@ module API
|
||||||
requires :file_path, type: String, desc: 'The url encoded path to the file. Ex. lib%2Fclass%2Erb'
|
requires :file_path, type: String, desc: 'The url encoded path to the file. Ex. lib%2Fclass%2Erb'
|
||||||
requires :ref, type: String, desc: 'The name of branch, tag or commit'
|
requires :ref, type: String, desc: 'The name of branch, tag or commit'
|
||||||
end
|
end
|
||||||
get ":id/repository/files/:file_path", requirements: { file_path: /.+/ } do
|
get ":id/repository/files/:file_path", requirements: FILE_ENDPOINT_REQUIREMENTS do
|
||||||
assign_file_vars!
|
assign_file_vars!
|
||||||
|
|
||||||
{
|
{
|
||||||
|
@ -95,7 +97,7 @@ module API
|
||||||
params do
|
params do
|
||||||
use :extended_file_params
|
use :extended_file_params
|
||||||
end
|
end
|
||||||
post ":id/repository/files/:file_path", requirements: { file_path: /.+/ } do
|
post ":id/repository/files/:file_path", requirements: FILE_ENDPOINT_REQUIREMENTS do
|
||||||
authorize! :push_code, user_project
|
authorize! :push_code, user_project
|
||||||
|
|
||||||
file_params = declared_params(include_missing: false)
|
file_params = declared_params(include_missing: false)
|
||||||
|
@ -113,7 +115,7 @@ module API
|
||||||
params do
|
params do
|
||||||
use :extended_file_params
|
use :extended_file_params
|
||||||
end
|
end
|
||||||
put ":id/repository/files/:file_path", requirements: { file_path: /.+/ } do
|
put ":id/repository/files/:file_path", requirements: FILE_ENDPOINT_REQUIREMENTS do
|
||||||
authorize! :push_code, user_project
|
authorize! :push_code, user_project
|
||||||
|
|
||||||
file_params = declared_params(include_missing: false)
|
file_params = declared_params(include_missing: false)
|
||||||
|
@ -137,7 +139,7 @@ module API
|
||||||
params do
|
params do
|
||||||
use :simple_file_params
|
use :simple_file_params
|
||||||
end
|
end
|
||||||
delete ":id/repository/files/:file_path", requirements: { file_path: /.+/ } do
|
delete ":id/repository/files/:file_path", requirements: FILE_ENDPOINT_REQUIREMENTS do
|
||||||
authorize! :push_code, user_project
|
authorize! :push_code, user_project
|
||||||
|
|
||||||
file_params = declared_params(include_missing: false)
|
file_params = declared_params(include_missing: false)
|
||||||
|
|
|
@ -125,6 +125,15 @@ describe API::Files do
|
||||||
expect(response).to have_http_status(200)
|
expect(response).to have_http_status(200)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it 'returns raw file info for files with dots' do
|
||||||
|
url = route('.gitignore') + "/raw"
|
||||||
|
expect(Gitlab::Workhorse).to receive(:send_git_blob)
|
||||||
|
|
||||||
|
get api(url, current_user), params
|
||||||
|
|
||||||
|
expect(response).to have_http_status(200)
|
||||||
|
end
|
||||||
|
|
||||||
it 'returns file by commit sha' do
|
it 'returns file by commit sha' do
|
||||||
# This file is deleted on HEAD
|
# This file is deleted on HEAD
|
||||||
file_path = "files%2Fjs%2Fcommit%2Ejs%2Ecoffee"
|
file_path = "files%2Fjs%2Fcommit%2Ejs%2Ecoffee"
|
||||||
|
|
Loading…
Reference in a new issue