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 }