package launchserver.helpers;
import com.eclipsesource.json.Json;
import com.eclipsesource.json.JsonObject;
import com.eclipsesource.json.WriterConfig;
import launcher.helper.IOHelper;
import launcher.helper.LogHelper;
import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
public class HTTPRequestHelper {
private static HttpURLConnection makeRequest(URL url, String requestMethod) throws IOException {
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod(requestMethod);
return connection;
}
public static JsonObject makeAuthlibRequest(URL url, JsonObject request, String requestType) throws IOException
{
HttpURLConnection connection = request == null ?
(HttpURLConnection) IOHelper.newConnection(url) :
IOHelper.newConnectionPost(url);
// Make request
if (request != null)
{
connection.setRequestProperty("Content-Type", "application/json");
try (OutputStream output = connection.getOutputStream())
{
output.write(request.toString(WriterConfig.MINIMAL).getBytes(StandardCharsets.UTF_8));
}
}
int statusCode = connection.getResponseCode();
// Read response
InputStream errorInput = connection.getErrorStream();
try (InputStream input = errorInput == null ? connection.getInputStream() : errorInput)
{
String charset = connection.getContentEncoding();
Charset charsetObject = charset == null ?
IOHelper.UNICODE_CHARSET : Charset.forName(charset);
// Parse response
String json = new String(IOHelper.read(input), charsetObject);
LogHelper.subDebug("Raw " + requestType + " response: '" + json + '\'');
if (200 <= statusCode && statusCode < 300)
{
return Json.parse(json).asObject();
}
else
{
return json.isEmpty() ? null : Json.parse(json).asObject();
}
}
}
public static boolean fileExist(URL url) throws IOException {
HttpURLConnection request = makeRequest(url, "HEAD");
int responseCode = request.getResponseCode();
return responseCode >= 200 && responseCode < 300;
}
public static String getFile(URL url) throws IOException {
HttpURLConnection request = makeRequest(url, "GET");
BufferedReader in = new BufferedReader(new InputStreamReader(request.getInputStream()));
StringBuilder response = new StringBuilder();
String inputLine;
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
return response.toString();
}
public static int authJoinRequest(URL url, JsonObject request, String authType) throws IOException
{
HttpURLConnection connection = request == null ?
(HttpURLConnection) IOHelper.newConnection(url) :
IOHelper.newConnectionPost(url);
// Make request
if (request != null)
{
connection.setRequestProperty("Content-Type", "application/json");
try (OutputStream output = connection.getOutputStream())
{
output.write(request.toString(WriterConfig.MINIMAL).getBytes(StandardCharsets.UTF_8));
}
}
int statusCode = connection.getResponseCode();
LogHelper.subDebug("Raw " + authType + " status сode: '" + statusCode + '\'');
return statusCode;
}
}