package org.jfrog.bamboo.bintray.client; import org.apache.commons.io.IOUtils; import org.apache.commons.lang3.CharEncoding; import org.apache.http.HttpResponse; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpPost; import org.apache.http.entity.StringEntity; import org.apache.http.impl.client.DefaultHttpClient; import org.jfrog.bamboo.admin.BintrayConfig; import org.jfrog.bamboo.admin.ServerConfig; import org.jfrog.bamboo.bintray.MavenSyncHelper; import org.jfrog.bamboo.util.HttpUtils; import java.util.Map; /** * HttpClient for Bintray Rest calls * * @author Aviad Shikloshi */ public class BintrayClient { public static final String CLOSE_REPO_PARAM = "1"; private HttpClient client = new DefaultHttpClient(); private BintrayConfig bintrayConfig; public BintrayClient(BintrayConfig bintrayConfig) { this.bintrayConfig = bintrayConfig; } /** * Sync your build from Bintray to Maven Central */ public String mavenCentralSync(String subject, String repo, String packageName, String version) { try { String apiUri = MavenSyncHelper.getMavenSyncEndpoint() + HttpUtils.encodePath(subject) + "/" + HttpUtils.encodePath(repo) + "/" + HttpUtils.encodePath(packageName) + "/versions/" + HttpUtils.encodePath(version); MavenCentralSyncModel model = new MavenCentralSyncModel(bintrayConfig.getSonatypeOssUsername(), bintrayConfig.getSonatypeOssPassword(), CLOSE_REPO_PARAM); HttpPost mavenSyncRequest = new HttpPost(apiUri); mavenSyncRequest.setHeader(HttpUtils.createAuthorizationHeader(bintrayConfig.getBintrayUsername(), bintrayConfig.getBintrayApiKey())); String jsonString = HttpUtils.jsonStringToObject(model); mavenSyncRequest.setEntity(new StringEntity(jsonString)); HttpResponse response = this.client.execute(mavenSyncRequest); return IOUtils.toString(response.getEntity().getContent()); } catch (Exception e) { throw new RuntimeException("Error while trying to sync with Sonatype OSS.", e); } } public Map<String, Object> getBintrayJsonFileLocation(ServerConfig artifactoryConfig, String buildName, String buildNumber) { String searchJson = MavenSyncHelper.createArtifactBuildSearchQuery(buildName, buildNumber); String apiUri = artifactoryConfig.getUrl() + "/api/search/buildArtifacts"; HttpPost buildArtifactSearch = new HttpPost(apiUri); buildArtifactSearch.setHeader(HttpUtils.createAuthorizationHeader(artifactoryConfig.getUsername(), artifactoryConfig.getPassword())); buildArtifactSearch.setHeader("Content-Type", "application/json"); try { buildArtifactSearch.setEntity(new StringEntity(searchJson)); HttpResponse response = this.client.execute(buildArtifactSearch); String responseBody = IOUtils.toString(response.getEntity().getContent(), CharEncoding.UTF_8); return HttpUtils.objectFromJsonString(responseBody, Map.class); } catch (Exception e) { throw new RuntimeException("Error while trying to get bintray-info.json file.", e); } } public Map<String, Object> downloadBintrayInfoDescriptor(ServerConfig artifactoryConfig, String fileUrl) { HttpGet downloadRequest = new HttpGet(fileUrl); downloadRequest.setHeader(HttpUtils.createAuthorizationHeader(artifactoryConfig.getUsername(), artifactoryConfig.getPassword())); try { HttpResponse fileResponse = client.execute(downloadRequest); String jsonDescriptorString = IOUtils.toString(fileResponse.getEntity().getContent(), CharEncoding.UTF_8); return HttpUtils.objectFromJsonString(jsonDescriptorString, Map.class); } catch (Exception e) { throw new RuntimeException("Could not download bintray-config.json file.", e); } } }