diff --git a/codersdk/name.go b/codersdk/name.go index 064c2175bcb49..8942e08cafe86 100644 --- a/codersdk/name.go +++ b/codersdk/name.go @@ -1,6 +1,7 @@ package codersdk import ( + "fmt" "regexp" "strings" @@ -98,9 +99,12 @@ func UserRealNameValid(str string) error { // GroupNameValid returns whether the input string is a valid group name. func GroupNameValid(str string) error { - // 36 is to support using UUIDs as the group name. - if len(str) > 36 { - return xerrors.New("must be <= 36 characters") + // We want to support longer names for groups to allow users to sync their + // group names with their identity providers without manual mapping. Related + // 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. if str == "new" || str == "create" { diff --git a/codersdk/name_test.go b/codersdk/name_test.go index 11ce797f78023..487f3778ac70e 100644 --- a/codersdk/name_test.go +++ b/codersdk/name_test.go @@ -8,6 +8,7 @@ import ( "github.com/stretchr/testify/require" "github.com/coder/coder/v2/codersdk" + "github.com/coder/coder/v2/cryptorand" "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, + ) + }) + } +}