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

     1  package mavensync
     2  
     3  import (
     4  	"encoding/json"
     5  	"errors"
     6  	"net/http"
     7  	"path"
     8  
     9  	"github.com/cobalt77/jfrog-client-go/bintray/auth"
    10  	"github.com/cobalt77/jfrog-client-go/bintray/services/versions"
    11  	"github.com/cobalt77/jfrog-client-go/httpclient"
    12  	clientutils "github.com/cobalt77/jfrog-client-go/utils"
    13  	"github.com/cobalt77/jfrog-client-go/utils/errorutils"
    14  	"github.com/cobalt77/jfrog-client-go/utils/log"
    15  )
    16  
    17  func NewService(client *httpclient.HttpClient) *MavenCentralSyncService {
    18  	return &MavenCentralSyncService{client: client}
    19  }
    20  
    21  type MavenCentralSyncService struct {
    22  	client         *httpclient.HttpClient
    23  	BintrayDetails auth.BintrayDetails
    24  }
    25  
    26  type Params struct {
    27  	Username string `json:"username,omitempty"`
    28  	Password string `json:"password,omitempty"`
    29  	Close    string `json:"close,omitempty"`
    30  }
    31  
    32  func NewParams(username string, password string, dontClose bool) *Params {
    33  	req := &Params{
    34  		Username: username,
    35  		Password: password,
    36  		Close:    "1",
    37  	}
    38  
    39  	if dontClose {
    40  		req.Close = "0"
    41  	}
    42  
    43  	return req
    44  }
    45  
    46  func (mcss *MavenCentralSyncService) Sync(p *Params, path *versions.Path) error {
    47  	url, err := buildSyncURL(mcss.BintrayDetails, path)
    48  	if err != nil {
    49  		return err
    50  	}
    51  
    52  	if mcss.BintrayDetails.GetUser() == "" {
    53  		mcss.BintrayDetails.SetUser(path.Subject)
    54  	}
    55  
    56  	log.Info("Requesting content sync...")
    57  	client, err := httpclient.ClientBuilder().Build()
    58  	if err != nil {
    59  		return err
    60  	}
    61  
    62  	requestContent, err := json.Marshal(p)
    63  	if err != nil {
    64  		return errorutils.CheckError(err)
    65  	}
    66  
    67  	resp, body, err := client.SendPost(url, requestContent, mcss.BintrayDetails.CreateHttpClientDetails())
    68  	if err != nil {
    69  		return err
    70  	}
    71  
    72  	if resp.StatusCode != http.StatusOK {
    73  		return errorutils.CheckError(errors.New("bintray response: " + resp.Status + "\n" + clientutils.IndentJson(body)))
    74  	}
    75  
    76  	log.Debug("Bintray response:", resp.Status)
    77  	log.Output(clientutils.IndentJson(body))
    78  	return nil
    79  }
    80  
    81  func buildSyncURL(bt auth.BintrayDetails, p *versions.Path) (string, error) {
    82  	if anyEmpty(p.Package, p.Repo, p.Subject, p.Version) {
    83  		return "", errorutils.CheckError(errors.New("invalid path input"))
    84  	}
    85  	return bt.GetApiUrl() + path.Join("maven_central_sync", p.Subject, p.Repo, p.Package, "versions", p.Version), nil
    86  }
    87  
    88  func anyEmpty(strs ...string) bool {
    89  	for _, str := range strs {
    90  		if str == "" {
    91  			return true
    92  		}
    93  	}
    94  	return false
    95  }