From 407fbd4a6ffb5b28d6f24ca467f78ad844e8ebe8 Mon Sep 17 00:00:00 2001 From: kylecarbs Date: Tue, 10 May 2022 03:00:03 +0000 Subject: [PATCH] fix: Use proper endpoint for user workspaces This was a silly mistake in a prior PR, so the code wasn't actually being called! --- coderd/coderd.go | 2 +- coderd/database/databasefake/databasefake.go | 8 +----- coderd/users.go | 28 +++++++++++++++++--- 3 files changed, 27 insertions(+), 11 deletions(-) diff --git a/coderd/coderd.go b/coderd/coderd.go index 9113ede221d05..67e7b0eaeae3f 100644 --- a/coderd/coderd.go +++ b/coderd/coderd.go @@ -258,7 +258,7 @@ func New(options *Options) (http.Handler, func()) { }) r.Get("/gitsshkey", api.gitSSHKey) r.Put("/gitsshkey", api.regenerateGitSSHKey) - r.Get("/workspaces", api.workspacesByOwner) + r.Get("/workspaces", api.workspacesByUser) }) }) }) diff --git a/coderd/database/databasefake/databasefake.go b/coderd/database/databasefake/databasefake.go index 825d287b6cbc9..850f5605a4ea4 100644 --- a/coderd/database/databasefake/databasefake.go +++ b/coderd/database/databasefake/databasefake.go @@ -485,7 +485,7 @@ func (q *fakeQuerier) GetWorkspacesByOrganizationIDs(_ context.Context, req data workspaces := make([]database.Workspace, 0) for _, workspace := range q.workspaces { for _, id := range req.Ids { - if workspace.ID != id { + if workspace.OrganizationID != id { continue } if workspace.Deleted != req.Deleted { @@ -494,9 +494,6 @@ func (q *fakeQuerier) GetWorkspacesByOrganizationIDs(_ context.Context, req data workspaces = append(workspaces, workspace) } } - if len(workspaces) == 0 { - return nil, sql.ErrNoRows - } return workspaces, nil } @@ -514,9 +511,6 @@ func (q *fakeQuerier) GetWorkspacesByOwnerID(_ context.Context, req database.Get } workspaces = append(workspaces, workspace) } - if len(workspaces) == 0 { - return nil, sql.ErrNoRows - } return workspaces, nil } diff --git a/coderd/users.go b/coderd/users.go index d9e2a9a9107df..2d984c8ff9a07 100644 --- a/coderd/users.go +++ b/coderd/users.go @@ -820,7 +820,8 @@ func (api *api) workspacesByUser(rw http.ResponseWriter, r *http.Request) { organizationIDs := make([]uuid.UUID, 0) for _, organization := range organizations { err = api.Authorizer.AuthorizeByRoleName(r.Context(), user.ID.String(), roles.Roles, rbac.ActionRead, rbac.ResourceWorkspace.All().InOrg(organization.ID)) - if errors.Is(err, &rbac.UnauthorizedError{}) { + var apiErr *rbac.UnauthorizedError + if xerrors.As(err, &apiErr) { continue } if err != nil { @@ -832,7 +833,8 @@ func (api *api) workspacesByUser(rw http.ResponseWriter, r *http.Request) { organizationIDs = append(organizationIDs, organization.ID) } - workspaces, err := api.Database.GetWorkspacesByOrganizationIDs(r.Context(), database.GetWorkspacesByOrganizationIDsParams{ + workspaceIDs := map[uuid.UUID]struct{}{} + allWorkspaces, err := api.Database.GetWorkspacesByOrganizationIDs(r.Context(), database.GetWorkspacesByOrganizationIDsParams{ Ids: organizationIDs, }) if err != nil { @@ -841,7 +843,27 @@ func (api *api) workspacesByUser(rw http.ResponseWriter, r *http.Request) { }) return } - apiWorkspaces, err := convertWorkspaces(r.Context(), api.Database, workspaces) + for _, ws := range allWorkspaces { + workspaceIDs[ws.ID] = struct{}{} + } + userWorkspaces, err := api.Database.GetWorkspacesByOwnerID(r.Context(), database.GetWorkspacesByOwnerIDParams{ + OwnerID: user.ID, + }) + if err != nil { + httpapi.Write(rw, http.StatusInternalServerError, httpapi.Response{ + Message: fmt.Sprintf("get workspaces for user: %s", err), + }) + return + } + for _, ws := range userWorkspaces { + _, exists := workspaceIDs[ws.ID] + if exists { + continue + } + allWorkspaces = append(allWorkspaces, ws) + } + + apiWorkspaces, err := convertWorkspaces(r.Context(), api.Database, allWorkspaces) if err != nil { httpapi.Write(rw, http.StatusInternalServerError, httpapi.Response{ Message: fmt.Sprintf("convert workspaces: %s", err), pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy