MCPcopy Create free account
hub / github.com/cloudfoundry/brokerapi / Bind

Method Bind

handlers/bind.go:20–150  ·  view source on GitHub ↗
(w http.ResponseWriter, req *http.Request)

Source from the content-addressed store, hash-verified

18)
19
20func (h APIHandler) Bind(w http.ResponseWriter, req *http.Request) {
21 instanceID := req.PathValue("instance_id")
22 bindingID := req.PathValue("binding_id")
23
24 logger := h.logger.Session(req.Context(), bindLogKey, blog.InstanceID(instanceID), blog.BindingID(bindingID))
25
26 version := getAPIVersion(req)
27 asyncAllowed := false
28 if version.Minor >= 14 {
29 asyncAllowed = req.FormValue("accepts_incomplete") == "true"
30 }
31
32 requestId := fmt.Sprintf("%v", req.Context().Value(middlewares.RequestIdentityKey))
33
34 var details domain.BindDetails
35 if err := json.NewDecoder(req.Body).Decode(&details); err != nil {
36 logger.Error(invalidBindDetailsErrorKey, err)
37 h.respond(w, http.StatusUnprocessableEntity, requestId, apiresponses.ErrorResponse{
38 Description: err.Error(),
39 })
40 return
41 }
42
43 if details.ServiceID == "" {
44 logger.Error(serviceIdMissingKey, serviceIdError)
45 h.respond(w, http.StatusBadRequest, requestId, apiresponses.ErrorResponse{
46 Description: serviceIdError.Error(),
47 })
48 return
49 }
50
51 if details.PlanID == "" {
52 logger.Error(planIdMissingKey, planIdError)
53 h.respond(w, http.StatusBadRequest, requestId, apiresponses.ErrorResponse{
54 Description: planIdError.Error(),
55 })
56 return
57 }
58
59 binding, err := h.serviceBroker.Bind(req.Context(), instanceID, bindingID, details, asyncAllowed)
60 if err != nil {
61 switch err := err.(type) {
62 case *apiresponses.FailureResponse:
63 statusCode := err.ValidatedStatusCode(slog.New(logger))
64 errorResponse := err.ErrorResponse()
65 if err == apiresponses.ErrInstanceDoesNotExist {
66 // work around ErrInstanceDoesNotExist having different pre-refactor behaviour to other actions
67 errorResponse = apiresponses.ErrorResponse{
68 Description: err.Error(),
69 }
70 statusCode = http.StatusNotFound
71 }
72 logger.Error(err.LoggerAction(), err)
73 h.respond(w, statusCode, requestId, errorResponse)
74 default:
75 logger.Error(unknownErrorKey, err)
76 h.respond(w, http.StatusInternalServerError, requestId, apiresponses.ErrorResponse{
77 Description: err.Error(),

Callers

nothing calls this directly

Calls 11

respondMethod · 0.95
InstanceIDFunction · 0.92
BindingIDFunction · 0.92
getAPIVersionFunction · 0.85
SessionMethod · 0.80
ErrorMethod · 0.80
ValidatedStatusCodeMethod · 0.80
ErrorResponseMethod · 0.80
LoggerActionMethod · 0.80
BindMethod · 0.65
IsEmptyMethod · 0.45

Tested by

no test coverage detected