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

Function ExtractWorkspaceParam

coderd/httpmw/workspaceparam.go:26–56  ·  view source on GitHub ↗

ExtractWorkspaceParam grabs a workspace from the "workspace" URL parameter.

(db database.Store)

Source from the content-addressed store, hash-verified

24
25// ExtractWorkspaceParam grabs a workspace from the "workspace" URL parameter.
26func ExtractWorkspaceParam(db database.Store) func(http.Handler) http.Handler {
27 return func(next http.Handler) http.Handler {
28 return http.HandlerFunc(func(rw http.ResponseWriter, r *http.Request) {
29 ctx := r.Context()
30 workspaceID, parsed := ParseUUIDParam(rw, r, "workspace")
31 if !parsed {
32 return
33 }
34 workspace, err := db.GetWorkspaceByID(ctx, workspaceID)
35 if httpapi.Is404Error(err) {
36 httpapi.ResourceNotFound(rw)
37 return
38 }
39 if err != nil {
40 httpapi.Write(ctx, rw, http.StatusInternalServerError, codersdk.Response{
41 Message: "Internal error fetching workspace.",
42 Detail: err.Error(),
43 })
44 return
45 }
46
47 ctx = context.WithValue(ctx, workspaceParamContextKey{}, workspace)
48
49 if rlogger := loggermw.RequestLoggerFromContext(ctx); rlogger != nil {
50 rlogger.WithFields(slog.F("workspace_name", workspace.Name))
51 }
52
53 next.ServeHTTP(rw, r.WithContext(ctx))
54 })
55 }
56}
57
58func WithWorkspaceParam(ctx context.Context, workspace database.Workspace) context.Context {
59 return context.WithValue(ctx, workspaceParamContextKey{}, workspace)

Callers 3

TestWorkspaceParamFunction · 0.92
TestWorkspaceBuildParamFunction · 0.92
NewFunction · 0.92

Calls 11

Is404ErrorFunction · 0.92
ResourceNotFoundFunction · 0.92
WriteFunction · 0.92
RequestLoggerFromContextFunction · 0.92
ParseUUIDParamFunction · 0.85
WithContextMethod · 0.80
ContextMethod · 0.65
GetWorkspaceByIDMethod · 0.65
WithFieldsMethod · 0.65
ErrorMethod · 0.45
ServeHTTPMethod · 0.45

Tested by 2

TestWorkspaceParamFunction · 0.74
TestWorkspaceBuildParamFunction · 0.74