diff --git a/plugins/common/common.go b/plugins/common/common.go index a3ec11acd..d6833bae2 100644 --- a/plugins/common/common.go +++ b/plugins/common/common.go @@ -923,12 +923,12 @@ func IsValidAppName(appName string) error { return errors.New("Please specify an app to run the command on") } - r, _ := regexp.Compile("^[a-z0-9][^/:_A-Z]*$") + r, _ := regexp.Compile("^[a-z0-9][a-z0-9.-]*$") if r.MatchString(appName) { return nil } - return errors.New("App name must begin with lowercase alphanumeric character, and cannot include uppercase characters, colons, or underscores") + return errors.New("App name must begin with lowercase alphanumeric character, and may only contain lowercase alphanumerics, dots, and hyphens") } // isValidAppNameOld verifies that the app name matches the old naming restrictions @@ -937,12 +937,12 @@ func isValidAppNameOld(appName string) error { return errors.New("Please specify an app to run the command on") } - r, _ := regexp.Compile("^[a-z0-9][^/:A-Z]*$") + r, _ := regexp.Compile("^[a-z0-9][a-z0-9.-]*$") if r.MatchString(appName) { return nil } - return errors.New("App name must begin with lowercase alphanumeric character, and cannot include uppercase characters, or colons") + return errors.New("App name must begin with lowercase alphanumeric character, and may only contain lowercase alphanumerics, dots, and hyphens") } // AppDoesNotExist wraps error to include the app name diff --git a/plugins/common/common_test.go b/plugins/common/common_test.go index f6fa98123..14c0ef032 100644 --- a/plugins/common/common_test.go +++ b/plugins/common/common_test.go @@ -77,6 +77,60 @@ func TestCommonVerifyAppNameInvalid(t *testing.T) { Expect(VerifyAppName("1994testApp")).To(HaveOccurred()) } +func TestCommonIsValidAppName(t *testing.T) { + RegisterTestingT(t) + validNames := []string{ + "myapp", + "my-app", + "my.app", + "app123", + "123app", + "my-app.prod", + "a", + "0", + } + for _, name := range validNames { + Expect(IsValidAppName(name)).To(Succeed(), "expected %q to be a valid app name", name) + } +} + +func TestCommonIsValidAppNameRejectsShellMetacharacters(t *testing.T) { + RegisterTestingT(t) + invalidNames := []string{ + "app;id", + "app$cmd", + "app`whoami`", + "app|cat", + "app&background", + "app>file", + "app