github.com/cobalt77/jfrog-client-go@v0.14.5/bintray/services/entitlements/entitlements.go (about)

     1  package entitlements
     2  
     3  import (
     4  	"encoding/json"
     5  	"errors"
     6  	"github.com/cobalt77/jfrog-client-go/bintray/auth"
     7  	"github.com/cobalt77/jfrog-client-go/bintray/services/versions"
     8  	"github.com/cobalt77/jfrog-client-go/httpclient"
     9  	clientutils "github.com/cobalt77/jfrog-client-go/utils"
    10  	"github.com/cobalt77/jfrog-client-go/utils/errorutils"
    11  	"github.com/cobalt77/jfrog-client-go/utils/log"
    12  	"net/http"
    13  	"strings"
    14  )
    15  
    16  func NewService(client *httpclient.HttpClient) *EntitlementsService {
    17  	us := &EntitlementsService{client: client}
    18  	return us
    19  }
    20  
    21  func NewEntitlementsParams() *Params {
    22  	return &Params{VersionPath: &versions.Path{}}
    23  }
    24  
    25  type EntitlementsService struct {
    26  	client         *httpclient.HttpClient
    27  	BintrayDetails auth.BintrayDetails
    28  }
    29  
    30  type Params struct {
    31  	VersionPath *versions.Path
    32  	Id          string
    33  	Path        string
    34  	Access      string
    35  	Keys        string
    36  }
    37  
    38  func (es *EntitlementsService) ShowAll(path *versions.Path) error {
    39  	url := BuildEntitlementsUrl(es.BintrayDetails, path)
    40  	if es.BintrayDetails.GetUser() == "" {
    41  		es.BintrayDetails.SetUser(path.Subject)
    42  	}
    43  	httpClientsDetails := es.BintrayDetails.CreateHttpClientDetails()
    44  	log.Info("Getting entitlements...")
    45  	client, err := httpclient.ClientBuilder().Build()
    46  	if err != nil {
    47  		return err
    48  	}
    49  	resp, body, _, err := client.SendGet(url, true, httpClientsDetails)
    50  	if err != nil {
    51  		return err
    52  	}
    53  	if resp.StatusCode != http.StatusOK {
    54  		return errorutils.CheckError(errors.New("Bintray response: " + resp.Status + "\n" + clientutils.IndentJson(body)))
    55  	}
    56  
    57  	log.Debug("Bintray response:", resp.Status)
    58  	log.Output(clientutils.IndentJson(body))
    59  	return nil
    60  }
    61  
    62  func (es *EntitlementsService) Show(id string, path *versions.Path) error {
    63  	url := BuildEntitlementUrl(es.BintrayDetails, path, id)
    64  	if es.BintrayDetails.GetUser() == "" {
    65  		es.BintrayDetails.SetUser(path.Subject)
    66  	}
    67  	httpClientsDetails := es.BintrayDetails.CreateHttpClientDetails()
    68  	log.Info("Getting entitlement...")
    69  	client, err := httpclient.ClientBuilder().Build()
    70  	if err != nil {
    71  		return err
    72  	}
    73  	resp, body, _, err := client.SendGet(url, true, httpClientsDetails)
    74  	if err != nil {
    75  		return err
    76  	}
    77  	if resp.StatusCode != http.StatusOK {
    78  		return errorutils.CheckError(errors.New("Bintray response: " + resp.Status + "\n" + clientutils.IndentJson(body)))
    79  	}
    80  
    81  	log.Debug("Bintray response:", resp.Status)
    82  	log.Output(clientutils.IndentJson(body))
    83  	return nil
    84  }
    85  
    86  func (es *EntitlementsService) Create(params *Params) error {
    87  	var path = BuildEntitlementsUrl(es.BintrayDetails, params.VersionPath)
    88  
    89  	if es.BintrayDetails.GetUser() == "" {
    90  		es.BintrayDetails.SetUser(params.VersionPath.Subject)
    91  	}
    92  	content, err := createEntitlementContent(params)
    93  	if err != nil {
    94  		return err
    95  	}
    96  
    97  	httpClientsDetails := es.BintrayDetails.CreateHttpClientDetails()
    98  	log.Info("Creating entitlement...")
    99  	client, err := httpclient.ClientBuilder().Build()
   100  	if err != nil {
   101  		return err
   102  	}
   103  	resp, body, err := client.SendPost(path, content, httpClientsDetails)
   104  	if err != nil {
   105  		return err
   106  	}
   107  	if resp.StatusCode != http.StatusCreated {
   108  		return errorutils.CheckError(errors.New("Bintray response: " + resp.Status + "\n" + clientutils.IndentJson(body)))
   109  	}
   110  
   111  	log.Debug("Bintray response:", resp.Status)
   112  	log.Output(clientutils.IndentJson(body))
   113  	return nil
   114  }
   115  
   116  func (es *EntitlementsService) Delete(id string, path *versions.Path) error {
   117  	url := BuildEntitlementUrl(es.BintrayDetails, path, id)
   118  	if es.BintrayDetails.GetUser() == "" {
   119  		es.BintrayDetails.SetUser(path.Subject)
   120  	}
   121  
   122  	httpClientsDetails := es.BintrayDetails.CreateHttpClientDetails()
   123  	log.Info("Deleting entitlement...")
   124  	client, err := httpclient.ClientBuilder().Build()
   125  	if err != nil {
   126  		return err
   127  	}
   128  	resp, body, err := client.SendDelete(url, nil, httpClientsDetails)
   129  	if err != nil {
   130  		return err
   131  	}
   132  	if resp.StatusCode != http.StatusOK {
   133  		return errorutils.CheckError(errors.New("Bintray response: " + resp.Status + "\n" + clientutils.IndentJson(body)))
   134  	}
   135  
   136  	log.Debug("Bintray response:", resp.Status)
   137  	log.Output(clientutils.IndentJson(body))
   138  	return nil
   139  }
   140  
   141  func (es *EntitlementsService) Update(params *Params) error {
   142  	path := BuildEntitlementUrl(es.BintrayDetails, params.VersionPath, params.Id)
   143  	if es.BintrayDetails.GetUser() == "" {
   144  		es.BintrayDetails.SetUser(params.VersionPath.Subject)
   145  	}
   146  	content, err := createEntitlementContent(params)
   147  	if err != nil {
   148  		return err
   149  	}
   150  
   151  	httpClientsDetails := es.BintrayDetails.CreateHttpClientDetails()
   152  	log.Info("Updating entitlement...")
   153  	client, err := httpclient.ClientBuilder().Build()
   154  	if err != nil {
   155  		return err
   156  	}
   157  	resp, body, err := client.SendPatch(path, content, httpClientsDetails)
   158  	if err != nil {
   159  		return err
   160  	}
   161  	if resp.StatusCode != http.StatusOK {
   162  		return errorutils.CheckError(errors.New("Bintray response: " + resp.Status + "\n" + clientutils.IndentJson(body)))
   163  	}
   164  
   165  	log.Debug("Bintray response:", resp.Status)
   166  	log.Output(clientutils.IndentJson(body))
   167  	return err
   168  }
   169  
   170  func createEntitlementContent(params *Params) ([]byte, error) {
   171  	var downloadKeys []string
   172  	if params.Keys != "" {
   173  		downloadKeys = strings.Split(params.Keys, ",")
   174  	}
   175  	Config := contentConfig{
   176  		Access:       params.Access,
   177  		DownloadKeys: downloadKeys,
   178  		Path:         params.Path,
   179  	}
   180  	requestContent, err := json.Marshal(Config)
   181  	if err != nil {
   182  		return nil, errorutils.CheckError(errors.New("Failed to execute request."))
   183  	}
   184  	return requestContent, nil
   185  }
   186  
   187  type contentConfig struct {
   188  	Access       string   `json:"access,omitempty"`
   189  	DownloadKeys []string `json:"download_keys,omitempty"`
   190  	Path         string   `json:"path,omitempty"`
   191  }