Commit 1a47986b authored by Grzegorz Bizon's avatar Grzegorz Bizon

Check registry repository name against regexp

This regexp is extracted from Docker Distribution 2.4.1 docs, contains
additional `/` element that can be a separator of components.
parent 01280a5a
...@@ -22,7 +22,9 @@ module ContainerRegistry ...@@ -22,7 +22,9 @@ module ContainerRegistry
end end
def valid? def valid?
@nodes.size > 1 && @nodes.size < Namespace::NUMBER_OF_ANCESTORS_ALLOWED @path =~ Gitlab::Regex.container_repository_name_regex &&
@nodes.size > 1 &&
@nodes.size < Namespace::NUMBER_OF_ANCESTORS_ALLOWED
end end
def components def components
......
...@@ -121,6 +121,13 @@ module Gitlab ...@@ -121,6 +121,13 @@ module Gitlab
git_reference_regex git_reference_regex
end end
##
# Docker Distribution Registry 2.4.1 repository name rules
#
def container_repository_name_regex
@container_repository_regex ||= %r{\A[a-z0-9]+(?:[-._/][a-z0-9]+)*\Z}
end
def environment_name_regex def environment_name_regex
@environment_name_regex ||= /\A[a-zA-Z0-9_\\\/\${}. -]+\z/.freeze @environment_name_regex ||= /\A[a-zA-Z0-9_\\\/\${}. -]+\z/.freeze
end end
......
...@@ -36,25 +36,31 @@ describe ContainerRegistry::Path do ...@@ -36,25 +36,31 @@ describe ContainerRegistry::Path do
context 'when path has less than two components' do context 'when path has less than two components' do
let(:path) { 'something/' } let(:path) { 'something/' }
it 'is not valid' do it { is_expected.not_to be_valid }
expect(subject).not_to be_valid
end
end end
context 'when path has more than allowed number of components' do context 'when path has more than allowed number of components' do
let(:path) { 'a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/r/s/t/u/w/y/z' } let(:path) { 'a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/r/s/t/u/w/y/z' }
it 'is not valid' do it { is_expected.not_to be_valid }
expect(subject).not_to be_valid end
end
context 'when path has invalid characters' do
let(:path) { 'some\path' }
it { is_expected.not_to be_valid }
end end
context 'when path has two or more components' do context 'when path has two or more components' do
let(:path) { 'some/path' } let(:path) { 'some/path' }
it 'is valid' do it { is_expected.to be_valid }
expect(subject).to be_valid end
end
context 'when path is related to multi-level image' do
let(:path) { 'some/path/my/image' }
it { is_expected.to be_valid }
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