github.com/jfrog/jfrog-cli-core/v2@v2.51.0/artifactory/commands/utils/npmcmdutils.go (about)

     1  package utils
     2  
     3  import (
     4  	"net/http"
     5  	"strings"
     6  
     7  	outFormat "github.com/jfrog/jfrog-cli-core/v2/common/format"
     8  
     9  	"github.com/jfrog/jfrog-cli-core/v2/artifactory/utils"
    10  	"github.com/jfrog/jfrog-cli-core/v2/common/build"
    11  	"github.com/jfrog/jfrog-cli-core/v2/utils/coreutils"
    12  	"github.com/jfrog/jfrog-client-go/auth"
    13  	"github.com/jfrog/jfrog-client-go/http/httpclient"
    14  	clientutils "github.com/jfrog/jfrog-client-go/utils"
    15  	"github.com/jfrog/jfrog-client-go/utils/errorutils"
    16  	"github.com/jfrog/jfrog-client-go/utils/log"
    17  )
    18  
    19  const minSupportedArtifactoryVersionForNpmCmds = "5.5.2"
    20  
    21  func GetArtifactoryNpmRepoDetails(repo string, authArtDetails *auth.ServiceDetails) (npmAuth, registry string, err error) {
    22  	npmAuth, err = getNpmAuth(authArtDetails)
    23  	if err != nil {
    24  		return "", "", err
    25  	}
    26  
    27  	if err = utils.ValidateRepoExists(repo, *authArtDetails); err != nil {
    28  		return "", "", err
    29  	}
    30  
    31  	registry = getNpmRepositoryUrl(repo, (*authArtDetails).GetUrl())
    32  	return
    33  }
    34  
    35  func getNpmAuth(authArtDetails *auth.ServiceDetails) (npmAuth string, err error) {
    36  	// Check Artifactory version
    37  	err = validateArtifactoryVersionForNpmCmds(authArtDetails)
    38  	if err != nil {
    39  		return
    40  	}
    41  
    42  	// Get npm token from Artifactory
    43  	return getNpmAuthFromArtifactory(authArtDetails)
    44  }
    45  
    46  func validateArtifactoryVersionForNpmCmds(artDetails *auth.ServiceDetails) error {
    47  	// Get Artifactory version.
    48  	versionStr, err := (*artDetails).GetVersion()
    49  	if err != nil {
    50  		return err
    51  	}
    52  
    53  	// Validate version.
    54  	return clientutils.ValidateMinimumVersion(clientutils.Artifactory, versionStr, minSupportedArtifactoryVersionForNpmCmds)
    55  }
    56  
    57  func getNpmAuthFromArtifactory(artDetails *auth.ServiceDetails) (npmAuth string, err error) {
    58  	authApiUrl := (*artDetails).GetUrl() + "api/npm/auth"
    59  	log.Debug("Sending npm auth request")
    60  
    61  	// Get npm token from Artifactory.
    62  	client, err := httpclient.ClientBuilder().SetRetries(3).Build()
    63  	if err != nil {
    64  		return "", err
    65  	}
    66  	resp, body, _, err := client.SendGet(authApiUrl, true, (*artDetails).CreateHttpClientDetails(), "")
    67  	if err != nil {
    68  		return "", err
    69  	}
    70  	if err = errorutils.CheckResponseStatusWithBody(resp, body, http.StatusOK); err != nil {
    71  		return "", err
    72  	}
    73  
    74  	return string(body), nil
    75  }
    76  
    77  func getNpmRepositoryUrl(repo, url string) string {
    78  	if !strings.HasSuffix(url, "/") {
    79  		url += "/"
    80  	}
    81  	url += "api/npm/" + repo
    82  	return url
    83  }
    84  
    85  // Remove all the none npm CLI flags from args.
    86  func ExtractNpmOptionsFromArgs(args []string) (detailedSummary, xrayScan bool, scanOutputFormat outFormat.OutputFormat, cleanArgs []string, buildConfig *build.BuildConfiguration, err error) {
    87  	cleanArgs = append([]string(nil), args...)
    88  	cleanArgs, detailedSummary, err = coreutils.ExtractDetailedSummaryFromArgs(cleanArgs)
    89  	if err != nil {
    90  		return
    91  	}
    92  
    93  	cleanArgs, xrayScan, err = coreutils.ExtractXrayScanFromArgs(cleanArgs)
    94  	if err != nil {
    95  		return
    96  	}
    97  
    98  	cleanArgs, format, err := coreutils.ExtractXrayOutputFormatFromArgs(cleanArgs)
    99  	if err != nil {
   100  		return
   101  	}
   102  	scanOutputFormat, err = outFormat.GetOutputFormat(format)
   103  	if err != nil {
   104  		return
   105  	}
   106  	cleanArgs, buildConfig, err = build.ExtractBuildDetailsFromArgs(cleanArgs)
   107  	return
   108  }