refactor: increase group name limit to 255 (#15377)

Close https://github.com/coder/coder/issues/15184
This commit is contained in:
Bruno Quaresma
2024-11-06 14:39:50 -03:00
committed by GitHub
parent 17363098e2
commit 7f510051fb
2 changed files with 46 additions and 3 deletions

View File

@ -1,6 +1,7 @@
package codersdk package codersdk
import ( import (
"fmt"
"regexp" "regexp"
"strings" "strings"
@ -98,9 +99,12 @@ func UserRealNameValid(str string) error {
// GroupNameValid returns whether the input string is a valid group name. // GroupNameValid returns whether the input string is a valid group name.
func GroupNameValid(str string) error { func GroupNameValid(str string) error {
// 36 is to support using UUIDs as the group name. // We want to support longer names for groups to allow users to sync their
if len(str) > 36 { // group names with their identity providers without manual mapping. Related
return xerrors.New("must be <= 36 characters") // to: https://github.com/coder/coder/issues/15184
limit := 255
if len(str) > limit {
return xerrors.New(fmt.Sprintf("must be <= %d characters", limit))
} }
// Avoid conflicts with routes like /groups/new and /groups/create. // Avoid conflicts with routes like /groups/new and /groups/create.
if str == "new" || str == "create" { if str == "new" || str == "create" {

View File

@ -8,6 +8,7 @@ import (
"github.com/stretchr/testify/require" "github.com/stretchr/testify/require"
"github.com/coder/coder/v2/codersdk" "github.com/coder/coder/v2/codersdk"
"github.com/coder/coder/v2/cryptorand"
"github.com/coder/coder/v2/testutil" "github.com/coder/coder/v2/testutil"
) )
@ -254,3 +255,41 @@ func TestUserRealNameValid(t *testing.T) {
}) })
} }
} }
func TestGroupNameValid(t *testing.T) {
t.Parallel()
random255String, err := cryptorand.String(255)
require.NoError(t, err, "failed to generate 255 random string")
random256String, err := cryptorand.String(256)
require.NoError(t, err, "failed to generate 256 random string")
testCases := []struct {
Name string
Valid bool
}{
{"", false},
{"my-group", true},
{"create", false},
{"new", false},
{"Lord Voldemort Team", false},
{random255String, true},
{random256String, false},
}
for _, testCase := range testCases {
testCase := testCase
t.Run(testCase.Name, func(t *testing.T) {
t.Parallel()
err := codersdk.GroupNameValid(testCase.Name)
assert.Equal(
t,
testCase.Valid,
err == nil,
"Test case %s failed: expected valid=%t but got error: %v",
testCase.Name,
testCase.Valid,
err,
)
})
}
}