github.com/jfrog/jfrog-cli-go@v1.22.1-0.20200318093948-4826ef344ffd/missioncontrol/commands/licenseacquire.go (about)

     1  package commands
     2  
     3  import (
     4  	"encoding/json"
     5  	"errors"
     6  	"github.com/jfrog/jfrog-cli-go/missioncontrol/utils"
     7  	"github.com/jfrog/jfrog-cli-go/utils/config"
     8  	"github.com/jfrog/jfrog-client-go/httpclient"
     9  	"github.com/jfrog/jfrog-client-go/utils/errorutils"
    10  	"github.com/jfrog/jfrog-client-go/utils/log"
    11  	"net/http"
    12  )
    13  
    14  func LicenseAcquire(bucketId string, name string, mcDetails *config.MissionControlDetails) error {
    15  	postContent := LicenseAcquireRequestContent{
    16  		Name:         name,
    17  		LicenseCount: 1,
    18  	}
    19  	requestContent, err := json.Marshal(postContent)
    20  	if err != nil {
    21  		return errorutils.CheckError(errors.New("Failed to marshal json: " + err.Error()))
    22  	}
    23  	missionControlUrl := mcDetails.Url + "api/v1/buckets/" + bucketId + "/acquire"
    24  	httpClientDetails := utils.GetMissionControlHttpClientDetails(mcDetails)
    25  	client, err := httpclient.ClientBuilder().Build()
    26  	if err != nil {
    27  		return err
    28  	}
    29  	resp, body, err := client.SendPost(missionControlUrl, requestContent, httpClientDetails)
    30  	if err != nil {
    31  		return err
    32  	}
    33  	if resp.StatusCode != http.StatusOK {
    34  		return errorutils.CheckError(errors.New(resp.Status + ". " + utils.ReadMissionControlHttpMessage(body)))
    35  	}
    36  	log.Debug("Mission Control response: " + resp.Status)
    37  
    38  	// Extract license from response
    39  	var licenseKeys licenseKeys
    40  	err = json.Unmarshal(body, &licenseKeys)
    41  	if err != nil {
    42  		return errorutils.CheckError(err)
    43  	}
    44  	if len(licenseKeys.LicenseKeys) < 1 {
    45  		return errorutils.CheckError(errors.New("failed to acquire license key from Mission Control: received 0 license keys"))
    46  	}
    47  	// Print license to log
    48  	log.Output(licenseKeys.LicenseKeys[0])
    49  	return nil
    50  }
    51  
    52  type LicenseAcquireRequestContent struct {
    53  	Name         string `json:"name,omitempty"`
    54  	LicenseCount int    `json:"license_count,omitempty"`
    55  }
    56  
    57  type licenseKeys struct {
    58  	LicenseKeys []string `json:"license_keys,omitempty"`
    59  }