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

Function ExtractWorkspaceProxyParam

coderd/httpmw/workspaceproxy.go:162–200  ·  view source on GitHub ↗

ExtractWorkspaceProxyParam extracts a workspace proxy from an ID/name in the {workspaceproxy} URL parameter. nolint:revive

(db database.Store, deploymentID string, fetchPrimaryProxy func(ctx context.Context) (database.WorkspaceProxy, error))

Source from the content-addressed store, hash-verified

160//
161//nolint:revive
162func ExtractWorkspaceProxyParam(db database.Store, deploymentID string, fetchPrimaryProxy func(ctx context.Context) (database.WorkspaceProxy, error)) func(http.Handler) http.Handler {
163 return func(next http.Handler) http.Handler {
164 return http.HandlerFunc(func(rw http.ResponseWriter, r *http.Request) {
165 ctx := r.Context()
166
167 proxyQuery := chi.URLParam(r, "workspaceproxy")
168 if proxyQuery == "" {
169 httpapi.Write(ctx, rw, http.StatusBadRequest, codersdk.Response{
170 Message: "\"workspaceproxy\" must be provided.",
171 })
172 return
173 }
174
175 var proxy database.WorkspaceProxy
176 var dbErr error
177 if proxyQuery == "primary" || proxyQuery == deploymentID {
178 // Requesting primary proxy
179 proxy, dbErr = fetchPrimaryProxy(ctx)
180 } else if proxyID, err := uuid.Parse(proxyQuery); err == nil {
181 // Request proxy by id
182 proxy, dbErr = db.GetWorkspaceProxyByID(ctx, proxyID)
183 } else {
184 // Request proxy by name
185 proxy, dbErr = db.GetWorkspaceProxyByName(ctx, proxyQuery)
186 }
187 if httpapi.Is404Error(dbErr) {
188 httpapi.ResourceNotFound(rw)
189 return
190 }
191 if dbErr != nil {
192 httpapi.InternalServerError(rw, dbErr)
193 return
194 }
195
196 ctx = context.WithValue(ctx, workspaceProxyParamContextKey{}, proxy)
197 next.ServeHTTP(rw, r.WithContext(ctx))
198 })
199 }
200}

Callers 2

NewFunction · 0.92

Calls 10

WriteFunction · 0.92
Is404ErrorFunction · 0.92
ResourceNotFoundFunction · 0.92
InternalServerErrorFunction · 0.92
WithContextMethod · 0.80
ContextMethod · 0.65
ParseMethod · 0.65
GetWorkspaceProxyByIDMethod · 0.65
ServeHTTPMethod · 0.45

Tested by 1