mirror of
https://github.com/coder/coder.git
synced 2025-07-03 16:13:58 +00:00
feat: Guard search queries against common mistakes (#6404)
* feat: Error on excessive invalid search keys * feat: Guard search queries against common mistakes * Raise errors in FE on workspaces table * All errors should be on newlines
This commit is contained in:
@ -966,13 +966,13 @@ func (q *fakeQuerier) GetAuthorizedWorkspaces(ctx context.Context, arg database.
|
||||
return nil, xerrors.Errorf("get provisioner job: %w", err)
|
||||
}
|
||||
|
||||
switch arg.Status {
|
||||
case "pending":
|
||||
switch database.WorkspaceStatus(arg.Status) {
|
||||
case database.WorkspaceStatusPending:
|
||||
if !job.StartedAt.Valid {
|
||||
continue
|
||||
}
|
||||
|
||||
case "starting":
|
||||
case database.WorkspaceStatusStarting:
|
||||
if !job.StartedAt.Valid &&
|
||||
!job.CanceledAt.Valid &&
|
||||
job.CompletedAt.Valid &&
|
||||
@ -981,7 +981,7 @@ func (q *fakeQuerier) GetAuthorizedWorkspaces(ctx context.Context, arg database.
|
||||
continue
|
||||
}
|
||||
|
||||
case "running":
|
||||
case database.WorkspaceStatusRunning:
|
||||
if !job.CompletedAt.Valid &&
|
||||
job.CanceledAt.Valid &&
|
||||
job.Error.Valid ||
|
||||
@ -989,7 +989,7 @@ func (q *fakeQuerier) GetAuthorizedWorkspaces(ctx context.Context, arg database.
|
||||
continue
|
||||
}
|
||||
|
||||
case "stopping":
|
||||
case database.WorkspaceStatusStopping:
|
||||
if !job.StartedAt.Valid &&
|
||||
!job.CanceledAt.Valid &&
|
||||
job.CompletedAt.Valid &&
|
||||
@ -998,7 +998,7 @@ func (q *fakeQuerier) GetAuthorizedWorkspaces(ctx context.Context, arg database.
|
||||
continue
|
||||
}
|
||||
|
||||
case "stopped":
|
||||
case database.WorkspaceStatusStopped:
|
||||
if !job.CompletedAt.Valid &&
|
||||
job.CanceledAt.Valid &&
|
||||
job.Error.Valid ||
|
||||
@ -1006,23 +1006,23 @@ func (q *fakeQuerier) GetAuthorizedWorkspaces(ctx context.Context, arg database.
|
||||
continue
|
||||
}
|
||||
|
||||
case "failed":
|
||||
case database.WorkspaceStatusFailed:
|
||||
if (!job.CanceledAt.Valid && !job.Error.Valid) ||
|
||||
(!job.CompletedAt.Valid && !job.Error.Valid) {
|
||||
continue
|
||||
}
|
||||
|
||||
case "canceling":
|
||||
case database.WorkspaceStatusCanceling:
|
||||
if !job.CanceledAt.Valid && job.CompletedAt.Valid {
|
||||
continue
|
||||
}
|
||||
|
||||
case "canceled":
|
||||
case database.WorkspaceStatusCanceled:
|
||||
if !job.CanceledAt.Valid && !job.CompletedAt.Valid {
|
||||
continue
|
||||
}
|
||||
|
||||
case "deleted":
|
||||
case database.WorkspaceStatusDeleted:
|
||||
if !job.StartedAt.Valid &&
|
||||
job.CanceledAt.Valid &&
|
||||
!job.CompletedAt.Valid &&
|
||||
@ -1031,7 +1031,7 @@ func (q *fakeQuerier) GetAuthorizedWorkspaces(ctx context.Context, arg database.
|
||||
continue
|
||||
}
|
||||
|
||||
case "deleting":
|
||||
case database.WorkspaceStatusDeleting:
|
||||
if !job.CompletedAt.Valid &&
|
||||
job.CanceledAt.Valid &&
|
||||
job.Error.Valid &&
|
||||
|
@ -7,6 +7,33 @@ import (
|
||||
"github.com/coder/coder/coderd/rbac"
|
||||
)
|
||||
|
||||
type WorkspaceStatus string
|
||||
|
||||
const (
|
||||
WorkspaceStatusPending WorkspaceStatus = "pending"
|
||||
WorkspaceStatusStarting WorkspaceStatus = "starting"
|
||||
WorkspaceStatusRunning WorkspaceStatus = "running"
|
||||
WorkspaceStatusStopping WorkspaceStatus = "stopping"
|
||||
WorkspaceStatusStopped WorkspaceStatus = "stopped"
|
||||
WorkspaceStatusFailed WorkspaceStatus = "failed"
|
||||
WorkspaceStatusCanceling WorkspaceStatus = "canceling"
|
||||
WorkspaceStatusCanceled WorkspaceStatus = "canceled"
|
||||
WorkspaceStatusDeleting WorkspaceStatus = "deleting"
|
||||
WorkspaceStatusDeleted WorkspaceStatus = "deleted"
|
||||
)
|
||||
|
||||
func (s WorkspaceStatus) Valid() bool {
|
||||
switch s {
|
||||
case WorkspaceStatusPending, WorkspaceStatusStarting, WorkspaceStatusRunning,
|
||||
WorkspaceStatusStopping, WorkspaceStatusStopped, WorkspaceStatusFailed,
|
||||
WorkspaceStatusCanceling, WorkspaceStatusCanceled, WorkspaceStatusDeleting,
|
||||
WorkspaceStatusDeleted:
|
||||
return true
|
||||
default:
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
type AuditableGroup struct {
|
||||
Group
|
||||
Members []GroupMember `json:"members"`
|
||||
|
Reference in New Issue
Block a user