1package teamserver 2 3import ( 4 "net/http" 5 6 "github.com/concourse/concourse/atc/api/accessor" 7) 8 9func (s *Server) DestroyTeam(w http.ResponseWriter, r *http.Request) { 10 hLog := s.logger.Session("destroy-team") 11 hLog.Debug("destroying-team") 12 13 teamName := r.FormValue(":team_name") 14 15 acc := accessor.GetAccessor(r) 16 if !acc.IsAdmin() { 17 hLog.Info("requesting-team-is-not-admin") 18 w.WriteHeader(http.StatusForbidden) 19 return 20 } 21 22 team, found, err := s.teamFactory.FindTeam(teamName) 23 if err != nil { 24 hLog.Error("failed-to-get-team", err) 25 w.WriteHeader(http.StatusInternalServerError) 26 return 27 } 28 29 if !found { 30 hLog.Info("team-not-found") 31 w.WriteHeader(http.StatusNotFound) 32 return 33 } 34 35 if team.Admin() { 36 allTeams, err := s.teamFactory.GetTeams() 37 if err != nil { 38 hLog.Error("failed-to-get-teams", err) 39 w.WriteHeader(http.StatusInternalServerError) 40 return 41 } 42 43 adminTeams := 0 44 for _, candidate := range allTeams { 45 if candidate.Admin() { 46 adminTeams = adminTeams + 1 47 } 48 } 49 50 if adminTeams == 1 { 51 hLog.Info("team-is-last-admin-team") 52 w.WriteHeader(http.StatusForbidden) 53 return 54 } 55 } 56 57 err = team.Delete() 58 if err != nil { 59 hLog.Error("failed-to-delete-team", err) 60 w.WriteHeader(http.StatusInternalServerError) 61 return 62 } 63 64 w.WriteHeader(http.StatusNoContent) 65} 66