package com.door43.tools.reporting;
import android.util.Pair;
import org.json.JSONObject;
import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.ByteArrayOutputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import java.io.StringWriter;
import java.io.Writer;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.List;
/**
* Created by joel on 8/21/2015.
*/
public class Github {
private final String mApiUrl;
public Github(String apiUrl) {
mApiUrl = apiUrl;
}
/**
* Returns the latest release in this repository
* @return
* @throws IOException
*/
public String getLatestRelease() throws IOException {
return getRequest("releases/latest");
}
/**
* Performs a get request
* @param apiMethod
* @return
* @throws IOException
*/
private String getRequest(String apiMethod) throws IOException {
HttpURLConnection urlConnection = null;
try {
URL url = new URL(mApiUrl + '/' + apiMethod);
urlConnection = (HttpURLConnection) url.openConnection();
InputStream in = new BufferedInputStream(urlConnection.getInputStream());
String response = convertStreamToString(in);
urlConnection.disconnect();
return response;
} finally {
if(urlConnection != null) {
urlConnection.disconnect();
}
}
}
/**
* Converts the input stream to a string
* @param inputStream
* @return
* @throws IOException
*/
private static String convertStreamToString(InputStream inputStream) throws IOException {
if (inputStream != null) {
Writer writer = new StringWriter();
char[] buffer = new char[1024];
try {
Reader reader = new BufferedReader(new InputStreamReader(inputStream, "UTF-8"),1024);
int n;
while ((n = reader.read(buffer)) != -1) {
writer.write(buffer, 0, n);
}
} finally {
inputStream.close();
}
return writer.toString();
} else {
return null;
}
}
/**
* Performs a post request against the github api.
* @param apiMethod
* @param headers
* @param payload the data to submit to the server
* @return null if the postRequest fails or the response
*/
public String postRequest(String apiMethod, List<Pair<String, String>> headers, String payload) throws IOException {
HttpURLConnection urlConnection = null;
try {
String urlString = apiMethod.isEmpty() ? mApiUrl : mApiUrl + '/' + apiMethod;
URL url = new URL(urlString);
urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.setRequestMethod("POST");
// headers
if(headers != null) {
for (Pair<String, String> h : headers) {
urlConnection.setRequestProperty(h.first, h.second);
}
}
// payload
if(payload != null) {
urlConnection.setDoOutput(true);
DataOutputStream out = new DataOutputStream(urlConnection.getOutputStream());
out.writeBytes(payload);
out.flush();
out.close();
}
int responseCode = urlConnection.getResponseCode();
// response
BufferedInputStream bis = new BufferedInputStream(urlConnection.getInputStream());
ByteArrayOutputStream baos = new ByteArrayOutputStream();
int current;
while ((current = bis.read()) != -1) {
baos.write((byte) current);
}
String response = baos.toString("UTF-8");
return response;
} finally {
if(urlConnection != null) {
urlConnection.disconnect();
}
}
}
}