1package checkserver
2
3import (
4	"encoding/json"
5	"net/http"
6	"strconv"
7
8	"github.com/concourse/concourse/atc/api/accessor"
9	"github.com/concourse/concourse/atc/api/present"
10)
11
12func (s *Server) GetCheck(w http.ResponseWriter, r *http.Request) {
13	logger := s.logger.Session("get-check")
14
15	checkID, err := strconv.Atoi(r.FormValue(":check_id"))
16	if err != nil {
17		w.WriteHeader(http.StatusBadRequest)
18		return
19	}
20
21	check, found, err := s.checkFactory.Check(checkID)
22	if err != nil {
23		logger.Error("could-not-get-check", err)
24		w.WriteHeader(http.StatusInternalServerError)
25		return
26	}
27
28	if !found {
29		w.WriteHeader(http.StatusNotFound)
30		return
31	}
32
33	checkables, err := check.AllCheckables()
34	if err != nil {
35		logger.Error("failed-to-get-checkables", err)
36		w.WriteHeader(http.StatusInternalServerError)
37		return
38	}
39
40	acc := accessor.GetAccessor(r)
41
42	for _, checkable := range checkables {
43
44		if acc.IsAuthorized(checkable.TeamName()) {
45
46			w.Header().Set("Content-Type", "application/json")
47			w.WriteHeader(http.StatusOK)
48
49			err = json.NewEncoder(w).Encode(present.Check(check))
50			if err != nil {
51				logger.Error("failed-to-encode-check", err)
52				w.WriteHeader(http.StatusInternalServerError)
53			}
54
55			return
56		}
57	}
58
59	w.WriteHeader(http.StatusForbidden)
60}
61