MCPcopy Index your code
hub / github.com/coder/coder / ExtractWorkspaceResourceParam

Function ExtractWorkspaceResourceParam

coderd/httpmw/workspaceresourceparam.go:28–80  ·  view source on GitHub ↗

ExtractWorkspaceResourceParam grabs a workspace resource from the "provisionerjob" URL parameter.

(db database.Store)

Source from the content-addressed store, hash-verified

26
27// ExtractWorkspaceResourceParam grabs a workspace resource from the "provisionerjob" URL parameter.
28func ExtractWorkspaceResourceParam(db database.Store) func(http.Handler) http.Handler {
29 return func(next http.Handler) http.Handler {
30 return http.HandlerFunc(func(rw http.ResponseWriter, r *http.Request) {
31 ctx := r.Context()
32 resourceUUID, parsed := ParseUUIDParam(rw, r, "workspaceresource")
33 if !parsed {
34 return
35 }
36 resource, err := db.GetWorkspaceResourceByID(ctx, resourceUUID)
37 if errors.Is(err, sql.ErrNoRows) {
38 httpapi.Write(ctx, rw, http.StatusNotFound, codersdk.Response{
39 Message: "Resource doesn't exist with that id.",
40 })
41 return
42 }
43 if err != nil {
44 httpapi.Write(ctx, rw, http.StatusInternalServerError, codersdk.Response{
45 Message: "Internal error fetching provisioner resource.",
46 Detail: err.Error(),
47 })
48 return
49 }
50
51 job, err := db.GetProvisionerJobByID(ctx, resource.JobID)
52 if err != nil {
53 httpapi.Write(ctx, rw, http.StatusInternalServerError, codersdk.Response{
54 Message: "Internal error provisioner job.",
55 Detail: err.Error(),
56 })
57 return
58 }
59 if job.Type != database.ProvisionerJobTypeWorkspaceBuild {
60 httpapi.Write(ctx, rw, http.StatusBadRequest, codersdk.Response{
61 Message: "Workspace resources can only be fetched for builds.",
62 })
63 return
64 }
65 build, err := db.GetWorkspaceBuildByJobID(ctx, job.ID)
66 if err != nil {
67 httpapi.Write(ctx, rw, http.StatusInternalServerError, codersdk.Response{
68 Message: "Internal error workspace build.",
69 Detail: err.Error(),
70 })
71 return
72 }
73
74 ctx = context.WithValue(ctx, workspaceResourceParamContextKey{}, resource)
75 ctx = context.WithValue(ctx, workspaceBuildParamContextKey{}, build)
76 chi.RouteContext(ctx).URLParams.Add("workspace", build.WorkspaceID.String())
77 next.ServeHTTP(rw, r.WithContext(ctx))
78 })
79 }
80}

Callers 1

Calls 12

WriteFunction · 0.92
ParseUUIDParamFunction · 0.85
WithContextMethod · 0.80
ContextMethod · 0.65
GetProvisionerJobByIDMethod · 0.65
AddMethod · 0.65
IsMethod · 0.45
ErrorMethod · 0.45
StringMethod · 0.45
ServeHTTPMethod · 0.45

Tested by 1