github.com/cobalt77/jfrog-client-go@v0.14.5/bintray/services/accesskeys/accesskeys.go (about) 1 package accesskeys 2 3 import ( 4 "encoding/json" 5 "errors" 6 "github.com/cobalt77/jfrog-client-go/bintray/auth" 7 "github.com/cobalt77/jfrog-client-go/httpclient" 8 clientutils "github.com/cobalt77/jfrog-client-go/utils" 9 "github.com/cobalt77/jfrog-client-go/utils/errorutils" 10 "github.com/cobalt77/jfrog-client-go/utils/log" 11 "net/http" 12 "path" 13 "strings" 14 ) 15 16 func NewService(client *httpclient.HttpClient) *AccessKeysService { 17 us := &AccessKeysService{client: client} 18 return us 19 } 20 21 func NewAccessKeysParams() *Params { 22 return &Params{} 23 } 24 25 type AccessKeysService struct { 26 client *httpclient.HttpClient 27 BintrayDetails auth.BintrayDetails 28 } 29 30 type Params struct { 31 Id string 32 Password string 33 Org string 34 Expiry int64 35 ExistenceCheckUrl string 36 ExistenceCheckCache int 37 WhiteCidrs string 38 BlackCidrs string 39 ApiOnly bool 40 } 41 42 func (aks *AccessKeysService) ShowAll(org string) error { 43 path := getAccessKeysPath(aks.BintrayDetails, org) 44 httpClientsDetails := aks.BintrayDetails.CreateHttpClientDetails() 45 log.Info("Getting access keys...") 46 client, err := httpclient.ClientBuilder().Build() 47 if err != nil { 48 return err 49 } 50 resp, body, _, _ := client.SendGet(path, true, httpClientsDetails) 51 if resp.StatusCode != http.StatusOK { 52 return errorutils.CheckError(errors.New("Bintray response: " + resp.Status + "\n" + clientutils.IndentJson(body))) 53 } 54 55 log.Debug("Bintray response:", resp.Status) 56 log.Output(clientutils.IndentJson(body)) 57 return nil 58 } 59 60 func (aks *AccessKeysService) Show(org, id string) error { 61 url := getAccessKeyPath(aks.BintrayDetails, id, org) 62 httpClientsDetails := aks.BintrayDetails.CreateHttpClientDetails() 63 log.Info("Getting access key...") 64 client, err := httpclient.ClientBuilder().Build() 65 if err != nil { 66 return err 67 } 68 resp, body, _, _ := client.SendGet(url, true, httpClientsDetails) 69 if resp.StatusCode != http.StatusOK { 70 return errorutils.CheckError(errors.New("Bintray response: " + resp.Status + "\n" + clientutils.IndentJson(body))) 71 } 72 73 log.Debug("Bintray response:", resp.Status) 74 log.Output(clientutils.IndentJson(body)) 75 return nil 76 } 77 78 func (aks *AccessKeysService) Create(params *Params) error { 79 data, err := buildAccessKeyJson(params) 80 if err != nil { 81 return err 82 } 83 url := getAccessKeysPath(aks.BintrayDetails, params.Org) 84 httpClientsDetails := aks.BintrayDetails.CreateHttpClientDetails() 85 log.Info("Creating access key...") 86 client, err := httpclient.ClientBuilder().Build() 87 if err != nil { 88 return err 89 } 90 resp, body, err := client.SendPost(url, []byte(data), httpClientsDetails) 91 if err != nil { 92 return err 93 } 94 if resp.StatusCode != http.StatusCreated { 95 return errorutils.CheckError(errors.New("Bintray response: " + resp.Status + "\n" + clientutils.IndentJson(body))) 96 } 97 98 log.Debug("Bintray response:", resp.Status) 99 log.Output(clientutils.IndentJson(body)) 100 return nil 101 } 102 103 func (aks *AccessKeysService) Update(params *Params) error { 104 data, err := buildAccessKeyJson(params) 105 if err != nil { 106 return err 107 } 108 url := getAccessKeyPath(aks.BintrayDetails, params.Id, params.Org) 109 httpClientsDetails := aks.BintrayDetails.CreateHttpClientDetails() 110 log.Info("Updating access key...") 111 client, err := httpclient.ClientBuilder().Build() 112 if err != nil { 113 return err 114 } 115 resp, body, err := client.SendPatch(url, []byte(data), httpClientsDetails) 116 if err != nil { 117 return err 118 } 119 if resp.StatusCode != http.StatusOK { 120 return errorutils.CheckError(errors.New("Bintray response: " + resp.Status + "\n" + clientutils.IndentJson(body))) 121 } 122 123 log.Debug("Bintray response:", resp.Status) 124 log.Output(clientutils.IndentJson(body)) 125 return nil 126 } 127 128 func (aks *AccessKeysService) Delete(org, id string) error { 129 url := getAccessKeyPath(aks.BintrayDetails, id, org) 130 httpClientsDetails := aks.BintrayDetails.CreateHttpClientDetails() 131 log.Info("Deleting access key...") 132 client, err := httpclient.ClientBuilder().Build() 133 if err != nil { 134 return err 135 } 136 resp, body, err := client.SendDelete(url, nil, httpClientsDetails) 137 if err != nil { 138 return err 139 } 140 if resp.StatusCode != http.StatusOK { 141 return errorutils.CheckError(errors.New("Bintray response: " + resp.Status + "\n" + clientutils.IndentJson(body))) 142 } 143 144 log.Debug("Bintray response:", resp.Status) 145 log.Info("Deleted access key.") 146 return nil 147 } 148 149 func buildAccessKeyJson(params *Params) ([]byte, error) { 150 var whiteCidrs []string 151 if params.WhiteCidrs != "" { 152 whiteCidrs = strings.Split(params.WhiteCidrs, ",") 153 } 154 155 var blackCidrs []string 156 if params.BlackCidrs != "" { 157 blackCidrs = strings.Split(params.BlackCidrs, ",") 158 } 159 160 data := AccessKeyContent{ 161 Id: params.Id, 162 Expiry: params.Expiry, 163 WhiteCidrs: whiteCidrs, 164 BlackCidrs: blackCidrs, 165 ApiOnly: params.ApiOnly, 166 ExistenceCheck: ExistenceCheckContent{ 167 Url: params.ExistenceCheckUrl, 168 Cache_for_secs: params.ExistenceCheckCache}, 169 } 170 content, err := json.Marshal(data) 171 if err != nil { 172 return []byte{}, errorutils.CheckError(errors.New("Failed to execute request.")) 173 } 174 return content, nil 175 } 176 177 func getAccessKeyPath(bintrayDetails auth.BintrayDetails, id, org string) string { 178 return getAccessKeysPath(bintrayDetails, org) + "/" + id 179 } 180 181 func getAccessKeysPath(bintrayDetails auth.BintrayDetails, org string) string { 182 if org == "" { 183 return bintrayDetails.GetApiUrl() + path.Join("users", bintrayDetails.GetUser(), "access_keys") 184 } 185 return bintrayDetails.GetApiUrl() + path.Join("orgs", org, "access_keys") 186 } 187 188 type AccessKeyContent struct { 189 Id string `json:"id,omitempty"` 190 Expiry int64 `json:"expiry,omitempty"` 191 ExistenceCheck ExistenceCheckContent `json:"existence_check,omitempty"` 192 WhiteCidrs []string `json:"white_cidrs,omitempty"` 193 BlackCidrs []string `json:"black_cidrs,omitempty"` 194 ApiOnly bool `json:"api_only"` 195 } 196 197 type ExistenceCheckContent struct { 198 Url string `json:"url,omitempty"` 199 Cache_for_secs int `json:"cache_for_secs,omitempty"` 200 }