From 05ef13456e4fe66543f3923e8ca78b13ec23e007 Mon Sep 17 00:00:00 2001 From: Steven Masley Date: Fri, 23 Aug 2024 15:08:13 -0500 Subject: [PATCH 1/4] Handle sdk deprecation betteR --- cli/clitest/golden.go | 2 +- cli/schedule_test.go | 2 +- cli/server_createadminuser.go | 2 +- cli/user_delete_test.go | 8 ++-- cli/usercreate.go | 2 +- coderd/apidoc/docs.go | 8 +--- coderd/apidoc/swagger.json | 8 +--- coderd/coderdtest/coderdtest.go | 8 ++-- coderd/insights_test.go | 2 +- coderd/userauth.go | 2 +- coderd/userauth_test.go | 6 +-- coderd/users.go | 16 +++----- coderd/users_test.go | 52 ++++++++++++------------- coderd/workspaceapps/apptest/apptest.go | 4 +- coderd/workspaces_test.go | 2 +- codersdk/users.go | 39 ++++++++++++++++--- codersdk/users_test.go | 16 ++++---- docs/reference/api/schemas.md | 20 +++++----- docs/reference/api/users.md | 7 ++-- enterprise/coderd/groups_test.go | 2 +- enterprise/coderd/scim.go | 2 +- enterprise/coderd/userauth_test.go | 4 +- enterprise/coderd/users_test.go | 8 ++-- scaletest/createworkspaces/run.go | 2 +- site/src/api/typesGenerated.ts | 10 +++++ 25 files changed, 129 insertions(+), 105 deletions(-) diff --git a/cli/clitest/golden.go b/cli/clitest/golden.go index 641d2e479d437..5e154e6087e6f 100644 --- a/cli/clitest/golden.go +++ b/cli/clitest/golden.go @@ -184,7 +184,7 @@ func prepareTestData(t *testing.T) (*codersdk.Client, map[string]string) { IncludeProvisionerDaemon: true, }) firstUser := coderdtest.CreateFirstUser(t, rootClient) - secondUser, err := rootClient.CreateUser(ctx, codersdk.CreateUserRequest{ + secondUser, err := rootClient.CreateUserWithOrgs(ctx, codersdk.CreateUserRequestWithOrgs{ Email: "testuser2@coder.com", Username: "testuser2", Password: coderdtest.FirstUserParams.Password, diff --git a/cli/schedule_test.go b/cli/schedule_test.go index 9ed44de9e467f..11e0171417c04 100644 --- a/cli/schedule_test.go +++ b/cli/schedule_test.go @@ -35,7 +35,7 @@ func setupTestSchedule(t *testing.T, sched *cron.Schedule) (ownerClient, memberC ownerClient, db = coderdtest.NewWithDatabase(t, nil) owner := coderdtest.CreateFirstUser(t, ownerClient) - memberClient, memberUser := coderdtest.CreateAnotherUserMutators(t, ownerClient, owner.OrganizationID, nil, func(r *codersdk.CreateUserRequest) { + memberClient, memberUser := coderdtest.CreateAnotherUserMutators(t, ownerClient, owner.OrganizationID, nil, func(r *codersdk.CreateUserRequestWithOrgs) { r.Username = "testuser2" // ensure deterministic ordering }) _ = dbfake.WorkspaceBuild(t, db, database.Workspace{ diff --git a/cli/server_createadminuser.go b/cli/server_createadminuser.go index 6a980d4291bf1..01eb56a83b7e8 100644 --- a/cli/server_createadminuser.go +++ b/cli/server_createadminuser.go @@ -83,7 +83,7 @@ func (r *RootCmd) newCreateAdminUserCommand() *serpent.Command { validateInputs := func(username, email, password string) error { // Use the validator tags so we match the API's validation. - req := codersdk.CreateUserRequest{ + req := codersdk.CreateUserRequestWithOrgs{ Username: "username", Name: "Admin User", Email: "email@coder.com", diff --git a/cli/user_delete_test.go b/cli/user_delete_test.go index 59a52e7f428e1..56c9ed6e51c40 100644 --- a/cli/user_delete_test.go +++ b/cli/user_delete_test.go @@ -27,7 +27,7 @@ func TestUserDelete(t *testing.T) { pw, err := cryptorand.String(16) require.NoError(t, err) - _, err = client.CreateUser(ctx, codersdk.CreateUserRequest{ + _, err = client.CreateUserWithOrgs(ctx, codersdk.CreateUserRequestWithOrgs{ Email: "colin5@coder.com", Username: "coolin", Password: pw, @@ -58,7 +58,7 @@ func TestUserDelete(t *testing.T) { pw, err := cryptorand.String(16) require.NoError(t, err) - user, err := client.CreateUser(ctx, codersdk.CreateUserRequest{ + user, err := client.CreateUserWithOrgs(ctx, codersdk.CreateUserRequestWithOrgs{ Email: "colin5@coder.com", Username: "coolin", Password: pw, @@ -89,7 +89,7 @@ func TestUserDelete(t *testing.T) { pw, err := cryptorand.String(16) require.NoError(t, err) - user, err := client.CreateUser(ctx, codersdk.CreateUserRequest{ + user, err := client.CreateUserWithOrgs(ctx, codersdk.CreateUserRequestWithOrgs{ Email: "colin5@coder.com", Username: "coolin", Password: pw, @@ -122,7 +122,7 @@ func TestUserDelete(t *testing.T) { // pw, err := cryptorand.String(16) // require.NoError(t, err) - // toDelete, err := client.CreateUser(ctx, codersdk.CreateUserRequest{ + // toDelete, err := client.CreateUserWithOrgs(ctx, codersdk.CreateUserRequestWithOrgs{ // Email: "colin5@coder.com", // Username: "coolin", // Password: pw, diff --git a/cli/usercreate.go b/cli/usercreate.go index 0fb642982cf82..78bb396916926 100644 --- a/cli/usercreate.go +++ b/cli/usercreate.go @@ -95,7 +95,7 @@ func (r *RootCmd) userCreate() *serpent.Command { } } - _, err = client.CreateUser(inv.Context(), codersdk.CreateUserRequest{ + _, err = client.CreateUserWithOrgs(inv.Context(), codersdk.CreateUserRequestWithOrgs{ Email: email, Username: username, Name: name, diff --git a/coderd/apidoc/docs.go b/coderd/apidoc/docs.go index 8ecc25b14796e..d0527df61bed3 100644 --- a/coderd/apidoc/docs.go +++ b/coderd/apidoc/docs.go @@ -4875,7 +4875,7 @@ const docTemplate = `{ "in": "body", "required": true, "schema": { - "$ref": "#/definitions/codersdk.CreateUserRequest" + "$ref": "#/definitions/codersdk.CreateUserRequestWithOrgs" } } ], @@ -9449,17 +9449,13 @@ const docTemplate = `{ } } }, - "codersdk.CreateUserRequest": { + "codersdk.CreateUserRequestWithOrgs": { "type": "object", "required": [ "email", "username" ], "properties": { - "disable_login": { - "description": "DisableLogin sets the user's login type to 'none'. This prevents the user\nfrom being able to use a password or any other authentication method to login.\nDeprecated: Set UserLoginType=LoginTypeDisabled instead.", - "type": "boolean" - }, "email": { "type": "string", "format": "email" diff --git a/coderd/apidoc/swagger.json b/coderd/apidoc/swagger.json index 20552b6fe31a2..79fe02c6291d3 100644 --- a/coderd/apidoc/swagger.json +++ b/coderd/apidoc/swagger.json @@ -4305,7 +4305,7 @@ "in": "body", "required": true, "schema": { - "$ref": "#/definitions/codersdk.CreateUserRequest" + "$ref": "#/definitions/codersdk.CreateUserRequestWithOrgs" } } ], @@ -8413,14 +8413,10 @@ } } }, - "codersdk.CreateUserRequest": { + "codersdk.CreateUserRequestWithOrgs": { "type": "object", "required": ["email", "username"], "properties": { - "disable_login": { - "description": "DisableLogin sets the user's login type to 'none'. This prevents the user\nfrom being able to use a password or any other authentication method to login.\nDeprecated: Set UserLoginType=LoginTypeDisabled instead.", - "type": "boolean" - }, "email": { "type": "string", "format": "email" diff --git a/coderd/coderdtest/coderdtest.go b/coderd/coderdtest/coderdtest.go index 9cff87c456d96..b1397b2ce88b2 100644 --- a/coderd/coderdtest/coderdtest.go +++ b/coderd/coderdtest/coderdtest.go @@ -649,7 +649,7 @@ func CreateAnotherUser(t testing.TB, client *codersdk.Client, organizationID uui return createAnotherUserRetry(t, client, []uuid.UUID{organizationID}, 5, roles) } -func CreateAnotherUserMutators(t testing.TB, client *codersdk.Client, organizationID uuid.UUID, roles []rbac.RoleIdentifier, mutators ...func(r *codersdk.CreateUserRequest)) (*codersdk.Client, codersdk.User) { +func CreateAnotherUserMutators(t testing.TB, client *codersdk.Client, organizationID uuid.UUID, roles []rbac.RoleIdentifier, mutators ...func(r *codersdk.CreateUserRequestWithOrgs)) (*codersdk.Client, codersdk.User) { return createAnotherUserRetry(t, client, []uuid.UUID{organizationID}, 5, roles, mutators...) } @@ -676,8 +676,8 @@ func AuthzUserSubject(user codersdk.User, orgID uuid.UUID) rbac.Subject { } } -func createAnotherUserRetry(t testing.TB, client *codersdk.Client, organizationIDs []uuid.UUID, retries int, roles []rbac.RoleIdentifier, mutators ...func(r *codersdk.CreateUserRequest)) (*codersdk.Client, codersdk.User) { - req := codersdk.CreateUserRequest{ +func createAnotherUserRetry(t testing.TB, client *codersdk.Client, organizationIDs []uuid.UUID, retries int, roles []rbac.RoleIdentifier, mutators ...func(r *codersdk.CreateUserRequestWithOrgs)) (*codersdk.Client, codersdk.User) { + req := codersdk.CreateUserRequestWithOrgs{ Email: namesgenerator.GetRandomName(10) + "@coder.com", Username: RandomUsername(t), Name: RandomName(t), @@ -688,7 +688,7 @@ func createAnotherUserRetry(t testing.TB, client *codersdk.Client, organizationI m(&req) } - user, err := client.CreateUser(context.Background(), req) + user, err := client.CreateUserWithOrgs(context.Background(), req) var apiError *codersdk.Error // If the user already exists by username or email conflict, try again up to "retries" times. if err != nil && retries >= 0 && xerrors.As(err, &apiError) { diff --git a/coderd/insights_test.go b/coderd/insights_test.go index 3c7c70e8c6743..40daed5d0ce02 100644 --- a/coderd/insights_test.go +++ b/coderd/insights_test.go @@ -523,7 +523,7 @@ func TestTemplateInsights_Golden(t *testing.T) { // Prepare all test users. for _, user := range users { - user.client, user.sdk = coderdtest.CreateAnotherUserMutators(t, client, firstUser.OrganizationID, nil, func(r *codersdk.CreateUserRequest) { + user.client, user.sdk = coderdtest.CreateAnotherUserMutators(t, client, firstUser.OrganizationID, nil, func(r *codersdk.CreateUserRequestWithOrgs) { r.Username = user.name }) user.client.SetLogger(logger.Named("user").With(slog.Field{Name: "name", Value: user.name})) diff --git a/coderd/userauth.go b/coderd/userauth.go index df1e553bfa753..1a5488d2d6ded 100644 --- a/coderd/userauth.go +++ b/coderd/userauth.go @@ -1437,7 +1437,7 @@ func (api *API) oauthLogin(r *http.Request, params *oauthLoginParams) ([]*http.C //nolint:gocritic user, err = api.CreateUser(dbauthz.AsSystemRestricted(ctx), tx, CreateUserRequest{ - CreateUserRequest: codersdk.CreateUserRequest{ + CreateUserRequestWithOrgs: codersdk.CreateUserRequestWithOrgs{ Email: params.Email, Username: params.Username, OrganizationIDs: []uuid.UUID{defaultOrganization.ID}, diff --git a/coderd/userauth_test.go b/coderd/userauth_test.go index e6313a9a8d005..8ae27165c4219 100644 --- a/coderd/userauth_test.go +++ b/coderd/userauth_test.go @@ -111,7 +111,7 @@ func TestUserLogin(t *testing.T) { t.Parallel() client := coderdtest.New(t, nil) user := coderdtest.CreateFirstUser(t, client) - anotherClient, anotherUser := coderdtest.CreateAnotherUserMutators(t, client, user.OrganizationID, nil, func(r *codersdk.CreateUserRequest) { + anotherClient, anotherUser := coderdtest.CreateAnotherUserMutators(t, client, user.OrganizationID, nil, func(r *codersdk.CreateUserRequestWithOrgs) { r.Password = "" r.DisableLogin = true }) @@ -127,7 +127,7 @@ func TestUserLogin(t *testing.T) { t.Parallel() client := coderdtest.New(t, nil) user := coderdtest.CreateFirstUser(t, client) - anotherClient, anotherUser := coderdtest.CreateAnotherUserMutators(t, client, user.OrganizationID, nil, func(r *codersdk.CreateUserRequest) { + anotherClient, anotherUser := coderdtest.CreateAnotherUserMutators(t, client, user.OrganizationID, nil, func(r *codersdk.CreateUserRequestWithOrgs) { r.Password = "" r.UserLoginType = codersdk.LoginTypeNone }) @@ -1470,7 +1470,7 @@ func TestUserLogout(t *testing.T) { //nolint:gosec password = "SomeSecurePassword123!" ) - newUser, err := client.CreateUser(ctx, codersdk.CreateUserRequest{ + newUser, err := client.CreateUserWithOrgs(ctx, codersdk.CreateUserRequestWithOrgs{ Email: email, Username: username, Password: password, diff --git a/coderd/users.go b/coderd/users.go index 3a72e9ea76c38..3ae2d916e1de8 100644 --- a/coderd/users.go +++ b/coderd/users.go @@ -187,7 +187,7 @@ func (api *API) postFirstUser(rw http.ResponseWriter, r *http.Request) { //nolint:gocritic // needed to create first user user, err := api.CreateUser(dbauthz.AsSystemRestricted(ctx), api.Database, CreateUserRequest{ - CreateUserRequest: codersdk.CreateUserRequest{ + CreateUserRequestWithOrgs: codersdk.CreateUserRequestWithOrgs{ Email: createUser.Email, Username: createUser.Username, Name: createUser.Name, @@ -342,7 +342,7 @@ func (api *API) GetUsers(rw http.ResponseWriter, r *http.Request) ([]database.Us // @Accept json // @Produce json // @Tags Users -// @Param request body codersdk.CreateUserRequest true "Create user request" +// @Param request body codersdk.CreateUserRequestWithOrgs true "Create user request" // @Success 201 {object} codersdk.User // @Router /users [post] func (api *API) postUser(rw http.ResponseWriter, r *http.Request) { @@ -356,15 +356,11 @@ func (api *API) postUser(rw http.ResponseWriter, r *http.Request) { }) defer commitAudit() - var req codersdk.CreateUserRequest + var req codersdk.CreateUserRequestWithOrgs if !httpapi.Read(ctx, rw, r, &req) { return } - if req.UserLoginType == "" && req.DisableLogin { - // Handle the deprecated field - req.UserLoginType = codersdk.LoginTypeNone - } if req.UserLoginType == "" { // Default to password auth req.UserLoginType = codersdk.LoginTypePassword @@ -484,8 +480,8 @@ func (api *API) postUser(rw http.ResponseWriter, r *http.Request) { } user, err := api.CreateUser(ctx, api.Database, CreateUserRequest{ - CreateUserRequest: req, - LoginType: loginType, + CreateUserRequestWithOrgs: req, + LoginType: loginType, }) if dbauthz.IsNotAuthorizedError(err) { httpapi.Write(ctx, rw, http.StatusForbidden, codersdk.Response{ @@ -1283,7 +1279,7 @@ func (api *API) organizationByUserAndName(rw http.ResponseWriter, r *http.Reques } type CreateUserRequest struct { - codersdk.CreateUserRequest + codersdk.CreateUserRequestWithOrgs LoginType database.LoginType SkipNotifications bool } diff --git a/coderd/users_test.go b/coderd/users_test.go index 5cd4c08bc7962..622e2da54c3bc 100644 --- a/coderd/users_test.go +++ b/coderd/users_test.go @@ -220,7 +220,7 @@ func TestPostLogin(t *testing.T) { // With a user account. const password = "SomeSecurePassword!" - user, err := client.CreateUser(ctx, codersdk.CreateUserRequest{ + user, err := client.CreateUserWithOrgs(ctx, codersdk.CreateUserRequestWithOrgs{ Email: "test+user-@coder.com", Username: "user", Password: password, @@ -317,7 +317,7 @@ func TestDeleteUser(t *testing.T) { err := client.DeleteUser(context.Background(), another.ID) require.NoError(t, err) // Attempt to create a user with the same email and username, and delete them again. - another, err = client.CreateUser(context.Background(), codersdk.CreateUserRequest{ + another, err = client.CreateUserWithOrgs(context.Background(), codersdk.CreateUserRequestWithOrgs{ Email: another.Email, Username: another.Username, Password: "SomeSecurePassword!", @@ -415,7 +415,7 @@ func TestNotifyUserStatusChanged(t *testing.T) { _, userAdmin := coderdtest.CreateAnotherUser(t, adminClient, firstUser.OrganizationID, rbac.RoleUserAdmin()) - member, err := adminClient.CreateUser(ctx, codersdk.CreateUserRequest{ + member, err := adminClient.CreateUserWithOrgs(ctx, codersdk.CreateUserRequestWithOrgs{ OrganizationIDs: []uuid.UUID{firstUser.OrganizationID}, Email: "another@user.org", Username: "someone-else", @@ -452,7 +452,7 @@ func TestNotifyUserStatusChanged(t *testing.T) { _, userAdmin := coderdtest.CreateAnotherUser(t, adminClient, firstUser.OrganizationID, rbac.RoleUserAdmin()) - member, err := adminClient.CreateUser(ctx, codersdk.CreateUserRequest{ + member, err := adminClient.CreateUserWithOrgs(ctx, codersdk.CreateUserRequestWithOrgs{ OrganizationIDs: []uuid.UUID{firstUser.OrganizationID}, Email: "another@user.org", Username: "someone-else", @@ -494,7 +494,7 @@ func TestNotifyDeletedUser(t *testing.T) { ctx, cancel := context.WithTimeout(context.Background(), testutil.WaitLong) defer cancel() - user, err := adminClient.CreateUser(ctx, codersdk.CreateUserRequest{ + user, err := adminClient.CreateUserWithOrgs(ctx, codersdk.CreateUserRequestWithOrgs{ OrganizationIDs: []uuid.UUID{firstUser.OrganizationID}, Email: "another@user.org", Username: "someone-else", @@ -530,7 +530,7 @@ func TestNotifyDeletedUser(t *testing.T) { _, userAdmin := coderdtest.CreateAnotherUser(t, adminClient, firstUser.OrganizationID, rbac.RoleUserAdmin()) - member, err := adminClient.CreateUser(ctx, codersdk.CreateUserRequest{ + member, err := adminClient.CreateUserWithOrgs(ctx, codersdk.CreateUserRequestWithOrgs{ OrganizationIDs: []uuid.UUID{firstUser.OrganizationID}, Email: "another@user.org", Username: "someone-else", @@ -625,7 +625,7 @@ func TestPostUsers(t *testing.T) { ctx, cancel := context.WithTimeout(context.Background(), testutil.WaitLong) defer cancel() - _, err := client.CreateUser(ctx, codersdk.CreateUserRequest{}) + _, err := client.CreateUserWithOrgs(ctx, codersdk.CreateUserRequestWithOrgs{}) require.Error(t, err) }) @@ -639,7 +639,7 @@ func TestPostUsers(t *testing.T) { me, err := client.User(ctx, codersdk.Me) require.NoError(t, err) - _, err = client.CreateUser(ctx, codersdk.CreateUserRequest{ + _, err = client.CreateUserWithOrgs(ctx, codersdk.CreateUserRequestWithOrgs{ Email: me.Email, Username: me.Username, Password: "MySecurePassword!", @@ -658,7 +658,7 @@ func TestPostUsers(t *testing.T) { ctx, cancel := context.WithTimeout(context.Background(), testutil.WaitLong) defer cancel() - _, err := client.CreateUser(ctx, codersdk.CreateUserRequest{ + _, err := client.CreateUserWithOrgs(ctx, codersdk.CreateUserRequestWithOrgs{ OrganizationIDs: []uuid.UUID{uuid.New()}, Email: "another@user.org", Username: "someone-else", @@ -682,7 +682,7 @@ func TestPostUsers(t *testing.T) { ctx, cancel := context.WithTimeout(context.Background(), testutil.WaitLong) defer cancel() - user, err := client.CreateUser(ctx, codersdk.CreateUserRequest{ + user, err := client.CreateUserWithOrgs(ctx, codersdk.CreateUserRequestWithOrgs{ OrganizationIDs: []uuid.UUID{firstUser.OrganizationID}, Email: "another@user.org", Username: "someone-else", @@ -735,7 +735,7 @@ func TestPostUsers(t *testing.T) { ctx, cancel := context.WithTimeout(context.Background(), testutil.WaitLong) defer cancel() - user, err := client.CreateUser(ctx, codersdk.CreateUserRequest{ + user, err := client.CreateUserWithOrgs(ctx, codersdk.CreateUserRequestWithOrgs{ OrganizationIDs: []uuid.UUID{first.OrganizationID}, Email: "another@user.org", Username: "someone-else", @@ -767,7 +767,7 @@ func TestPostUsers(t *testing.T) { ctx, cancel := context.WithTimeout(context.Background(), testutil.WaitLong) defer cancel() - _, err := client.CreateUser(ctx, codersdk.CreateUserRequest{ + _, err := client.CreateUserWithOrgs(ctx, codersdk.CreateUserRequestWithOrgs{ OrganizationIDs: []uuid.UUID{first.OrganizationID}, Email: email, Username: "someone-else", @@ -804,7 +804,7 @@ func TestNotifyCreatedUser(t *testing.T) { defer cancel() // when - user, err := adminClient.CreateUser(ctx, codersdk.CreateUserRequest{ + user, err := adminClient.CreateUserWithOrgs(ctx, codersdk.CreateUserRequestWithOrgs{ OrganizationIDs: []uuid.UUID{firstUser.OrganizationID}, Email: "another@user.org", Username: "someone-else", @@ -833,7 +833,7 @@ func TestNotifyCreatedUser(t *testing.T) { ctx, cancel := context.WithTimeout(context.Background(), testutil.WaitLong) defer cancel() - userAdmin, err := adminClient.CreateUser(ctx, codersdk.CreateUserRequest{ + userAdmin, err := adminClient.CreateUserWithOrgs(ctx, codersdk.CreateUserRequestWithOrgs{ OrganizationIDs: []uuid.UUID{firstUser.OrganizationID}, Email: "user-admin@user.org", Username: "mr-user-admin", @@ -849,7 +849,7 @@ func TestNotifyCreatedUser(t *testing.T) { require.NoError(t, err) // when - member, err := adminClient.CreateUser(ctx, codersdk.CreateUserRequest{ + member, err := adminClient.CreateUserWithOrgs(ctx, codersdk.CreateUserRequestWithOrgs{ OrganizationIDs: []uuid.UUID{firstUser.OrganizationID}, Email: "another@user.org", Username: "someone-else", @@ -908,7 +908,7 @@ func TestUpdateUserProfile(t *testing.T) { ctx, cancel := context.WithTimeout(context.Background(), testutil.WaitLong) defer cancel() - existentUser, err := client.CreateUser(ctx, codersdk.CreateUserRequest{ + existentUser, err := client.CreateUserWithOrgs(ctx, codersdk.CreateUserRequestWithOrgs{ Email: "bruno@coder.com", Username: "bruno", Password: "SomeSecurePassword!", @@ -990,7 +990,7 @@ func TestUpdateUserProfile(t *testing.T) { ctx, cancel := context.WithTimeout(context.Background(), testutil.WaitLong) defer cancel() - _, err := client.CreateUser(ctx, codersdk.CreateUserRequest{ + _, err := client.CreateUserWithOrgs(ctx, codersdk.CreateUserRequestWithOrgs{ Email: "john@coder.com", Username: "john", Password: "SomeSecurePassword!", @@ -1032,7 +1032,7 @@ func TestUpdateUserPassword(t *testing.T) { ctx, cancel := context.WithTimeout(context.Background(), testutil.WaitLong) defer cancel() - member, err := client.CreateUser(ctx, codersdk.CreateUserRequest{ + member, err := client.CreateUserWithOrgs(ctx, codersdk.CreateUserRequestWithOrgs{ Email: "coder@coder.com", Username: "coder", Password: "SomeStrongPassword!", @@ -1293,7 +1293,7 @@ func TestActivateDormantUser(t *testing.T) { me := coderdtest.CreateFirstUser(t, client) ctx, cancel := context.WithTimeout(context.Background(), testutil.WaitLong) defer cancel() - anotherUser, err := client.CreateUser(ctx, codersdk.CreateUserRequest{ + anotherUser, err := client.CreateUserWithOrgs(ctx, codersdk.CreateUserRequestWithOrgs{ Email: "coder@coder.com", Username: "coder", Password: "SomeStrongPassword!", @@ -1600,7 +1600,7 @@ func TestGetUsers(t *testing.T) { ctx, cancel := context.WithTimeout(context.Background(), testutil.WaitLong) defer cancel() - client.CreateUser(ctx, codersdk.CreateUserRequest{ + client.CreateUserWithOrgs(ctx, codersdk.CreateUserRequestWithOrgs{ Email: "alice@email.com", Username: "alice", Password: "MySecurePassword!", @@ -1626,7 +1626,7 @@ func TestGetUsers(t *testing.T) { active = append(active, firstUser) // Alice will be suspended - alice, err := client.CreateUser(ctx, codersdk.CreateUserRequest{ + alice, err := client.CreateUserWithOrgs(ctx, codersdk.CreateUserRequestWithOrgs{ Email: "alice@email.com", Username: "alice", Password: "MySecurePassword!", @@ -1638,7 +1638,7 @@ func TestGetUsers(t *testing.T) { require.NoError(t, err) // Tom will be active - tom, err := client.CreateUser(ctx, codersdk.CreateUserRequest{ + tom, err := client.CreateUserWithOrgs(ctx, codersdk.CreateUserRequestWithOrgs{ Email: "tom@email.com", Username: "tom", Password: "MySecurePassword!", @@ -1669,7 +1669,7 @@ func TestGetUsersPagination(t *testing.T) { _, err := client.User(ctx, first.UserID.String()) require.NoError(t, err, "") - _, err = client.CreateUser(ctx, codersdk.CreateUserRequest{ + _, err = client.CreateUserWithOrgs(ctx, codersdk.CreateUserRequestWithOrgs{ Email: "alice@email.com", Username: "alice", Password: "MySecurePassword!", @@ -1750,7 +1750,7 @@ func TestWorkspacesByUser(t *testing.T) { ctx, cancel := context.WithTimeout(context.Background(), testutil.WaitLong) defer cancel() - newUser, err := client.CreateUser(ctx, codersdk.CreateUserRequest{ + newUser, err := client.CreateUserWithOrgs(ctx, codersdk.CreateUserRequestWithOrgs{ Email: "test@coder.com", Username: "someone", Password: "MySecurePassword!", @@ -1790,7 +1790,7 @@ func TestDormantUser(t *testing.T) { defer cancel() // Create a new user - newUser, err := client.CreateUser(ctx, codersdk.CreateUserRequest{ + newUser, err := client.CreateUserWithOrgs(ctx, codersdk.CreateUserRequestWithOrgs{ Email: "test@coder.com", Username: "someone", Password: "MySecurePassword!", @@ -1841,7 +1841,7 @@ func TestSuspendedPagination(t *testing.T) { for i := 0; i < total; i++ { email := fmt.Sprintf("%d@coder.com", i) username := fmt.Sprintf("user%d", i) - user, err := client.CreateUser(ctx, codersdk.CreateUserRequest{ + user, err := client.CreateUserWithOrgs(ctx, codersdk.CreateUserRequestWithOrgs{ Email: email, Username: username, Password: "MySecurePassword!", diff --git a/coderd/workspaceapps/apptest/apptest.go b/coderd/workspaceapps/apptest/apptest.go index 33643f2299568..14adf2d61d362 100644 --- a/coderd/workspaceapps/apptest/apptest.go +++ b/coderd/workspaceapps/apptest/apptest.go @@ -1206,7 +1206,7 @@ func Run(t *testing.T, appHostIsPrimary bool, factory DeploymentFactory) { // Create a template-admin user in the same org. We don't use an owner // since they have access to everything. ownerClient = appDetails.SDKClient - user, err := ownerClient.CreateUser(ctx, codersdk.CreateUserRequest{ + user, err := ownerClient.CreateUserWithOrgs(ctx, codersdk.CreateUserRequestWithOrgs{ Email: "user@coder.com", Username: "user", Password: password, @@ -1258,7 +1258,7 @@ func Run(t *testing.T, appHostIsPrimary bool, factory DeploymentFactory) { Name: "a-different-org", }) require.NoError(t, err) - userInOtherOrg, err := ownerClient.CreateUser(ctx, codersdk.CreateUserRequest{ + userInOtherOrg, err := ownerClient.CreateUserWithOrgs(ctx, codersdk.CreateUserRequestWithOrgs{ Email: "no-template-access@coder.com", Username: "no-template-access", Password: password, diff --git a/coderd/workspaces_test.go b/coderd/workspaces_test.go index ec7c03dd53013..98f36c3b9a13e 100644 --- a/coderd/workspaces_test.go +++ b/coderd/workspaces_test.go @@ -451,7 +451,7 @@ func TestWorkspacesSortOrder(t *testing.T) { client, db := coderdtest.NewWithDatabase(t, nil) firstUser := coderdtest.CreateFirstUser(t, client) - secondUserClient, secondUser := coderdtest.CreateAnotherUserMutators(t, client, firstUser.OrganizationID, []rbac.RoleIdentifier{rbac.RoleOwner()}, func(r *codersdk.CreateUserRequest) { + secondUserClient, secondUser := coderdtest.CreateAnotherUserMutators(t, client, firstUser.OrganizationID, []rbac.RoleIdentifier{rbac.RoleOwner()}, func(r *codersdk.CreateUserRequestWithOrgs) { r.Username = "zzz" }) diff --git a/codersdk/users.go b/codersdk/users.go index e0363a24795a2..4e231a30700b8 100644 --- a/codersdk/users.go +++ b/codersdk/users.go @@ -113,6 +113,7 @@ type CreateFirstUserResponse struct { OrganizationID uuid.UUID `json:"organization_id" format:"uuid"` } +// CreateUserRequest is deprecated, use CreateUserRequestWithOrgs type CreateUserRequest struct { Email string `json:"email" validate:"required,email" format:"email"` Username string `json:"username" validate:"required,username"` @@ -123,7 +124,17 @@ type CreateUserRequest struct { // DisableLogin sets the user's login type to 'none'. This prevents the user // from being able to use a password or any other authentication method to login. // Deprecated: Set UserLoginType=LoginTypeDisabled instead. - DisableLogin bool `json:"disable_login"` + DisableLogin bool `json:"disable_login"` + OrganizationID uuid.UUID `json:"organization_id" validate:"" format:"uuid"` +} + +type CreateUserRequestWithOrgs struct { + Email string `json:"email" validate:"required,email" format:"email"` + Username string `json:"username" validate:"required,username"` + Name string `json:"name" validate:"user_real_name"` + Password string `json:"password"` + // UserLoginType defaults to LoginTypePassword. + UserLoginType LoginType `json:"login_type"` // OrganizationIDs is a list of organization IDs that the user should be a member of. OrganizationIDs []uuid.UUID `json:"organization_ids" validate:"" format:"uuid"` } @@ -136,10 +147,10 @@ type CreateUserRequest struct { // TODO: Remove this method in it's entirety after some period of time. // This will be released in v1.16.0, and is associated with the multiple orgs // feature. -func (r *CreateUserRequest) UnmarshalJSON(data []byte) error { +func (r *CreateUserRequestWithOrgs) UnmarshalJSON(data []byte) error { // By using a type alias, we prevent an infinite recursion when unmarshalling. // This allows us to use the default unmarshal behavior of the original type. - type AliasedReq CreateUserRequest + type AliasedReq CreateUserRequestWithOrgs type DeprecatedCreateUserRequest struct { AliasedReq OrganizationID *uuid.UUID `json:"organization_id" format:"uuid"` @@ -149,7 +160,7 @@ func (r *CreateUserRequest) UnmarshalJSON(data []byte) error { if err != nil { return err } - *r = CreateUserRequest(dep.AliasedReq) + *r = CreateUserRequestWithOrgs(dep.AliasedReq) if dep.OrganizationID != nil { r.OrganizationIDs = append(r.OrganizationIDs, *dep.OrganizationID) } @@ -317,8 +328,26 @@ func (c *Client) CreateFirstUser(ctx context.Context, req CreateFirstUserRequest return resp, json.NewDecoder(res.Body).Decode(&resp) } -// CreateUser creates a new user. +// CreateUser +// Deprecated: Use CreateUserWithOrgs instead. This will be removed. +// TODO: When removing, we should rename CreateUserWithOrgs -> CreateUser +// with an alias of CreateUserWithOrgs. func (c *Client) CreateUser(ctx context.Context, req CreateUserRequest) (User, error) { + if req.DisableLogin { + req.UserLoginType = LoginTypeNone + } + return c.CreateUserWithOrgs(ctx, CreateUserRequestWithOrgs{ + Email: req.Email, + Username: req.Username, + Name: req.Name, + Password: req.Password, + UserLoginType: req.UserLoginType, + OrganizationIDs: []uuid.UUID{req.OrganizationID}, + }) +} + +// CreateUserWithOrgs creates a new user. +func (c *Client) CreateUserWithOrgs(ctx context.Context, req CreateUserRequestWithOrgs) (User, error) { res, err := c.Request(ctx, http.MethodPost, "/api/v2/users", req) if err != nil { return User{}, err diff --git a/codersdk/users_test.go b/codersdk/users_test.go index 52dfd296f3c4e..8d0cca2577439 100644 --- a/codersdk/users_test.go +++ b/codersdk/users_test.go @@ -28,7 +28,7 @@ func TestDeprecatedCreateUserRequest(t *testing.T) { "login_type":"none" } ` - var req codersdk.CreateUserRequest + var req codersdk.CreateUserRequestWithOrgs err := json.Unmarshal([]byte(input), &req) require.NoError(t, err) require.Equal(t, req.Email, "alice@coder.com") @@ -54,7 +54,7 @@ func TestDeprecatedCreateUserRequest(t *testing.T) { "login_type":"none" } ` - var req codersdk.CreateUserRequest + var req codersdk.CreateUserRequestWithOrgs err := json.Unmarshal([]byte(input), &req) require.NoError(t, err) require.Equal(t, req.Email, "alice@coder.com") @@ -84,7 +84,7 @@ func TestDeprecatedCreateUserRequest(t *testing.T) { "login_type":"none" } ` - var req codersdk.CreateUserRequest + var req codersdk.CreateUserRequestWithOrgs err := json.Unmarshal([]byte(input), &req) require.NoError(t, err) @@ -95,11 +95,11 @@ func TestDeprecatedCreateUserRequest(t *testing.T) { func TestCreateUserRequestJSON(t *testing.T) { t.Parallel() - marshalTest := func(t *testing.T, req codersdk.CreateUserRequest) { + marshalTest := func(t *testing.T, req codersdk.CreateUserRequestWithOrgs) { t.Helper() data, err := json.Marshal(req) require.NoError(t, err) - var req2 codersdk.CreateUserRequest + var req2 codersdk.CreateUserRequestWithOrgs err = json.Unmarshal(data, &req2) require.NoError(t, err) require.Equal(t, req, req2) @@ -108,7 +108,7 @@ func TestCreateUserRequestJSON(t *testing.T) { t.Run("MultipleOrganizations", func(t *testing.T) { t.Parallel() - req := codersdk.CreateUserRequest{ + req := codersdk.CreateUserRequestWithOrgs{ Email: coderdtest.RandomName(t), Username: coderdtest.RandomName(t), Name: coderdtest.RandomName(t), @@ -123,7 +123,7 @@ func TestCreateUserRequestJSON(t *testing.T) { t.Run("SingleOrganization", func(t *testing.T) { t.Parallel() - req := codersdk.CreateUserRequest{ + req := codersdk.CreateUserRequestWithOrgs{ Email: coderdtest.RandomName(t), Username: coderdtest.RandomName(t), Name: coderdtest.RandomName(t), @@ -138,7 +138,7 @@ func TestCreateUserRequestJSON(t *testing.T) { t.Run("NoOrganization", func(t *testing.T) { t.Parallel() - req := codersdk.CreateUserRequest{ + req := codersdk.CreateUserRequestWithOrgs{ Email: coderdtest.RandomName(t), Username: coderdtest.RandomName(t), Name: coderdtest.RandomName(t), diff --git a/docs/reference/api/schemas.md b/docs/reference/api/schemas.md index 6b62faee8382d..e3a09df883001 100644 --- a/docs/reference/api/schemas.md +++ b/docs/reference/api/schemas.md @@ -1284,11 +1284,10 @@ AuthorizationObject can represent a "set" of objects, such as: all workspaces in | `scope` | `all` | | `scope` | `application_connect` | -## codersdk.CreateUserRequest +## codersdk.CreateUserRequestWithOrgs ```json { - "disable_login": true, "email": "user@example.com", "login_type": "", "name": "string", @@ -1300,15 +1299,14 @@ AuthorizationObject can represent a "set" of objects, such as: all workspaces in ### Properties -| Name | Type | Required | Restrictions | Description | -| ------------------ | ---------------------------------------- | -------- | ------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| `disable_login` | boolean | false | | Disable login sets the user's login type to 'none'. This prevents the user from being able to use a password or any other authentication method to login. Deprecated: Set UserLoginType=LoginTypeDisabled instead. | -| `email` | string | true | | | -| `login_type` | [codersdk.LoginType](#codersdklogintype) | false | | Login type defaults to LoginTypePassword. | -| `name` | string | false | | | -| `organization_ids` | array of string | false | | Organization ids is a list of organization IDs that the user should be a member of. | -| `password` | string | false | | | -| `username` | string | true | | | +| Name | Type | Required | Restrictions | Description | +| ------------------ | ---------------------------------------- | -------- | ------------ | ----------------------------------------------------------------------------------- | +| `email` | string | true | | | +| `login_type` | [codersdk.LoginType](#codersdklogintype) | false | | Login type defaults to LoginTypePassword. | +| `name` | string | false | | | +| `organization_ids` | array of string | false | | Organization ids is a list of organization IDs that the user should be a member of. | +| `password` | string | false | | | +| `username` | string | true | | | ## codersdk.CreateWorkspaceBuildRequest diff --git a/docs/reference/api/users.md b/docs/reference/api/users.md index 1377a658842cb..3979f5521b377 100644 --- a/docs/reference/api/users.md +++ b/docs/reference/api/users.md @@ -81,7 +81,6 @@ curl -X POST http://coder-server:8080/api/v2/users \ ```json { - "disable_login": true, "email": "user@example.com", "login_type": "", "name": "string", @@ -93,9 +92,9 @@ curl -X POST http://coder-server:8080/api/v2/users \ ### Parameters -| Name | In | Type | Required | Description | -| ------ | ---- | ------------------------------------------------------------------ | -------- | ------------------- | -| `body` | body | [codersdk.CreateUserRequest](schemas.md#codersdkcreateuserrequest) | true | Create user request | +| Name | In | Type | Required | Description | +| ------ | ---- | ---------------------------------------------------------------------------------- | -------- | ------------------- | +| `body` | body | [codersdk.CreateUserRequestWithOrgs](schemas.md#codersdkcreateuserrequestwithorgs) | true | Create user request | ### Example responses diff --git a/enterprise/coderd/groups_test.go b/enterprise/coderd/groups_test.go index 0c530114a98a9..1bd5bb8249b58 100644 --- a/enterprise/coderd/groups_test.go +++ b/enterprise/coderd/groups_test.go @@ -757,7 +757,7 @@ func TestGroup(t *testing.T) { require.Contains(t, group.Members, user2.ReducedUser) // cannot explicitly set a dormant user status so must create a new user - anotherUser, err := userAdminClient.CreateUser(ctx, codersdk.CreateUserRequest{ + anotherUser, err := userAdminClient.CreateUserWithOrgs(ctx, codersdk.CreateUserRequestWithOrgs{ Email: "coder@coder.com", Username: "coder", Password: "SomeStrongPassword!", diff --git a/enterprise/coderd/scim.go b/enterprise/coderd/scim.go index b4eb64f1b7f8c..9ac9307ce2d12 100644 --- a/enterprise/coderd/scim.go +++ b/enterprise/coderd/scim.go @@ -233,7 +233,7 @@ func (api *API) scimPostUser(rw http.ResponseWriter, r *http.Request) { //nolint:gocritic // needed for SCIM dbUser, err = api.AGPL.CreateUser(dbauthz.AsSystemRestricted(ctx), api.Database, agpl.CreateUserRequest{ - CreateUserRequest: codersdk.CreateUserRequest{ + CreateUserRequestWithOrgs: codersdk.CreateUserRequestWithOrgs{ Username: sUser.UserName, Email: email, OrganizationIDs: []uuid.UUID{defaultOrganization.ID}, diff --git a/enterprise/coderd/userauth_test.go b/enterprise/coderd/userauth_test.go index 1f62235e5eb41..e5ca9c9180290 100644 --- a/enterprise/coderd/userauth_test.go +++ b/enterprise/coderd/userauth_test.go @@ -717,7 +717,7 @@ func TestEnterpriseUserLogin(t *testing.T) { Name: customRole.Name, OrganizationID: owner.OrganizationID, }, - }, func(r *codersdk.CreateUserRequest) { + }, func(r *codersdk.CreateUserRequestWithOrgs) { r.Password = "SomeSecurePassword!" r.UserLoginType = codersdk.LoginTypePassword }) @@ -752,7 +752,7 @@ func TestEnterpriseUserLogin(t *testing.T) { }, }) - anotherClient, anotherUser := coderdtest.CreateAnotherUserMutators(t, ownerClient, owner.OrganizationID, nil, func(r *codersdk.CreateUserRequest) { + anotherClient, anotherUser := coderdtest.CreateAnotherUserMutators(t, ownerClient, owner.OrganizationID, nil, func(r *codersdk.CreateUserRequestWithOrgs) { r.Password = "SomeSecurePassword!" r.UserLoginType = codersdk.LoginTypePassword }) diff --git a/enterprise/coderd/users_test.go b/enterprise/coderd/users_test.go index b8c5b786bc5c5..54f2c8d0d3460 100644 --- a/enterprise/coderd/users_test.go +++ b/enterprise/coderd/users_test.go @@ -508,7 +508,7 @@ func TestEnterprisePostUser(t *testing.T) { request.Name = "another" }) - _, err := notInOrg.CreateUser(ctx, codersdk.CreateUserRequest{ + _, err := notInOrg.CreateUserWithOrgs(ctx, codersdk.CreateUserRequestWithOrgs{ Email: "some@domain.com", Username: "anotheruser", Password: "SomeSecurePassword!", @@ -542,7 +542,7 @@ func TestEnterprisePostUser(t *testing.T) { org := coderdenttest.CreateOrganization(t, other, coderdenttest.CreateOrganizationOptions{}) - _, err := notInOrg.CreateUser(ctx, codersdk.CreateUserRequest{ + _, err := notInOrg.CreateUserWithOrgs(ctx, codersdk.CreateUserRequestWithOrgs{ Email: "some@domain.com", Username: "anotheruser", Password: "SomeSecurePassword!", @@ -577,7 +577,7 @@ func TestEnterprisePostUser(t *testing.T) { // nolint:gocritic // intentional using the owner. // Manually making a user with the request instead of the coderdtest util - _, err := client.CreateUser(ctx, codersdk.CreateUserRequest{ + _, err := client.CreateUserWithOrgs(ctx, codersdk.CreateUserRequestWithOrgs{ Email: "another@user.org", Username: "someone-else", Password: "SomeSecurePassword!", @@ -610,7 +610,7 @@ func TestEnterprisePostUser(t *testing.T) { // nolint:gocritic // intentional using the owner. // Manually making a user with the request instead of the coderdtest util - user, err := client.CreateUser(ctx, codersdk.CreateUserRequest{ + user, err := client.CreateUserWithOrgs(ctx, codersdk.CreateUserRequestWithOrgs{ Email: "another@user.org", Username: "someone-else", Password: "SomeSecurePassword!", diff --git a/scaletest/createworkspaces/run.go b/scaletest/createworkspaces/run.go index 5d67ec28858f7..b31091f4984a1 100644 --- a/scaletest/createworkspaces/run.go +++ b/scaletest/createworkspaces/run.go @@ -72,7 +72,7 @@ func (r *Runner) Run(ctx context.Context, id string, logs io.Writer) error { _, _ = fmt.Fprintln(logs, "Creating user:") - user, err = r.client.CreateUser(ctx, codersdk.CreateUserRequest{ + user, err = r.client.CreateUserWithOrgs(ctx, codersdk.CreateUserRequestWithOrgs{ OrganizationIDs: []uuid.UUID{r.cfg.User.OrganizationID}, Username: r.cfg.User.Username, Email: r.cfg.User.Email, diff --git a/site/src/api/typesGenerated.ts b/site/src/api/typesGenerated.ts index 670443e9897be..12a563ce4fb1b 100644 --- a/site/src/api/typesGenerated.ts +++ b/site/src/api/typesGenerated.ts @@ -310,6 +310,16 @@ export interface CreateUserRequest { readonly password: string; readonly login_type: LoginType; readonly disable_login: boolean; + readonly organization_id: string; +} + +// From codersdk/users.go +export interface CreateUserRequestWithOrgs { + readonly email: string; + readonly username: string; + readonly name: string; + readonly password: string; + readonly login_type: LoginType; readonly organization_ids: Readonly>; } From ff8d4f47ea9f41abff5db135b15b2e1811665b93 Mon Sep 17 00:00:00 2001 From: Steven Masley Date: Fri, 23 Aug 2024 15:11:12 -0500 Subject: [PATCH 2/4] fixup ui --- codersdk/users.go | 6 +++++- site/src/api/api.ts | 2 +- site/src/api/typesGenerated.ts | 11 ----------- site/src/pages/CreateUserPage/CreateUserForm.tsx | 9 ++++----- 4 files changed, 10 insertions(+), 18 deletions(-) diff --git a/codersdk/users.go b/codersdk/users.go index 4e231a30700b8..e35803abeb15e 100644 --- a/codersdk/users.go +++ b/codersdk/users.go @@ -113,7 +113,11 @@ type CreateFirstUserResponse struct { OrganizationID uuid.UUID `json:"organization_id" format:"uuid"` } -// CreateUserRequest is deprecated, use CreateUserRequestWithOrgs +// CreateUserRequest +// Deprecated: Use CreateUserRequestWithOrgs instead. This will be removed. +// TODO: When removing, we should rename CreateUserRequestWithOrgs -> CreateUserRequest +// Then alias CreateUserRequestWithOrgs to CreateUserRequest. +// @typescript-ignore CreateUserRequest type CreateUserRequest struct { Email string `json:"email" validate:"required,email" format:"email"` Username string `json:"username" validate:"required,username"` diff --git a/site/src/api/api.ts b/site/src/api/api.ts index 456607bf3d6cb..4c4abdc5b75c9 100644 --- a/site/src/api/api.ts +++ b/site/src/api/api.ts @@ -1130,7 +1130,7 @@ class ApiMethods { }; createUser = async ( - user: TypesGen.CreateUserRequest, + user: TypesGen.CreateUserRequestWithOrgs, ): Promise => { const response = await this.axios.post( "/api/v2/users", diff --git a/site/src/api/typesGenerated.ts b/site/src/api/typesGenerated.ts index 12a563ce4fb1b..5a27898ec3068 100644 --- a/site/src/api/typesGenerated.ts +++ b/site/src/api/typesGenerated.ts @@ -302,17 +302,6 @@ export interface CreateTokenRequest { readonly token_name: string; } -// From codersdk/users.go -export interface CreateUserRequest { - readonly email: string; - readonly username: string; - readonly name: string; - readonly password: string; - readonly login_type: LoginType; - readonly disable_login: boolean; - readonly organization_id: string; -} - // From codersdk/users.go export interface CreateUserRequestWithOrgs { readonly email: string; diff --git a/site/src/pages/CreateUserPage/CreateUserForm.tsx b/site/src/pages/CreateUserPage/CreateUserForm.tsx index 114fb81179882..635c26387c00c 100644 --- a/site/src/pages/CreateUserPage/CreateUserForm.tsx +++ b/site/src/pages/CreateUserPage/CreateUserForm.tsx @@ -61,7 +61,7 @@ export const authMethodLanguage = { }; export interface CreateUserFormProps { - onSubmit: (user: TypesGen.CreateUserRequest) => void; + onSubmit: (user: TypesGen.CreateUserRequestWithOrgs) => void; onCancel: () => void; error?: unknown; isLoading: boolean; @@ -86,21 +86,20 @@ const validationSchema = Yup.object({ export const CreateUserForm: FC< React.PropsWithChildren > = ({ onSubmit, onCancel, error, isLoading, authMethods }) => { - const form: FormikContextType = - useFormik({ + const form: FormikContextType = + useFormik({ initialValues: { email: "", password: "", username: "", name: "", organization_ids: ["00000000-0000-0000-0000-000000000000"], - disable_login: false, login_type: "", }, validationSchema, onSubmit, }); - const getFieldHelpers = getFormHelpers( + const getFieldHelpers = getFormHelpers( form, error, ); From d303330b9d801b7471fe8e203730c78ff0a370e3 Mon Sep 17 00:00:00 2001 From: Steven Masley Date: Fri, 23 Aug 2024 15:22:10 -0500 Subject: [PATCH 3/4] remove disable login --- cli/user_delete_test.go | 4 ---- coderd/coderdtest/coderdtest.go | 2 +- coderd/userauth_test.go | 16 ---------------- codersdk/users_test.go | 3 --- 4 files changed, 1 insertion(+), 24 deletions(-) diff --git a/cli/user_delete_test.go b/cli/user_delete_test.go index 56c9ed6e51c40..e07d1e850e24d 100644 --- a/cli/user_delete_test.go +++ b/cli/user_delete_test.go @@ -33,7 +33,6 @@ func TestUserDelete(t *testing.T) { Password: pw, UserLoginType: codersdk.LoginTypePassword, OrganizationIDs: []uuid.UUID{owner.OrganizationID}, - DisableLogin: false, }) require.NoError(t, err) @@ -64,7 +63,6 @@ func TestUserDelete(t *testing.T) { Password: pw, UserLoginType: codersdk.LoginTypePassword, OrganizationIDs: []uuid.UUID{owner.OrganizationID}, - DisableLogin: false, }) require.NoError(t, err) @@ -95,7 +93,6 @@ func TestUserDelete(t *testing.T) { Password: pw, UserLoginType: codersdk.LoginTypePassword, OrganizationIDs: []uuid.UUID{owner.OrganizationID}, - DisableLogin: false, }) require.NoError(t, err) @@ -128,7 +125,6 @@ func TestUserDelete(t *testing.T) { // Password: pw, // UserLoginType: codersdk.LoginTypePassword, // OrganizationID: aUser.OrganizationID, - // DisableLogin: false, // }) // require.NoError(t, err) diff --git a/coderd/coderdtest/coderdtest.go b/coderd/coderdtest/coderdtest.go index b1397b2ce88b2..c38dd54d1d04d 100644 --- a/coderd/coderdtest/coderdtest.go +++ b/coderd/coderdtest/coderdtest.go @@ -700,7 +700,7 @@ func createAnotherUserRetry(t testing.TB, client *codersdk.Client, organizationI require.NoError(t, err) var sessionToken string - if req.DisableLogin || req.UserLoginType == codersdk.LoginTypeNone { + if req.UserLoginType == codersdk.LoginTypeNone { // Cannot log in with a disabled login user. So make it an api key from // the client making this user. token, err := client.CreateToken(context.Background(), user.ID.String(), codersdk.CreateTokenRequest{ diff --git a/coderd/userauth_test.go b/coderd/userauth_test.go index 8ae27165c4219..8603cfcfb439a 100644 --- a/coderd/userauth_test.go +++ b/coderd/userauth_test.go @@ -106,22 +106,6 @@ func TestUserLogin(t *testing.T) { require.ErrorAs(t, err, &apiErr) require.Equal(t, http.StatusUnauthorized, apiErr.StatusCode()) }) - // Password auth should fail if the user is made without password login. - t.Run("DisableLoginDeprecatedField", func(t *testing.T) { - t.Parallel() - client := coderdtest.New(t, nil) - user := coderdtest.CreateFirstUser(t, client) - anotherClient, anotherUser := coderdtest.CreateAnotherUserMutators(t, client, user.OrganizationID, nil, func(r *codersdk.CreateUserRequestWithOrgs) { - r.Password = "" - r.DisableLogin = true - }) - - _, err := anotherClient.LoginWithPassword(context.Background(), codersdk.LoginWithPasswordRequest{ - Email: anotherUser.Email, - Password: "SomeSecurePassword!", - }) - require.Error(t, err) - }) t.Run("LoginTypeNone", func(t *testing.T) { t.Parallel() diff --git a/codersdk/users_test.go b/codersdk/users_test.go index 8d0cca2577439..f1c691323bffd 100644 --- a/codersdk/users_test.go +++ b/codersdk/users_test.go @@ -114,7 +114,6 @@ func TestCreateUserRequestJSON(t *testing.T) { Name: coderdtest.RandomName(t), Password: "", UserLoginType: codersdk.LoginTypePassword, - DisableLogin: false, OrganizationIDs: []uuid.UUID{uuid.New(), uuid.New()}, } marshalTest(t, req) @@ -129,7 +128,6 @@ func TestCreateUserRequestJSON(t *testing.T) { Name: coderdtest.RandomName(t), Password: "", UserLoginType: codersdk.LoginTypePassword, - DisableLogin: false, OrganizationIDs: []uuid.UUID{uuid.New()}, } marshalTest(t, req) @@ -144,7 +142,6 @@ func TestCreateUserRequestJSON(t *testing.T) { Name: coderdtest.RandomName(t), Password: "", UserLoginType: codersdk.LoginTypePassword, - DisableLogin: false, OrganizationIDs: []uuid.UUID{}, } marshalTest(t, req) From 068549b369e2fa5927074c7ff8be14c228f498af Mon Sep 17 00:00:00 2001 From: Steven Masley Date: Fri, 23 Aug 2024 15:43:21 -0500 Subject: [PATCH 4/4] fixup ui --- site/e2e/api.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/site/e2e/api.ts b/site/e2e/api.ts index 4052510a00761..da5a57dee007d 100644 --- a/site/e2e/api.ts +++ b/site/e2e/api.ts @@ -36,7 +36,6 @@ export const createUser = async (orgId: string) => { name: name, password: "s3cure&password!", login_type: "password", - disable_login: false, organization_ids: [orgId], }); return user;