github.com/jfrog/jfrog-client-go@v1.40.2/distribution/services/getstatus.go (about) 1 package services 2 3 import ( 4 "encoding/json" 5 "errors" 6 "github.com/jfrog/jfrog-client-go/utils/distribution" 7 "net/http" 8 "strings" 9 10 "github.com/jfrog/jfrog-client-go/auth" 11 "github.com/jfrog/jfrog-client-go/http/jfroghttpclient" 12 "github.com/jfrog/jfrog-client-go/utils" 13 "github.com/jfrog/jfrog-client-go/utils/errorutils" 14 "github.com/jfrog/jfrog-client-go/utils/log" 15 ) 16 17 type DistributionStatusService struct { 18 client *jfroghttpclient.JfrogHttpClient 19 DistDetails auth.ServiceDetails 20 } 21 22 func NewDistributionStatusService(client *jfroghttpclient.JfrogHttpClient) *DistributionStatusService { 23 return &DistributionStatusService{client: client} 24 } 25 26 func (ds *DistributionStatusService) GetDistDetails() auth.ServiceDetails { 27 return ds.DistDetails 28 } 29 30 func (ds *DistributionStatusService) GetStatus(distributionStatusParams DistributionStatusParams) (*[]distribution.DistributionStatusResponse, error) { 31 if err := ds.checkParameters(distributionStatusParams); err != nil { 32 return nil, err 33 } 34 return ds.execGetStatus(distributionStatusParams.Name, distributionStatusParams.Version, distributionStatusParams.TrackerId) 35 } 36 37 func (ds *DistributionStatusService) checkParameters(distributionStatusParams DistributionStatusParams) error { 38 var err error 39 if distributionStatusParams.Name == "" && (distributionStatusParams.Version != "" || distributionStatusParams.TrackerId != "") { 40 err = errors.New("missing distribution name parameter") 41 } 42 if distributionStatusParams.Version == "" && distributionStatusParams.TrackerId != "" { 43 err = errors.New("missing distribution version parameter") 44 } 45 return errorutils.CheckError(err) 46 } 47 48 func (ds *DistributionStatusService) execGetStatus(name, version, trackerId string) (*[]distribution.DistributionStatusResponse, error) { 49 httpClientsDetails := ds.DistDetails.CreateHttpClientDetails() 50 url := ds.BuildUrlForGetStatus(ds.DistDetails.GetUrl(), name, version, trackerId) 51 52 resp, body, _, err := ds.client.SendGet(url, true, &httpClientsDetails) 53 if err != nil { 54 return nil, err 55 } 56 if err = errorutils.CheckResponseStatusWithBody(resp, body, http.StatusOK); err != nil { 57 return nil, err 58 } 59 log.Debug("Distribution response:", resp.Status) 60 log.Debug(utils.IndentJson(body)) 61 var distributionStatusResponse []distribution.DistributionStatusResponse 62 stringBody := string(body) 63 if !strings.HasPrefix(stringBody, "[") { 64 stringBody = "[" + stringBody + "]" 65 } 66 err = json.Unmarshal([]byte(stringBody), &distributionStatusResponse) 67 return &distributionStatusResponse, errorutils.CheckError(err) 68 } 69 70 func (ds *DistributionStatusService) BuildUrlForGetStatus(url, name, version, trackerId string) string { 71 url += "api/v1/release_bundle" 72 if name == "" { 73 return url + "/distribution" 74 } 75 url += "/" + name 76 if version == "" { 77 return url + "/distribution" 78 } 79 url += "/" + version + "/distribution" 80 if trackerId != "" { 81 return url + "/" + trackerId 82 } 83 return url 84 } 85 86 type DistributionStatusParams struct { 87 Name string 88 Version string 89 TrackerId string 90 } 91 92 func NewDistributionStatusParams() DistributionStatusParams { 93 return DistributionStatusParams{} 94 }