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

     1  package gpg
     2  
     3  import (
     4  	"errors"
     5  	"github.com/cobalt77/jfrog-client-go/bintray/auth"
     6  	"github.com/cobalt77/jfrog-client-go/bintray/services/utils"
     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  	"path"
    14  )
    15  
    16  func NewService(client *httpclient.HttpClient) *GpgService {
    17  	us := &GpgService{client: client}
    18  	return us
    19  }
    20  
    21  type GpgService struct {
    22  	client         *httpclient.HttpClient
    23  	BintrayDetails auth.BintrayDetails
    24  }
    25  
    26  type Path struct {
    27  	Subject string
    28  	Repo    string
    29  	Package string
    30  	Version string
    31  }
    32  
    33  func (gs *GpgService) SignFile(pathDetails *utils.PathDetails, passphrase string) error {
    34  	if gs.BintrayDetails.GetUser() == "" {
    35  		gs.BintrayDetails.SetUser(pathDetails.Subject)
    36  	}
    37  	url := gs.BintrayDetails.GetApiUrl() + path.Join("gpg", pathDetails.Subject, pathDetails.Repo, pathDetails.Path)
    38  
    39  	var data string
    40  	if passphrase != "" {
    41  		data = "{ \"passphrase\": \"" + passphrase + "\" }"
    42  	}
    43  
    44  	log.Info("GPG signing file...")
    45  	httpClientsDetails := gs.BintrayDetails.CreateHttpClientDetails()
    46  	client, err := httpclient.ClientBuilder().Build()
    47  	if err != nil {
    48  		return err
    49  	}
    50  	resp, body, err := client.SendPost(url, []byte(data), httpClientsDetails)
    51  	if err != nil {
    52  		return err
    53  	}
    54  	if resp.StatusCode != http.StatusOK {
    55  		return errorutils.CheckError(errors.New("Bintray response: " + resp.Status + "\n" + clientutils.IndentJson(body)))
    56  	}
    57  
    58  	log.Debug("Bintray response:", resp.Status)
    59  	log.Output(clientutils.IndentJson(body))
    60  	return nil
    61  }
    62  
    63  func (gs *GpgService) SignVersion(versionPath *versions.Path, passphrase string) error {
    64  	if gs.BintrayDetails.GetUser() == "" {
    65  		gs.BintrayDetails.SetUser(versionPath.Subject)
    66  	}
    67  	url := gs.BintrayDetails.GetApiUrl() + path.Join("gpg", versionPath.Subject, versionPath.Repo, versionPath.Package, "versions", versionPath.Version)
    68  
    69  	var data string
    70  	if passphrase != "" {
    71  		data = "{ \"passphrase\": \"" + passphrase + "\" }"
    72  	}
    73  
    74  	log.Info("GPG signing version...")
    75  	httpClientsDetails := gs.BintrayDetails.CreateHttpClientDetails()
    76  	client, err := httpclient.ClientBuilder().Build()
    77  	if err != nil {
    78  		return err
    79  	}
    80  	resp, body, err := client.SendPost(url, []byte(data), httpClientsDetails)
    81  	if err != nil {
    82  		return err
    83  	}
    84  	if resp.StatusCode != http.StatusOK {
    85  		return errorutils.CheckError(errors.New("Bintray response: " + resp.Status + "\n" + clientutils.IndentJson(body)))
    86  	}
    87  
    88  	log.Debug("Bintray response:", resp.Status)
    89  	log.Output(clientutils.IndentJson(body))
    90  	return nil
    91  }