github.com/pf-qiu/concourse/v6@v6.7.3-0.20201207032516-1f455d73275f/atc/api/teamserver/set.go (about) 1 package teamserver 2 3 import ( 4 "encoding/json" 5 "net/http" 6 7 "code.cloudfoundry.org/lager" 8 9 "github.com/pf-qiu/concourse/v6/atc" 10 "github.com/pf-qiu/concourse/v6/atc/api/accessor" 11 "github.com/pf-qiu/concourse/v6/atc/api/present" 12 ) 13 14 type SetTeamResponse struct { 15 Errors []string `json:"errors,omitempty"` 16 Warnings []atc.ConfigWarning `json:"warnings,omitempty"` 17 Team atc.Team `json:"team"` 18 } 19 20 func (s *Server) SetTeam(w http.ResponseWriter, r *http.Request) { 21 hLog := s.logger.Session("set-team") 22 23 hLog.Debug("setting-team") 24 25 acc := accessor.GetAccessor(r) 26 27 teamName := r.FormValue(":team_name") 28 29 var atcTeam atc.Team 30 err := json.NewDecoder(r.Body).Decode(&atcTeam) 31 if err != nil { 32 hLog.Error("malformed-request", err) 33 w.WriteHeader(http.StatusBadRequest) 34 return 35 } 36 37 if err := atcTeam.Validate(); err != nil { 38 hLog.Error("malformed-auth-config", err) 39 w.WriteHeader(http.StatusBadRequest) 40 return 41 } 42 43 atcTeam.Name = teamName 44 if !acc.IsAdmin() && !acc.IsAuthorized(teamName) { 45 hLog.Debug("not-allowed") 46 w.WriteHeader(http.StatusForbidden) 47 return 48 } 49 50 team, found, err := s.teamFactory.FindTeam(teamName) 51 if err != nil { 52 hLog.Error("failed-to-lookup-team", err, lager.Data{"teamName": teamName}) 53 w.WriteHeader(http.StatusInternalServerError) 54 return 55 } 56 57 response := SetTeamResponse{} 58 if found { 59 hLog.Debug("updating-credentials") 60 err = team.UpdateProviderAuth(atcTeam.Auth) 61 if err != nil { 62 hLog.Error("failed-to-update-team", err, lager.Data{"teamName": teamName}) 63 w.WriteHeader(http.StatusInternalServerError) 64 return 65 } 66 67 w.Header().Set("Content-Type", "application/json") 68 w.WriteHeader(http.StatusOK) 69 } else if acc.IsAdmin() { 70 hLog.Debug("creating team") 71 72 warning := atc.ValidateIdentifier(atcTeam.Name, "team") 73 if warning != nil { 74 response.Warnings = append(response.Warnings, *warning) 75 } 76 77 team, err = s.teamFactory.CreateTeam(atcTeam) 78 if err != nil { 79 hLog.Error("failed-to-save-team", err, lager.Data{"teamName": teamName}) 80 w.WriteHeader(http.StatusInternalServerError) 81 return 82 } 83 w.Header().Set("Content-Type", "application/json") 84 w.WriteHeader(http.StatusCreated) 85 } else { 86 w.WriteHeader(http.StatusForbidden) 87 return 88 } 89 90 err = s.teamFactory.NotifyCacher() 91 if err != nil { 92 hLog.Error("failed-to-notify-cacher", err, lager.Data{"teamName": teamName}) 93 w.WriteHeader(http.StatusInternalServerError) 94 return 95 } 96 97 response.Team = present.Team(team) 98 99 err = json.NewEncoder(w).Encode(response) 100 if err != nil { 101 hLog.Error("failed-to-encode-team", err) 102 w.WriteHeader(http.StatusInternalServerError) 103 } 104 105 }