Fall back to project repository type by default
This makes sure that we always have a repository type when trying to parse a repository from a path. This is needed because sometimes we want to perform access checks as if the project already existed, for example when creating a project on push. Before this we were only doing that when accessing git over http, this makes sure it also works correctly when accessing git over SSH
This commit is contained in:
parent
934dabaf6d
commit
2fdda74458
|
@ -98,10 +98,8 @@ class Projects::GitHttpClientController < Projects::ApplicationController
|
|||
|
||||
def repo_type
|
||||
parse_repo_path unless defined?(@repo_type)
|
||||
# When there a project did not exist, the parsed repo_type would be empty.
|
||||
# In that case, we want to continue with a regular project repository. As we
|
||||
# could create the project if the user pushing is allowed to do so.
|
||||
@repo_type || Gitlab::GlRepository::PROJECT
|
||||
|
||||
@repo_type
|
||||
end
|
||||
|
||||
def handle_basic_authentication(login, password)
|
||||
|
|
|
@ -35,5 +35,9 @@ module Gitlab
|
|||
|
||||
[project, type]
|
||||
end
|
||||
|
||||
def self.default_type
|
||||
PROJECT
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -24,7 +24,10 @@ module Gitlab
|
|||
return [project, type, redirected_path] if project
|
||||
end
|
||||
|
||||
nil
|
||||
# When a project did not exist, the parsed repo_type would be empty.
|
||||
# In that case, we want to continue with a regular project repository. As we
|
||||
# could create the project if the user pushing is allowed to do so.
|
||||
[nil, Gitlab::GlRepository.default_type, nil]
|
||||
end
|
||||
|
||||
def self.find_project(project_path)
|
||||
|
|
|
@ -44,8 +44,10 @@ describe ::Gitlab::RepoPath do
|
|||
end
|
||||
end
|
||||
|
||||
it "returns nil for non existent paths" do
|
||||
expect(described_class.parse("path/non-existent.git")).to eq(nil)
|
||||
it "returns the default type for non existent paths" do
|
||||
_project, type, _redirected = described_class.parse("path/non-existent.git")
|
||||
|
||||
expect(type).to eq(Gitlab::GlRepository.default_type)
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
@ -644,6 +644,22 @@ describe API::Internal do
|
|||
expect(response).to have_gitlab_http_status(404)
|
||||
expect(json_response["status"]).to be_falsey
|
||||
end
|
||||
|
||||
it 'returns a 200 response when using a project path that does not exist' do
|
||||
post(
|
||||
api("/internal/allowed"),
|
||||
params: {
|
||||
key_id: key.id,
|
||||
project: 'project/does-not-exist.git',
|
||||
action: 'git-upload-pack',
|
||||
secret_token: secret_token,
|
||||
protocol: 'ssh'
|
||||
}
|
||||
)
|
||||
|
||||
expect(response).to have_gitlab_http_status(404)
|
||||
expect(json_response["status"]).to be_falsey
|
||||
end
|
||||
end
|
||||
|
||||
context 'user does not exist' do
|
||||
|
|
Loading…
Reference in New Issue