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  }