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 }