github.com/pf-qiu/concourse/v6@v6.7.3-0.20201207032516-1f455d73275f/atc/api/workerserver/delete.go (about) 1 package workerserver 2 3 import ( 4 "net/http" 5 6 "github.com/pf-qiu/concourse/v6/atc/api/accessor" 7 ) 8 9 func (s *Server) DeleteWorker(w http.ResponseWriter, r *http.Request) { 10 logger := s.logger.Session("deleting-worker") 11 12 workerName := r.FormValue(":worker_name") 13 acc := accessor.GetAccessor(r) 14 15 worker, found, err := s.dbWorkerFactory.GetWorker(workerName) 16 if err != nil || !found { 17 logger.Error("failed-finding-worker-to-delete", err) 18 w.WriteHeader(http.StatusInternalServerError) 19 return 20 } 21 22 teamName := worker.TeamName() 23 var teamAuthorized bool 24 if teamName != "" { 25 teamAuthorized = acc.IsAuthorized(teamName) 26 } 27 28 if found && (acc.IsAdmin() || acc.IsSystem() || teamAuthorized) { 29 err := worker.Delete() 30 if err != nil { 31 logger.Error("failed-to-delete-worker", err) 32 w.WriteHeader(http.StatusInternalServerError) 33 return 34 } 35 } 36 w.WriteHeader(http.StatusOK) 37 }