From 572453ae0732773a89000fa377d0d14c032beab3 Mon Sep 17 00:00:00 2001 From: Scott Frederick Date: Mon, 13 Nov 2017 18:46:26 -0600 Subject: [PATCH] Relax requirements on credential names containing a leading slash. --- .../credhub/support/CredentialName.java | 16 ++++++++--- .../credhub/support/SimpleCredentialName.java | 7 +---- .../SimpleCredentialNameUnitTests.java | 28 +++++++++++++++++++ 3 files changed, 41 insertions(+), 10 deletions(-) diff --git a/spring-credhub-core/src/main/java/org/springframework/credhub/support/CredentialName.java b/spring-credhub-core/src/main/java/org/springframework/credhub/support/CredentialName.java index 5509ae7..dbe148c 100644 --- a/spring-credhub-core/src/main/java/org/springframework/credhub/support/CredentialName.java +++ b/spring-credhub-core/src/main/java/org/springframework/credhub/support/CredentialName.java @@ -45,10 +45,14 @@ public class CredentialName { String[] split = name.split("/"); - Assert.isTrue(split.length > 2, "name must include at least one segment separated by '/'"); + Assert.isTrue(split.length > 0, "name must include at least one segment separated by '/'"); - // remove the "/" prefix - this.segments = Arrays.copyOfRange(split, 1, split.length); + if (split[0].length() == 0) { + // name contains a leading "/" + this.segments = Arrays.copyOfRange(split, 1, split.length); + } else { + this.segments = split; + } } /** @@ -68,7 +72,11 @@ public class CredentialName { */ @JsonInclude public String getName() { - return "/" + StringUtils.arrayToDelimitedString(segments, "/"); + if (segments.length == 1) { + return segments[0]; + } else { + return "/" + StringUtils.arrayToDelimitedString(segments, "/"); + } } @Override diff --git a/spring-credhub-core/src/main/java/org/springframework/credhub/support/SimpleCredentialName.java b/spring-credhub-core/src/main/java/org/springframework/credhub/support/SimpleCredentialName.java index fa94b3c..23e7ca8 100644 --- a/spring-credhub-core/src/main/java/org/springframework/credhub/support/SimpleCredentialName.java +++ b/spring-credhub-core/src/main/java/org/springframework/credhub/support/SimpleCredentialName.java @@ -16,15 +16,12 @@ package org.springframework.credhub.support; -import org.springframework.util.Assert; - import java.util.Arrays; /** * The client-provided name of a credential. The name consists of one or more segments. * When the value of each segment are combined the full name of the credential will be of - * the form - * {@literal /c/segment1/segment2/segment3}. + * the form {@literal /segment1/segment2/segment3}. * * Objects of this type are created by clients and included as part of requests. * @@ -39,8 +36,6 @@ public class SimpleCredentialName extends CredentialName { */ public SimpleCredentialName(String... segments) { super(segments); - Assert.notNull(segments, "segments must not be null"); - Assert.isTrue(segments.length > 0, "at least one segment must be provided"); } @Override diff --git a/spring-credhub-core/src/test/java/org/springframework/credhub/support/SimpleCredentialNameUnitTests.java b/spring-credhub-core/src/test/java/org/springframework/credhub/support/SimpleCredentialNameUnitTests.java index 103767c..9484764 100644 --- a/spring-credhub-core/src/test/java/org/springframework/credhub/support/SimpleCredentialNameUnitTests.java +++ b/spring-credhub-core/src/test/java/org/springframework/credhub/support/SimpleCredentialNameUnitTests.java @@ -24,6 +24,27 @@ import static org.hamcrest.CoreMatchers.equalTo; import static org.junit.Assert.assertThat; public class SimpleCredentialNameUnitTests { + @Test + public void singleElementNameIsConstructed() { + CredentialName credentialName = new SimpleCredentialName("credential-name"); + + assertThat(credentialName.getName(), equalTo("credential-name")); + } + + @Test + public void singleElementNameWithLeadingSlashIsParsed() { + CredentialName credentialName = new CredentialName("/credential-name"); + + assertThat(credentialName.getName(), equalTo("credential-name")); + } + + @Test + public void singleElementNameWithoutLeadingSlashIsParsed() { + CredentialName credentialName = new CredentialName("credential-name"); + + assertThat(credentialName.getName(), equalTo("credential-name")); + } + @Test public void simpleNameIsConstructed() { CredentialName credentialName = @@ -38,4 +59,11 @@ public class SimpleCredentialNameUnitTests { assertThat(credentialName.getName(), equalTo("/myorg/example/credential-name")); } + + @Test + public void simpleNameWithoutLeadingSlashIsParsed() { + CredentialName credentialName = new CredentialName("myorg/example/credential-name"); + + assertThat(credentialName.getName(), equalTo("/myorg/example/credential-name")); + } } \ No newline at end of file