github.com/pf-qiu/concourse/v6@v6.7.3-0.20201207032516-1f455d73275f/atc/api/teamserver/rename.go (about)

     1  package teamserver
     2  
     3  import (
     4  	"encoding/json"
     5  	"io/ioutil"
     6  	"net/http"
     7  
     8  	"github.com/pf-qiu/concourse/v6/atc"
     9  	"github.com/pf-qiu/concourse/v6/atc/api/accessor"
    10  )
    11  
    12  // RenameTeam allows an authenticated user with authority or admin to rename a team
    13  func (s *Server) RenameTeam(w http.ResponseWriter, r *http.Request) {
    14  	logger := s.logger.Session("rename-team")
    15  	acc := accessor.GetAccessor(r)
    16  
    17  	teamName := r.FormValue(":team_name")
    18  	if !acc.IsAdmin() && !acc.IsAuthorized(teamName) {
    19  		w.WriteHeader(http.StatusForbidden)
    20  		return
    21  	}
    22  
    23  	data, err := ioutil.ReadAll(r.Body)
    24  	if err != nil {
    25  		logger.Error("failed-to-read-body", err)
    26  		w.WriteHeader(http.StatusInternalServerError)
    27  		return
    28  	}
    29  
    30  	var rename atc.RenameRequest
    31  	err = json.Unmarshal(data, &rename)
    32  	if err != nil {
    33  		logger.Error("failed-to-unmarshal-body", err)
    34  		w.WriteHeader(http.StatusInternalServerError)
    35  		return
    36  	}
    37  
    38  	var warnings []atc.ConfigWarning
    39  	warning := atc.ValidateIdentifier(rename.NewName, "team")
    40  	if warning != nil {
    41  		warnings = append(warnings, *warning)
    42  	}
    43  
    44  	team, found, err := s.teamFactory.FindTeam(teamName)
    45  	if err != nil {
    46  		logger.Error("failed-to-get-team", err)
    47  		w.WriteHeader(http.StatusInternalServerError)
    48  		return
    49  	}
    50  
    51  	if !found {
    52  		logger.Info("team-not-found")
    53  		w.WriteHeader(http.StatusNotFound)
    54  		return
    55  	}
    56  
    57  	err = team.Rename(rename.NewName)
    58  	if err != nil {
    59  		logger.Error("failed-to-update-team-name", err)
    60  		w.WriteHeader(http.StatusInternalServerError)
    61  		return
    62  	}
    63  
    64  	w.Header().Set("Content-Type", "application/json")
    65  	err = json.NewEncoder(w).Encode(atc.SaveConfigResponse{Warnings: warnings})
    66  	if err != nil {
    67  		s.logger.Error("failed-to-encode-response", err)
    68  		w.WriteHeader(http.StatusInternalServerError)
    69  	}
    70  }