Commit 74d37438 authored by Vratislav Kalenda's avatar Vratislav Kalenda

Issue JWT token with registry:catalog:* scope when requested by GitLab admin

parent 91f1d652
...@@ -58,6 +58,11 @@ module Auth ...@@ -58,6 +58,11 @@ module Auth
actions = actions.split(',') actions = actions.split(',')
path = ContainerRegistry::Path.new(name) path = ContainerRegistry::Path.new(name)
if type == 'registry' && name == 'catalog' && current_user && current_user.admin?
return { type: type, name: name, actions: ['*'] }
end
return unless type == 'repository' return unless type == 'repository'
process_repository_access(type, path, actions) process_repository_access(type, path, actions)
......
---
title: Issue JWT token with registry:catalog:* scope when requested by GitLab admin
merge_request:
author:
type: added
...@@ -42,6 +42,19 @@ describe Auth::ContainerRegistryAuthenticationService do ...@@ -42,6 +42,19 @@ describe Auth::ContainerRegistryAuthenticationService do
end end
end end
end end
shared_examples 'a browsable' do
let(:access) do
[{ 'type' => 'registry',
'name' => 'catalog',
'actions' => ['*']
}]
end
it_behaves_like 'a valid token'
it_behaves_like 'not a container repository factory'
it { expect(payload).to include('access' => access) }
end
shared_examples 'an accessible' do shared_examples 'an accessible' do
let(:access) do let(:access) do
...@@ -117,6 +130,19 @@ describe Auth::ContainerRegistryAuthenticationService do ...@@ -117,6 +130,19 @@ describe Auth::ContainerRegistryAuthenticationService do
context 'user authorization' do context 'user authorization' do
let(:current_user) { create(:user) } let(:current_user) { create(:user) }
context 'for registry catalog' do
let(:current_params) do
{ scope: "registry:catalog:*" }
end
context 'disallow browsing for users without Gitlab admin rights' do
it_behaves_like 'an inaccessible'
it_behaves_like 'not a container repository factory'
end
end
context 'for private project' do context 'for private project' do
let(:project) { create(:project) } let(:project) { create(:project) }
...@@ -490,6 +516,16 @@ describe Auth::ContainerRegistryAuthenticationService do ...@@ -490,6 +516,16 @@ describe Auth::ContainerRegistryAuthenticationService do
end end
end end
context 'registry catalog browsing authorized as admin' do
let(:current_user) { create(:user, :admin) }
let(:current_params) do
{ scope: "registry:catalog:*" }
end
it_behaves_like 'a browsable'
end
context 'unauthorized' do context 'unauthorized' do
context 'disallow to use scope-less authentication' do context 'disallow to use scope-less authentication' do
it_behaves_like 'a forbidden' it_behaves_like 'a forbidden'
...@@ -536,5 +572,14 @@ describe Auth::ContainerRegistryAuthenticationService do ...@@ -536,5 +572,14 @@ describe Auth::ContainerRegistryAuthenticationService do
it_behaves_like 'not a container repository factory' it_behaves_like 'not a container repository factory'
end end
end end
context 'for registry catalog' do
let(:current_params) do
{ scope: "registry:catalog:*" }
end
it_behaves_like 'a forbidden'
it_behaves_like 'not a container repository factory'
end
end end
end end
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment