github.com/cobalt77/jfrog-client-go@v0.14.5/bintray/services/url/url.go (about) 1 package url 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/utils" 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 "path" 14 ) 15 16 func NewService(client *httpclient.HttpClient) *UrlService { 17 us := &UrlService{client: client} 18 return us 19 } 20 21 func NewURLParams() *Params { 22 return &Params{PathDetails: &utils.PathDetails{}} 23 } 24 25 type UrlService struct { 26 client *httpclient.HttpClient 27 BintrayDetails auth.BintrayDetails 28 } 29 30 type Params struct { 31 *utils.PathDetails 32 Expiry int64 33 ValidFor int 34 CallbackId string 35 CallbackEmail string 36 CallbackUrl string 37 CallbackMethod string 38 } 39 40 func (us *UrlService) SignVersion(params *Params) error { 41 if us.BintrayDetails.GetUser() == "" { 42 us.BintrayDetails.SetUser(params.Subject) 43 } 44 content, err := createSignVersionContent(params) 45 if err != nil { 46 return err 47 } 48 signVersionUrl := us.BintrayDetails.GetApiUrl() + path.Join("signed_url", params.Subject, params.Repo, params.Path) 49 50 log.Info("Signing URL...") 51 httpClientsDetails := us.BintrayDetails.CreateHttpClientDetails() 52 client, err := httpclient.ClientBuilder().Build() 53 if err != nil { 54 return err 55 } 56 resp, body, err := client.SendPost(signVersionUrl, content, httpClientsDetails) 57 if err != nil { 58 return err 59 } 60 61 if resp.StatusCode != http.StatusOK { 62 return errorutils.CheckError(errors.New("Bintray response: " + resp.Status + "\n" + clientutils.IndentJson(body))) 63 } 64 65 log.Debug("Bintray response:", resp.Status) 66 log.Output(clientutils.IndentJson(body)) 67 return nil 68 } 69 70 func createSignVersionContent(params *Params) ([]byte, error) { 71 Config := contentConfig{ 72 Expiry: params.Expiry, 73 ValidFor: params.ValidFor, 74 CallbackId: params.CallbackId, 75 CallbackEmail: params.CallbackEmail, 76 CallbackUrl: params.CallbackUrl, 77 CallbackMethod: params.CallbackMethod, 78 } 79 requestContent, err := json.Marshal(Config) 80 if err != nil { 81 return nil, errorutils.CheckError(errors.New("Failed to execute request.")) 82 } 83 return requestContent, nil 84 } 85 86 type contentConfig struct { 87 Expiry int64 `json:"expiry,omitempty"` 88 ValidFor int `json:"valid_for_secs,omitempty"` 89 CallbackId string `json:"callback_id,omitempty"` 90 CallbackEmail string `json:"callback_email,omitempty"` 91 CallbackUrl string `json:"callback_url,omitempty"` 92 CallbackMethod string `json:"callback_method,omitempty"` 93 }