1package buildserver
2
3import (
4	"encoding/json"
5	"net/http"
6
7	"code.cloudfoundry.org/lager"
8	"github.com/concourse/concourse/atc"
9	"github.com/concourse/concourse/atc/api/present"
10	"github.com/concourse/concourse/atc/db"
11)
12
13func (s *Server) BuildResources(build db.Build) http.Handler {
14	logger := s.logger.Session("build-resources")
15
16	return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
17		inputs, outputs, err := build.Resources()
18		if err != nil {
19			logger.Error("cannot-find-build", err, lager.Data{"buildID": r.FormValue(":build_id")})
20			w.WriteHeader(http.StatusInternalServerError)
21			return
22		}
23
24		atcInputs := make([]atc.PublicBuildInput, 0, len(inputs))
25		for _, input := range inputs {
26			atcInputs = append(atcInputs, present.PublicBuildInput(input, build.PipelineID()))
27		}
28
29		atcOutputs := make([]atc.PublicBuildOutput, 0, len(outputs))
30		for _, output := range outputs {
31			atcOutputs = append(atcOutputs, present.PublicBuildOutput(output))
32		}
33
34		output := atc.BuildInputsOutputs{
35			Inputs:  atcInputs,
36			Outputs: atcOutputs,
37		}
38
39		w.Header().Set("Content-Type", "application/json")
40		w.WriteHeader(http.StatusOK)
41		err = json.NewEncoder(w).Encode(output)
42		if err != nil {
43			logger.Error("failed-to-encode-build-resources", err)
44			w.WriteHeader(http.StatusInternalServerError)
45		}
46	})
47}
48