Skip to content

Commit 69da964

Browse files
committed
fix: reject invalid workspace templateVersionID
1 parent 3ddea61 commit 69da964

3 files changed

Lines changed: 22 additions & 15 deletions

File tree

internal/aggregated/convert/workspace.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package convert
22

33
import (
4+
"fmt"
45
"strconv"
56

67
aggregationv1alpha1 "github.com/coder/coder-k8s/api/aggregation/v1alpha1"
@@ -68,7 +69,7 @@ func WorkspaceCreateRequestFromK8s(
6869
obj *aggregationv1alpha1.CoderWorkspace,
6970
workspaceName string,
7071
templateID uuid.UUID,
71-
) codersdk.CreateWorkspaceRequest {
72+
) (codersdk.CreateWorkspaceRequest, error) {
7273
if obj == nil {
7374
panic("assertion failed: workspace object must not be nil")
7475
}
@@ -87,15 +88,14 @@ func WorkspaceCreateRequestFromK8s(
8788

8889
if obj.Spec.TemplateVersionID == "" {
8990
request.TemplateID = templateID
90-
return request
91+
return request, nil
9192
}
9293

9394
templateVersionID, err := uuid.Parse(obj.Spec.TemplateVersionID)
9495
if err != nil {
95-
request.TemplateID = templateID
96-
return request
96+
return codersdk.CreateWorkspaceRequest{}, fmt.Errorf("invalid templateVersionID %q: %w", obj.Spec.TemplateVersionID, err)
9797
}
9898

9999
request.TemplateVersionID = templateVersionID
100-
return request
100+
return request, nil
101101
}

internal/aggregated/convert/workspace_test.go

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -186,7 +186,10 @@ func TestWorkspaceCreateRequestFromK8s(t *testing.T) {
186186
},
187187
}
188188

189-
request := WorkspaceCreateRequestFromK8s(obj, "dev-workspace", templateID)
189+
request, err := WorkspaceCreateRequestFromK8s(obj, "dev-workspace", templateID)
190+
if err != nil {
191+
t.Fatalf("expected no error, got %v", err)
192+
}
190193
if request.Name != "dev-workspace" {
191194
t.Fatalf("expected request name dev-workspace, got %q", request.Name)
192195
}
@@ -216,7 +219,10 @@ func TestWorkspaceCreateRequestFromK8sUsesTemplateVersionID(t *testing.T) {
216219
},
217220
}
218221

219-
request := WorkspaceCreateRequestFromK8s(obj, "dev-workspace", templateID)
222+
request, err := WorkspaceCreateRequestFromK8s(obj, "dev-workspace", templateID)
223+
if err != nil {
224+
t.Fatalf("expected no error, got %v", err)
225+
}
220226
if request.TemplateVersionID != templateVersionID {
221227
t.Fatalf("expected request template version ID %q, got %q", templateVersionID, request.TemplateVersionID)
222228
}
@@ -225,7 +231,7 @@ func TestWorkspaceCreateRequestFromK8sUsesTemplateVersionID(t *testing.T) {
225231
}
226232
}
227233

228-
func TestWorkspaceCreateRequestFromK8sFallsBackToTemplateIDForInvalidTemplateVersionID(t *testing.T) {
234+
func TestWorkspaceCreateRequestFromK8sReturnsErrorForInvalidTemplateVersionID(t *testing.T) {
229235
t.Parallel()
230236

231237
templateID := uuid.New()
@@ -236,11 +242,8 @@ func TestWorkspaceCreateRequestFromK8sFallsBackToTemplateIDForInvalidTemplateVer
236242
},
237243
}
238244

239-
request := WorkspaceCreateRequestFromK8s(obj, "dev-workspace", templateID)
240-
if request.TemplateID != templateID {
241-
t.Fatalf("expected request template ID %q, got %q", templateID, request.TemplateID)
242-
}
243-
if request.TemplateVersionID != uuid.Nil {
244-
t.Fatalf("expected request template version ID %q, got %q", uuid.Nil, request.TemplateVersionID)
245+
_, err := WorkspaceCreateRequestFromK8s(obj, "dev-workspace", templateID)
246+
if err == nil {
247+
t.Fatal("expected error for invalid templateVersionID")
245248
}
246249
}

internal/aggregated/storage/workspace.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -222,7 +222,11 @@ func (s *WorkspaceStorage) Create(
222222
)
223223
}
224224

225-
request := convert.WorkspaceCreateRequestFromK8s(workspaceObj, workspaceName, template.ID)
225+
request, err := convert.WorkspaceCreateRequestFromK8s(workspaceObj, workspaceName, template.ID)
226+
if err != nil {
227+
return nil, apierrors.NewBadRequest(fmt.Sprintf("invalid workspace spec: %v", err))
228+
}
229+
226230
createdWorkspace, err := sdk.CreateUserWorkspace(ctx, userName, request)
227231
if err != nil {
228232
return nil, coder.MapCoderError(err, aggregationv1alpha1.Resource("coderworkspaces"), workspaceObj.Name)

0 commit comments

Comments
 (0)