Skip to content

Commit

Permalink
ImageName should be able to parse image names with IPv6 address literals
Browse files Browse the repository at this point in the history
1.added IPv6 address
2.uncommented the related tests
  • Loading branch information
Devashishbasu authored and manusa committed Feb 9, 2024
1 parent cf856cd commit 604eb9c
Show file tree
Hide file tree
Showing 3 changed files with 25 additions and 13 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -275,7 +275,7 @@ private void doValidate() {
String user = inferUser();
String image = user != null ? repository.substring(user.length() + 1) : repository;
Object[] checks = new Object[] {
"registry", DOMAIN_REGEXP, registry,
"registry", REGISTRY_REGEXP, registry,
"image", IMAGE_NAME_REGEXP, image,
"user", NAME_COMP_REGEXP, user,
"tag", TAG_REGEXP, tag,
Expand Down Expand Up @@ -323,7 +323,7 @@ private void parseComponentsBeforeTag(String rest) {
}

private boolean isValidDomain(String str) {
return containsPeriodOrColon(str) && DOMAIN_REGEXP.matcher(str).matches();
return containsPeriodOrColon(str) && REGISTRY_REGEXP.matcher(str).matches();
}

private boolean isRegistryValidPathComponent() {
Expand All @@ -343,6 +343,9 @@ private boolean isRegistryValidPathComponent() {
// https://github.com/docker/docker/blob/04da4041757370fb6f85510c8977c5a18ddae380/vendor/github.com/docker/distribution/reference/regexp.go#L25
private static final String DOMAIN_COMPONENT_REGEXP = "(?:[a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9-]*[a-zA-Z0-9])";

//https://github.com/distribution/reference/blob/8507c7fcf0da9f570540c958ea7b972c30eeaeca/regexp.go#L91
private static final String IPV6_ADDRESS_REGEXP = "\\[[a-fA-F0-9:]+\\]";

// ==========================================================

// https://github.com/docker/docker/blob/04da4041757370fb6f85510c8977c5a18ddae380/vendor/github.com/docker/distribution/reference/regexp.go#L18
Expand All @@ -351,8 +354,17 @@ private boolean isRegistryValidPathComponent() {
// https://github.com/docker/docker/blob/04da4041757370fb6f85510c8977c5a18ddae380/vendor/github.com/docker/distribution/reference/regexp.go#L53
private static final Pattern IMAGE_NAME_REGEXP = Pattern.compile(NAME_COMPONENT_REGEXP + "(?:(?:/" + NAME_COMPONENT_REGEXP + ")+)?");

// https://github.com/docker/docker/blob/04da4041757370fb6f85510c8977c5a18ddae380/vendor/github.com/docker/distribution/reference/regexp.go#L31
private static final Pattern DOMAIN_REGEXP = Pattern.compile("^" + DOMAIN_COMPONENT_REGEXP + "(?:\\." + DOMAIN_COMPONENT_REGEXP + ")*(?::[0-9]+)?$");
// https://github.com/distribution/reference/blob/8507c7fcf0da9f570540c958ea7b972c30eeaeca/regexp.go#L65
private static final String OPTIONAL_PORT_REGEXP = "(?::[0-9]+)?";

// https://github.com/distribution/reference/blob/8507c7fcf0da9f570540c958ea7b972c30eeaeca/regexp.go#L99
private static final String DOMAIN_NAME_REGEXP = DOMAIN_COMPONENT_REGEXP + "(?:\\." + DOMAIN_COMPONENT_REGEXP + ")*";

// https://github.com/distribution/reference/blob/8507c7fcf0da9f570540c958ea7b972c30eeaeca/regexp.go#L106
private static final String REGISTRY_HOST_REGEXP = "^(?:" + IPV6_ADDRESS_REGEXP + "|" + DOMAIN_NAME_REGEXP + ")";

// https://github.com/distribution/reference/blob/8507c7fcf0da9f570540c958ea7b972c30eeaeca/regexp.go#L110
private static final Pattern REGISTRY_REGEXP = Pattern.compile(REGISTRY_HOST_REGEXP + OPTIONAL_PORT_REGEXP);

// https://github.com/docker/docker/blob/04da4041757370fb6f85510c8977c5a18ddae380/vendor/github.com/docker/distribution/reference/regexp.go#L37
private static final Pattern TAG_REGEXP = Pattern.compile("^[\\w][\\w.-]{0,127}$");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -72,14 +72,14 @@ class ImageNameDistributionReferenceTest {
"192.168.0.1:8/debian",
"192.168.0.2:25000/debian",
"docker.io/1a3f5e7d9c1b3a5f7e9d1c3b5a7f9e1d3c5b7a9f1e3d5d7c9b1a3f5e7d9c1b3a",
//"[2001:db8::1]/repo", // https://github.com/eclipse/jkube/issues/2541
//"[2001:db8:1:2:3:4:5:6]/repo:tag", // https://github.com/eclipse/jkube/issues/2541
//"[2001:db8::1]:5000/repo", // https://github.com/eclipse/jkube/issues/2541
//"[2001:db8::1]:5000/repo:tag", // https://github.com/eclipse/jkube/issues/2541
//"[2001:db8::1]:5000/repo@sha256:ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", // https://github.com/eclipse/jkube/issues/2541
//"[2001:db8::1]:5000/repo:tag@sha256:ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", // https://github.com/eclipse/jkube/issues/2541
//"[2001:db8::]:5000/repo", // https://github.com/eclipse/jkube/issues/2541
//"[::1]:5000/repo", // https://github.com/eclipse/jkube/issues/2541
"[2001:db8::1]/repo",
"[2001:db8:1:2:3:4:5:6]/repo:tag",
"[2001:db8::1]:5000/repo",
"[2001:db8::1]:5000/repo:tag",
"[2001:db8::1]:5000/repo@sha256:ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
"[2001:db8::1]:5000/repo:tag@sha256:ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
"[2001:db8::]:5000/repo",
"[::1]:5000/repo",
})
void validNames(String name) {
// Given
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ class ImageNameORASReferenceTest {
"registry.example.com/hello-world:v2@sha256:b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9",
"localhost:5000/hello-world:v2@sha256:b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9",
"127.0.0.1:5000/hello-world:v2@sha256:b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9",
//"[::1]:5000/hello-world:v1", // https://github.com/eclipse/jkube/issues/2541
"[::1]:5000/hello-world:v1",
//"registry.example.com/hello-world:@sha256:b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9", // https://github.com/eclipse/jkube/issues/2545
})
void validImageNamesCompatibleWithAll(String name) {
Expand Down

0 comments on commit 604eb9c

Please sign in to comment.