未验证 提交 87e54030 编写于 作者: M Medya Ghazizadeh 提交者: GitHub

Merge pull request #8648 from jlucktay/update/profile-name-validation

disallow setting profile names with underscore
......@@ -47,7 +47,7 @@ var ProfileCmd = &cobra.Command{
// Check whether the profile name is container friendly
if !config.ProfileNameValid(profile) {
out.WarningT("Profile name '{{.profilename}}' is not valid", out.V{"profilename": profile})
exit.UsageT("Only alphanumeric, dots, underscores and dashes '-' are permitted. Minimum 2 characters, starting by alphanumeric.")
exit.UsageT("Only alphanumeric and dashes '-' are permitted. Minimum 1 character, starting with alphanumeric.")
}
/**
we need to add code over here to check whether the profile
......
......@@ -145,7 +145,7 @@ func runStart(cmd *cobra.Command, args []string) {
if !config.ProfileNameValid(ClusterFlagValue()) {
out.WarningT("Profile name '{{.name}}' is not valid", out.V{"name": ClusterFlagValue()})
exit.UsageT("Only alphanumeric, dots, underscores and dashes '-' are permitted. Minimum 2 characters, starting by alphanumeric.")
exit.UsageT("Only alphanumeric and dashes '-' are permitted. Minimum 1 character, starting with alphanumeric.")
}
existing, err := config.Load(ClusterFlagValue())
if err != nil && !config.IsNotExist(err) {
......
......@@ -84,13 +84,13 @@ func PrimaryControlPlane(cc *ClusterConfig) (Node, error) {
return cp, nil
}
// ProfileNameValid checks if the profile name is container name friendly
// ProfileNameValid checks if the profile name is container name and DNS hostname/label friendly.
func ProfileNameValid(name string) bool {
// RestrictedNamePattern describes the characters allowed to represent a profile's name
const RestrictedNamePattern = `(([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]*[a-zA-Z0-9])\.)*([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9\-]*[A-Za-z0-9])`
// RestrictedNameChars collects the characters allowed to represent a name
const RestrictedNameChars = `[a-zA-Z0-9][a-zA-Z0-9_.-]`
var validName = regexp.MustCompile(`^` + RestrictedNamePattern + `$`)
var validName = regexp.MustCompile(`^` + RestrictedNameChars + `+$`)
return validName.MatchString(name)
}
......@@ -181,6 +181,7 @@ func SaveProfile(name string, cfg *ClusterConfig, miniHome ...string) error {
if err = os.Rename(tf.Name(), path); err != nil {
return err
}
return nil
}
......
......@@ -73,24 +73,38 @@ func TestListProfiles(t *testing.T) {
}
func TestProfileNameValid(t *testing.T) {
var testCases = []struct {
name string
expected bool
}{
{"meaningful_name", true},
{"meaningful_name@", false},
{"n_a_m_e_2", true},
{"n", false},
{"_name", false},
{"N__a.M--E12567", true},
}
for _, tt := range testCases {
got := ProfileNameValid(tt.name)
if got != tt.expected {
t.Errorf("expected ProfileNameValid(%s)=%t but got %t ", tt.name, tt.expected, got)
}
var testCases = map[string]bool{
"profile": true,
"pro-file": true,
"profile1": true,
"pro-file1": true,
"1st-profile": true,
"1st-2nd-3rd-profile": true,
"n": true,
"1": true,
"12567": true,
"pro file": false,
"pro-file-": false,
"-profile": false,
"meaningful_name": false,
"meaningful_name@": false,
"n_a_m_e_2": false,
"_name": false,
"N__a.M--E12567": false,
}
for name, exp := range testCases {
name, exp := name, exp // capture range variables
t.Run(name, func(t *testing.T) {
t.Parallel()
got := ProfileNameValid(name)
if got != exp {
t.Errorf("expected ProfileNameValid(%s)=%t but got %t ", name, exp, got)
}
})
}
}
func TestProfileNameInReservedKeywords(t *testing.T) {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册