github.com/pf-qiu/concourse/v6@v6.7.3-0.20201207032516-1f455d73275f/atc/api/resourceserver/check.go (about) 1 package resourceserver 2 3 import ( 4 "context" 5 "encoding/json" 6 "net/http" 7 8 "code.cloudfoundry.org/lager" 9 "code.cloudfoundry.org/lager/lagerctx" 10 "github.com/pf-qiu/concourse/v6/atc" 11 "github.com/pf-qiu/concourse/v6/atc/api/present" 12 "github.com/pf-qiu/concourse/v6/atc/db" 13 "github.com/tedsuo/rata" 14 ) 15 16 func (s *Server) CheckResource(dbPipeline db.Pipeline) http.Handler { 17 return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { 18 resourceName := rata.Param(r, "resource_name") 19 20 logger := s.logger.Session("check-resource", lager.Data{ 21 "resource": resourceName, 22 }) 23 24 var reqBody atc.CheckRequestBody 25 err := json.NewDecoder(r.Body).Decode(&reqBody) 26 if err != nil { 27 logger.Info("malformed-request", lager.Data{"error": err.Error()}) 28 w.WriteHeader(http.StatusBadRequest) 29 return 30 } 31 32 dbResource, found, err := dbPipeline.Resource(resourceName) 33 if err != nil { 34 logger.Error("failed-to-get-resource", err) 35 w.WriteHeader(http.StatusInternalServerError) 36 return 37 } 38 39 if !found { 40 logger.Info("resource-not-found") 41 w.WriteHeader(http.StatusNotFound) 42 return 43 } 44 45 dbResourceTypes, err := dbPipeline.ResourceTypes() 46 if err != nil { 47 logger.Error("failed-to-get-resource-types", err) 48 w.WriteHeader(http.StatusInternalServerError) 49 return 50 } 51 52 build, created, err := s.checkFactory.TryCreateCheck( 53 lagerctx.NewContext(context.Background(), logger), 54 dbResource, 55 dbResourceTypes, 56 reqBody.From, 57 true, 58 ) 59 if err != nil { 60 logger.Error("failed-to-create-check", err) 61 w.WriteHeader(http.StatusInternalServerError) 62 w.Write([]byte(err.Error())) 63 return 64 } 65 66 if !created { 67 logger.Info("check-not-created") 68 w.WriteHeader(http.StatusInternalServerError) 69 return 70 } 71 72 w.WriteHeader(http.StatusCreated) 73 74 err = json.NewEncoder(w).Encode(present.Build(build)) 75 if err != nil { 76 logger.Error("failed-to-encode-check", err) 77 w.WriteHeader(http.StatusInternalServerError) 78 } 79 }) 80 }