package org.idlesoft.libraries.ghapi;
import biz.source_code.base64Coder.Base64Coder;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;
import java.net.URL;
import java.net.URLEncoder;
import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLSession;
public class APIAbstract {
public GitHubAPI api;
public String login, password;
public static class Response {
public int statusCode;
public String resp;
public String url;
}
public static class LiberalHostnameVerifier implements HostnameVerifier {
public boolean verify(String hostname, SSLSession session) {
/* Just return true */
return true;
}
}
public APIAbstract(GitHubAPI a)
{
api = a;
}
/**
* Sets login details
*
* @param l - String containing Github username
* @param p - String containing username's Github password
*/
public void login(String l, String p)
{
login = l;
password = p;
}
/**
* Sends a HTTP POST request
*
* @param url
* @param postData
* @return Response object containing status code and response body.
*/
public Response HTTPPost(String url, String postData)
{
Response response = new Response();
try {
// Setup connection
HttpsURLConnection conn = (HttpsURLConnection) (new URL(url)).openConnection();
conn.setRequestMethod("POST");
conn.setDoOutput(true);
// Add authentication details if we know them
if (api.api.login != null && api.api.password != null) {
conn.setRequestProperty("Authorization", "Basic "
+ Base64Coder.encodeString(
(api.api.login + ":" + api.api.password)).replaceAll("\\n",""));
}
conn.setHostnameVerifier(new LiberalHostnameVerifier());
conn.connect();
// Send POST data to the server
OutputStreamWriter out = new OutputStreamWriter(conn.getOutputStream());
out.write(postData);
out.flush();
// Get the response from the server
BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
StringBuilder sb = new StringBuilder();
for (String line = in.readLine(); line != null; line = in.readLine()) {
sb.append(line + '\n');
}
// Store response information in Response object
try {
response.statusCode = conn.getResponseCode();
} catch (IOException e) {
response.statusCode = 999;
}
response.resp = sb.toString();
// Clean up
conn.disconnect();
conn = null;
out = null;
in = null;
sb = null;
} catch (IOException e) {
response.statusCode = 999;
}
response.url = url;
return response;
}
/**
* Sends a HTTP GET request
*
* @param url
* @return Response object containing status code and response body.
*/
public Response HTTPGet(String url)
{
Response response = new Response();
try {
// Setup connection
HttpsURLConnection conn = (HttpsURLConnection) (new URL(url)).openConnection();
conn.setRequestMethod("GET");
// Add authentication details if we know them
if (api.api.login != null && api.api.password != null) {
conn.setRequestProperty("Authorization", "Basic "
+ Base64Coder.encodeString(
(api.api.login + ":" + api.api.password)).replaceAll("\\n",""));
}
conn.setHostnameVerifier(new LiberalHostnameVerifier());
conn.connect();
// Get response from the server
BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
StringBuilder sb = new StringBuilder();
for (String line = in.readLine(); line != null; line = in.readLine()) {
sb.append(line + '\n');
}
// Store response in a Response object
try {
response.statusCode = conn.getResponseCode();
} catch (IOException e) {
response.statusCode = 999;
}
response.resp = sb.toString();
// Clean up
conn.disconnect();
conn = null;
in = null;
sb = null;
} catch (IOException e) {
response.statusCode = 999;
}
response.url = url;
return response;
}
public static String encode(String str)
{
try {
return URLEncoder.encode(str, "UTF-8");
} catch (UnsupportedEncodingException e) {
return URLEncoder.encode(str);
}
}
}