func GpgSignFile(pathDetails *utils.PathDetails, passphrase string, bintrayDetails *config.BintrayDetails) error { if bintrayDetails.User == "" { bintrayDetails.User = pathDetails.Subject } url := bintrayDetails.ApiUrl + "gpg/" + pathDetails.Subject + "/" + pathDetails.Repo + "/" + pathDetails.Path var data string if passphrase != "" { data = "{ \"passphrase\": \"" + passphrase + "\" }" } log.Info("GPG signing file...") httpClientsDetails := utils.GetBintrayHttpClientDetails(bintrayDetails) resp, body, err := ioutils.SendPost(url, []byte(data), httpClientsDetails) if err != nil { return err } if resp.StatusCode != 200 { return cliutils.CheckError(errors.New("Bintray response: " + resp.Status + "\n" + cliutils.IndentJson(body))) } log.Debug("Bintray response:", resp.Status) log.Info("GPG signed file", pathDetails.Path, ", details:") fmt.Println(cliutils.IndentJson(body)) return nil }
func AddInstance(instanceName string, flags *AddInstanceFlags) error { data := AddInstanceRequestContent{ Name: instanceName, Url: flags.ArtifactoryInstanceDetails.Url, User: flags.ArtifactoryInstanceDetails.User, Password: flags.ArtifactoryInstanceDetails.Password, Description: flags.Description, Location: flags.Location} requestContent, err := json.Marshal(data) if err != nil { return cliutils.CheckError(errors.New("Failed to execute request. " + cliutils.GetDocumentationMessage())) } missionControlUrl := flags.MissionControlDetails.Url + "api/v1/instances" httpClientDetails := utils.GetMissionControlHttpClientDetails(flags.MissionControlDetails) resp, body, err := ioutils.SendPost(missionControlUrl, requestContent, httpClientDetails) if err != nil { return err } if resp.StatusCode == 201 || resp.StatusCode == 204 { fmt.Println("Mission Control response: " + resp.Status) } else { return cliutils.CheckError(errors.New(resp.Status + ". " + utils.ReadMissionControlHttpMessage(body))) } return nil }
func moveFile(sourcePath, destPath string, flags *MoveFlags, moveType MoveType) (bool, error) { message := moveMsgs[moveType].MovingMsg + " artifact: " + sourcePath + " to: " + destPath if flags.DryRun == true { log.Info("[Dry run] ", message) return true, nil } log.Info(message) moveUrl := flags.ArtDetails.Url restApi := "api/" + string(moveType) + "/" + sourcePath requestFullUrl, err := BuildArtifactoryUrl(moveUrl, restApi, map[string]string{"to": destPath}) if err != nil { return false, err } httpClientsDetails := GetArtifactoryHttpClientDetails(flags.ArtDetails) resp, body, err := ioutils.SendPost(requestFullUrl, nil, httpClientsDetails) if err != nil { return false, err } if resp.StatusCode != 200 { log.Error("Artifactory response: " + resp.Status + "\n" + cliutils.IndentJson(body)) } log.Debug("Artifactory response:", resp.Status) return resp.StatusCode == 200, nil }
func DoCreatePackage(packageDetails *utils.VersionDetails, flags *utils.PackageFlags) (*http.Response, []byte, error) { if flags.BintrayDetails.User == "" { flags.BintrayDetails.User = packageDetails.Subject } data := utils.CreatePackageJson(packageDetails.Package, flags) url := flags.BintrayDetails.ApiUrl + "packages/" + packageDetails.Subject + "/" + packageDetails.Repo httpClientsDetails := utils.GetBintrayHttpClientDetails(flags.BintrayDetails) return ioutils.SendPost(url, []byte(data), httpClientsDetails) }
func BuildDistribute(buildName, buildNumber, targetRepo string, flags *BuildDistributionFlags) error { err := utils.PreCommandSetup(flags) if err != nil { return err } dryRun := "" if flags.DryRun == true { dryRun = "[Dry run] " } message := "Destributing build..." log.Info(dryRun + message) distributeUrl := flags.ArtDetails.Url restApi := path.Join("api/build/distribute/", buildName, buildNumber) requestFullUrl, err := utils.BuildArtifactoryUrl(distributeUrl, restApi, make(map[string]string)) if err != nil { return err } data := BuildDistributionConfig{ SourceRepos: strings.Split(flags.SourceRepos, ","), TargetRepo: targetRepo, Publish: flags.Publish, OverrideExistingFiles: flags.OverrideExistingFiles, GpgPassphrase: flags.GpgPassphrase, Async: flags.Async, DryRun: flags.DryRun} requestContent, err := json.Marshal(data) if err != nil { return cliutils.CheckError(errors.New("Failed to execute request. " + cliutils.GetDocumentationMessage())) } httpClientsDetails := utils.GetArtifactoryHttpClientDetails(flags.ArtDetails) utils.SetContentType("application/json", &httpClientsDetails.Headers) resp, body, err := ioutils.SendPost(requestFullUrl, requestContent, httpClientsDetails) if err != nil { return err } if resp.StatusCode != 200 { return cliutils.CheckError(errors.New("Artifactory response: " + resp.Status + "\n" + cliutils.IndentJson(body))) } log.Debug("Artifactory response:", resp.Status) if flags.Async && !flags.DryRun { log.Info("Asynchronously distributed build", buildName, "#"+buildNumber, "to:", targetRepo, "repository, logs are avalable in Artifactory.") return nil } log.Info(dryRun+"Distributed build", buildName, "#"+buildNumber, "to:", targetRepo, "repository.") return nil }
func AqlSearch(aqlQuery string, flags AqlSearchFlag) ([]AqlSearchResultItem, error) { aqlUrl := flags.GetArtifactoryDetails().Url + "api/search/aql" log.Debug("Searching Artifactory using AQL query:", aqlQuery) httpClientsDetails := GetArtifactoryHttpClientDetails(flags.GetArtifactoryDetails()) resp, json, err := ioutils.SendPost(aqlUrl, []byte(aqlQuery), httpClientsDetails) if err != nil { return nil, err } if resp.StatusCode != 200 { return nil, cliutils.CheckError(errors.New("Artifactory response: " + resp.Status + "\n" + cliutils.IndentJson(json))) } log.Debug("Artifactory response: ", resp.Status) resultItems, err := parseAqlSearchResponse(json) return resultItems, err }
func AttachLic(instanceName string, flags *AttachLicFlags) error { prepareLicenseFile(flags.LicensePath, flags.Override) postContent := utils.LicenseRequestContent{ Name: instanceName, NodeID: flags.NodeId, Deploy: flags.Deploy} requestContent, err := json.Marshal(postContent) if err != nil { return cliutils.CheckError(errors.New("Failed to marshal json. " + cliutils.GetDocumentationMessage())) } missionControlUrl := flags.MissionControlDetails.Url + "api/v1/buckets/" + flags.BucketId + "/licenses" httpClientDetails := utils.GetMissionControlHttpClientDetails(flags.MissionControlDetails) resp, body, err := ioutils.SendPost(missionControlUrl, requestContent, httpClientDetails) if err != nil { return err } if resp.StatusCode != 200 { if flags.LicensePath != "" { os.Remove(flags.LicensePath) } return cliutils.CheckError(errors.New(resp.Status + ". " + utils.ReadMissionControlHttpMessage(body))) } fmt.Println("Mission Control response: " + resp.Status) if flags.LicensePath == "" { var m Message m, err = extractJsonValue(body) if err != nil { return err } requestContent, err = json.Marshal(m) err = cliutils.CheckError(err) if err != nil { return err } fmt.Println(string(requestContent)) } else { var licenseKey []byte licenseKey, err = getLicenseFromJson(body) if err != nil { return err } err = saveLicense(flags.LicensePath, licenseKey) } return nil }
func doCreateVersion(versionDetails *utils.VersionDetails, flags *utils.VersionFlags, bintrayDetails *config.BintrayDetails) (*http.Response, []byte, error) { if bintrayDetails.User == "" { bintrayDetails.User = versionDetails.Subject } var data string if flags != nil { data = utils.CreateVersionJson(versionDetails.Version, flags) } else { m := map[string]string{ "name": versionDetails.Version} data = cliutils.MapToJson(m) } url := bintrayDetails.ApiUrl + "packages/" + versionDetails.Subject + "/" + versionDetails.Repo + "/" + versionDetails.Package + "/versions" httpClientsDetails := utils.GetBintrayHttpClientDetails(bintrayDetails) return ioutils.SendPost(url, []byte(data), httpClientsDetails) }
func CreateAccessKey(flags *AccessKeyFlags, org string) (err error) { data := BuildAccessKeyJson(flags, true) url := GetAccessKeysPath(flags.BintrayDetails, org) httpClientsDetails := utils.GetBintrayHttpClientDetails(flags.BintrayDetails) log.Info("Creating access key...") resp, body, err := ioutils.SendPost(url, []byte(data), httpClientsDetails) if err != nil { return } if resp.StatusCode != 201 { return cliutils.CheckError(errors.New("Bintray response: " + resp.Status + "\n" + cliutils.IndentJson(body))) } log.Debug("Bintray response:", resp.Status) log.Info("Created access key, details:") fmt.Println(cliutils.IndentJson(body)) return }
func CreateEntitlement(flags *EntitlementFlags, details *utils.VersionDetails) (err error) { var path = BuildEntitlementsUrl(flags.BintrayDetails, details) if flags.BintrayDetails.User == "" { flags.BintrayDetails.User = details.Subject } data := buildEntitlementJson(flags, true) httpClientsDetails := utils.GetBintrayHttpClientDetails(flags.BintrayDetails) log.Info("Creating entitlement...") resp, body, err := ioutils.SendPost(path, []byte(data), httpClientsDetails) if err != nil { return } if resp.StatusCode != 201 { return cliutils.CheckError(errors.New("Bintray response: " + resp.Status + "\n" + cliutils.IndentJson(body))) } log.Debug("Bintray response:", resp.Status) log.Info("Created entitlement, details:") fmt.Println(cliutils.IndentJson(body)) return }
func PublishVersion(versionDetails *utils.VersionDetails, bintrayDetails *config.BintrayDetails) error { if bintrayDetails.User == "" { bintrayDetails.User = versionDetails.Subject } url := bintrayDetails.ApiUrl + "content/" + versionDetails.Subject + "/" + versionDetails.Repo + "/" + versionDetails.Package + "/" + versionDetails.Version + "/publish" log.Info("Publishing version...") httpClientsDetails := utils.GetBintrayHttpClientDetails(bintrayDetails) resp, body, err := ioutils.SendPost(url, nil, httpClientsDetails) if err != nil { return err } if resp.StatusCode != 200 { return cliutils.CheckError(errors.New("Bintray response: " + resp.Status + "\n" + cliutils.IndentJson(body))) } log.Debug("Bintray response:", resp.Status) log.Info("Published version", versionDetails.Version+", details:") fmt.Println(cliutils.IndentJson(body)) return nil }
func createBintrayRepo() { content, err := ioutil.ReadFile(tests.GetTestResourcesPath() + tests.BintrayTestRepositoryConfig) if cliutils.CheckError(err) != nil { os.Exit(1) } apiUrl := bintrayConfig.ApiUrl + path.Join("repos", bintrayConfig.User, tests.BintrayRepo1) clientDetails := ioutils.HttpClientDetails{ User: bintrayConfig.User, Password: bintrayConfig.Key, Headers: map[string]string{"Content-Type": "application/json"}} resp, body, err := ioutils.SendPost(apiUrl, content, clientDetails) if cliutils.CheckError(err) != nil { os.Exit(1) } if resp.StatusCode != 200 && resp.StatusCode != 201 && resp.StatusCode != 409 { log.Error(resp.Status) log.Error(string(body)) os.Exit(1) } }
func SignVersion(urlSigningDetails *utils.PathDetails, flags *UrlSigningFlags) error { if flags.BintrayDetails.User == "" { flags.BintrayDetails.User = urlSigningDetails.Subject } path := urlSigningDetails.Subject + "/" + urlSigningDetails.Repo + "/" + urlSigningDetails.Path url := flags.BintrayDetails.ApiUrl + "signed_url/" + path data := builJson(flags) log.Info("Signing URL...") httpClientsDetails := utils.GetBintrayHttpClientDetails(flags.BintrayDetails) resp, body, err := ioutils.SendPost(url, []byte(data), httpClientsDetails) if err != nil { return err } if resp.StatusCode != 200 { return cliutils.CheckError(errors.New("Bintray response: " + resp.Status + "\n" + cliutils.IndentJson(body))) } log.Debug("Bintray response:", resp.Status) log.Info("Signed URL", path+", details:") fmt.Println(cliutils.IndentJson(body)) return nil }