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  }