8000 chore: new workspace view to join in owner, template, and org · coder/coder@55503d7 · GitHub
[go: up one dir, main page]

Skip to content

Commit 55503d7

Browse files
committed
chore: new workspace view to join in owner, template, and org
Previously this data was fetched via seperate queries. This caused an issue in orgs, as users are site wide scoped. So user read access was required to read another user's username. Now it is all joined into the workspace, implcitly giving read perms to some fields in related objects.
1 parent 512cbf1 commit 55503d7

File tree

27 files changed

+625
-426
lines changed
  • coderd
    • agentapi
    • audit
    • < 10000 div class="PRIVATE_TreeView-item-toggle prc-TreeView-TreeViewItemToggle-gWUdE prc-TreeView-TreeViewItemToggleHover-nEgP- prc-TreeView-TreeViewItemToggleEnd-t-AEB">
      autobuild
  • database
  • httpmw
  • prometheusmetrics
  • util/slice
  • 27 files changed

    +625
    -426
    lines changed

    coderd/activitybump_test.go

    Lines changed: 1 addition & 1 deletion
    Original file line numberDiff line numberDiff line change
    @@ -199,7 +199,7 @@ func TestWorkspaceActivityBump(t *testing.T) {
    199199
    t.Parallel()
    200200

    201201
    client, workspace, assertBumped := setupActivityTest(t)
    202-
    202+
    Access - Control - Allow - Origin
    203203
    resources := coderdtest.AwaitWorkspaceAgents(t, client, workspace.ID)
    204204
    conn, err := workspacesdk.New(client).
    205205
    DialAgent(ctx, resources[0].Agents[0].ID, &workspacesdk.DialAgentOptions{

    coderd/agentapi/api.go

    Lines changed: 3 additions & 3 deletions
    Original file line numberDiff line numberDiff line change
    @@ -106,7 +106,7 @@ func New(opts Options) *API {
    106106
    if err != nil {
    107107
    return uuid.Nil, err
    108108
    }
    109-
    return ws.Workspace.ID, nil
    109+
    return ws.ID, nil
    110110
    },
    111111
    }
    112112

    @@ -231,9 +231,9 @@ func (a *API) workspaceID(ctx context.Context, agent *database.WorkspaceAgent) (
    231231
    }
    232232

    233233
    a.mu.Lock()
    234-
    a.cachedWorkspaceID = getWorkspaceAgentByIDRow.Workspace.ID
    234+
    a.cachedWorkspaceID = getWorkspaceAgentByIDRow.ID
    235235
    a.mu.Unlock()
    236-
    return getWorkspaceAgentByIDRow.Workspace.ID, nil
    236+
    return getWorkspaceAgentByIDRow.ID, nil
    237237
    }
    238238

    239239
    func (a *API) publishWorkspaceUpdate(ctx context.Context, agent *database.WorkspaceAgent) error {

    coderd/agentapi/stats.go

    Lines changed: 1 addition & 1 deletion
    Original file line numberDiff line numberDiff line change
    @@ -50,7 +50,7 @@ func (a *StatsAPI) UpdateStats(ctx context.Context, req *agentproto.UpdateStatsR
    5050
    if err != nil {
    5151
    return nil, xerrors.Errorf("get workspace by agent ID %q: %w", workspaceAgent.ID, err)
    5252
    }
    53-
    workspace := getWorkspaceAgentByIDRow.Workspace
    53+
    workspace := getWorkspaceAgentByIDRow
    5454
    a.Log.Debug(ctx, "read stats report",
    5555
    slog.F("interval", a.AgentStatsRefreshInterval),
    5656
    slog.F("workspace_id", workspace.ID),

    coderd/audit/diff.go

    Lines changed: 1 addition & 1 deletion
    Original file line numberDiff line numberDiff line change
    @@ -12,7 +12,7 @@ type Auditable interface {
    1212
    database.Template |
    1313
    database.TemplateVersion |
    1414
    database.User |
    15-
    database.Workspace |
    15+
    database.WorkspaceTable |
    1616
    database.GitSSHKey |
    1717
    database.WorkspaceBuild |
    1818
    database.AuditableGroup |

    coderd/autobuild/lifecycle_executor.go

    Lines changed: 11 additions & 8 deletions
    Original file line numberDiff line numberDiff line change
    @@ -234,22 +234,25 @@ func (e *Executor) runOnce(t time.Time) Stats {
    234234
    // threshold for inactivity.
    235235
    if reason == database.BuildReasonDormancy {
    236236
    wsOld := ws
    237-
    ws, err = tx.UpdateWorkspaceDormantDeletingAt(e.ctx, database.UpdateWorkspaceDormantDeletingAtParams{
    237+
    wsNew, err := tx.UpdateWorkspaceDormantDeletingAt(e.ctx, database.UpdateWorkspaceDormantDeletingAtParams{
    238238
    ID: ws.ID,
    239239
    DormantAt: sql.NullTime{
    240240
    Time: dbtime.Now(),
    241241
    Valid: true,
    242242
    },
    243243
    })
    244244

    245-
    auditLog = &auditParams{
    246-
    Old: wsOld,
    247-
    New: ws,
    248-
    }
    249245
    if err != nil {
    250246
    return xerrors.Errorf("update workspace dormant deleting at: %w", err)
    251247
    }
    252248

    249+
    auditLog = &auditParams{
    250+
    Old: wsOld.WorkspaceTable(),
    251+
    New: wsNew,
    252+
    }
    253+
    // To keep the `ws` accurate without doing a sql fetch
    254+
    ws.DormantAt = wsNew.DormantAt
    255+
    253256
    shouldNotifyDormancy = true
    254257

    255258
    log.Info(e.ctx, "dormant workspace",
    @@ -510,8 +513,8 @@ func isEligibleForFailedStop(build database.WorkspaceBuild, job database.Provisi
    510513
    }
    511514

    512515
    type auditParams struct {
    513-
    Old database.Workspace
    514-
    New database.Workspace
    516+
    Old database.WorkspaceTable
    517+
    New database.WorkspaceTable
    515518
    Success bool
    516519
    }
    517520

    @@ -521,7 +524,7 @@ func auditBuild(ctx context.Context, log slog.Logger, auditor audit.Auditor, par
    521524
    status = http.StatusOK
    522525
    }
    523526

    524-
    audit.BackgroundAudit(ctx, &audit.BackgroundAuditParams[database.Workspace]{
    527+
    audit.BackgroundAudit(ctx, &audit.BackgroundAuditParams[database.WorkspaceTable]{
    525528
    Audit: auditor,
    526529
    Log: log,
    527530
    UserID: params.New.OwnerID,

    coderd/database/dbauthz/dbauthz.go

    Lines changed: 18 additions & 10 deletions
    Original file line numberDiff line numberDiff line change
    @@ -2574,7 +2574,7 @@ func (q *querier) GetWorkspaceBuildsCreatedAfter(ctx context.Context, createdAt
    25742574
    return q.db.GetWorkspaceBuildsCreatedAfter(ctx, createdAt)
    25752575
    }
    25762576

    2577-
    func (q *querier) GetWorkspaceByAgentID(ctx context.Context, agentID uuid.UUID) (database.GetWorkspaceByAgentIDRow, error) {
    2577+
    func (q *querier) GetWorkspaceByAgentID(ctx context.Context, agentID uuid.UUID) (database.Workspace, error) {
    25782578
    return fetch(q.log, q.auth, q.db.GetWorkspaceByAgentID)(ctx, agentID)
    25792579
    }
    25802580

    @@ -2719,7 +2719,7 @@ func (q *querier) GetWorkspaces(ctx context.Context, arg database.GetWorkspacesP
    27192719
    return q.db.GetAuthorizedWorkspaces(ctx, arg, prep)
    27202720
    }
    27212721

    2722-
    func (q *querier) GetWorkspacesEligibleForTransition(ctx context.Context, now time.Time) ([]database.Workspace, error) {
    2722+
    func (q *querier) GetWorkspacesEligibleForTransition(ctx context.Context, now time.Time) ([]database.WorkspaceTable, error) {
    27232723
    return q.db.GetWorkspacesEligibleForTransition(ctx, now)
    27242724
    }
    27252725

    @@ -3009,7 +3009,7 @@ func (q *querier) InsertUserLink(ctx context.Context, arg database.InsertUserLin
    30093009
    return q.db.InsertUserLink(ctx, arg)
    30103010
    }
    30113011

    3012-
    func (q *querier) InsertWorkspace(ctx context.Context, arg database.InsertWorkspaceParams) (database.Workspace, error) {
    3012+
    func (q *querier) InsertWorkspace(ctx context.Context, arg database.InsertWorkspaceParams) (database.WorkspaceTable, error) {
    30133013
    obj := rbac.ResourceWorkspace.WithOwner(arg.OwnerID.String()).InOrg(arg.OrganizationID)
    30143014
    return insert(q.log, q.auth, obj, q.db.InsertWorkspace)(ctx, arg)
    30153015
    }
    @@ -3751,9 +3751,13 @@ func (q *querier) UpdateUserStatus(ctx context.Context, arg database.UpdateUserS
    37513751
    return updateWithReturn(q.log, q.auth, fetch, q.db.UpdateUserStatus)(ctx, arg)
    37523752
    }
    37533753

    3754-
    func (q *querier) UpdateWorkspace(ctx context.Context, arg database.UpdateWorkspaceParams) (database.Workspace, error) {
    3755-
    fetch := func(ctx context.Context, arg database.UpdateWorkspaceParams) (database.Workspace, error) {
    3756-
    return q.db.GetWorkspaceByID(ctx, arg.ID)
    3754+
    func (q *querier) UpdateWorkspace(ctx context.Context, arg database.UpdateWorkspaceParams) (database.WorkspaceTable, error) {
    3755+
    fetch := func(ctx context.Context, arg database.UpdateWorkspaceParams) (database.WorkspaceTable, error) {
    3756+
    w, err := q.db.GetWorkspaceByID(ctx, arg.ID)
    3757+
    if err != nil {
    3758+
    return database.WorkspaceTable{}, err
    3759+
    }
    3760+
    return w.WorkspaceTable(), nil
    37573761
    }
    37583762
    return updateWithReturn(q.log, q.auth, fetch, q.db.UpdateWorkspace)(ctx, arg)
    37593763
    }
    @@ -3905,9 +3909,13 @@ func (q *querier) UpdateWorkspaceDeletedByID(ctx context.Context, arg database.U
    39053909
    return deleteQ(q.log, q.auth, fetch, q.db.UpdateWorkspaceDeletedByID)(ctx, arg)
    39063910
    }
    39073911

    3908-
    func (q *querier) UpdateWorkspaceDormantDeletingAt(ctx context.Context, arg database.UpdateWorkspaceDormantDeletingAtParams) (database.Workspace, error) {
    3909-
    fetch := func(ctx context.Context, arg database.UpdateWorkspaceDormantDeletingAtParams) (database.Workspace, error) {
    3910-
    return q.db.GetWorkspaceByID(ctx, arg.ID)
    3912+
    func (q *querier) UpdateWorkspaceDormantDeletingAt(ctx context.Context, arg database.UpdateWorkspaceDormantDeletingAtParams) (database.WorkspaceTable, error) {
    3913+
    fetch := func(ctx context.Context, arg database.UpdateWorkspaceDormantDeletingAtParams) (database.WorkspaceTable, error) {
    3914+
    w, err := q.db.GetWorkspaceByID(ctx, arg.ID)
    3915+
    if err != nil {
    3916+
    return database.WorkspaceTable{}, err
    3917+
    }
    3918+
    return w.WorkspaceTable(), nil
    39113919
    }
    39123920
    return updateWithReturn(q.log, q.auth, fetch, q.db.UpdateWorkspaceDormantDeletingAt)(ctx, arg)
    39133921
    }
    @@ -3940,7 +3948,7 @@ func (q *querier) UpdateWorkspaceTTL(ctx context.Context, arg database.UpdateWor
    39403948
    return update(q.log, q.auth, fetch, q.db.UpdateWorkspaceTTL)(ctx, arg)
    39413949
    }
    39423950

    3943-
    func (q *querier) UpdateWorkspacesDormantDeletingAtByTemplateID(ctx context.Context, arg database.UpdateWorkspacesDormantDeletingAtByTemplateIDParams) ([]database.Workspace, error) {
    3951+
    func (q *querier) UpdateWorkspacesDormantDeletingAtByTemplateID(ctx context.Context, arg database.UpdateWorkspacesDormantDeletingAtByTemplateIDParams) ([]database.WorkspaceTable, error) {
    39443952
    template, err := q.db.GetTemplateByID(ctx, arg.TemplateID)
    39453953
    if err != nil {
    39463954
    return nil, xerrors.Errorf("get template by id: %w", err)

    0 commit comments

    Comments
     (0)
    0