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  }