Version 1.3

No more dependencies! Everything uses base Java 1.8
pull/2/head
Etzelia 2018-09-28 23:13:28 -05:00
parent b32df43685
commit 159d233fc5
5 changed files with 215 additions and 80 deletions

View File

@ -6,7 +6,7 @@
<groupId>xyz.etztech</groupId>
<artifactId>EtzCore</artifactId>
<version>1.2</version>
<version>1.3</version>
<build>
<plugins>
<plugin>
@ -26,11 +26,6 @@
<artifactId>spigot-api</artifactId>
<version>1.13.1-R0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.5</version>
</dependency>
</dependencies>
<repositories>

View File

@ -4,6 +4,7 @@ package xyz.etztech.core.maven;
import org.bukkit.plugin.java.JavaPlugin;
import java.io.File;
import java.io.InputStream;
import java.lang.reflect.Method;
import java.net.URL;
import java.net.URLClassLoader;
@ -58,7 +59,9 @@ public final class MavenLoader {
name, repository));
URL url = getURL(group, artifact, version, repository);
Files.copy(url.openStream(), jarFile.toPath());
try (InputStream in = url.openStream()) {
Files.copy(in, jarFile.toPath());
}
} catch (Exception e) {
e.printStackTrace();

View File

@ -52,6 +52,14 @@ public class CoreResponse {
}
}
public JsonObject getJson() {
return json;
}
public void setJson(JsonObject json) {
this.json = json;
}
public Boolean getStatus() {
return status;
}

View File

@ -1,35 +1,32 @@
package xyz.etztech.core.web;
import org.apache.commons.lang.StringUtils;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import org.bukkit.Bukkit;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.plugin.Plugin;
import org.bukkit.scheduler.BukkitScheduler;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.util.*;
import java.util.logging.Logger;
public class CoreWeb {
private static final BukkitScheduler schedule = Bukkit.getScheduler();
private static BukkitScheduler schedule = null;
private static final Logger logger = Logger.getLogger("Minecraft");
static {
try {
schedule = Bukkit.getScheduler();
} catch (Exception ex) {
logger.warning("Could not get scheduler. Is this running outside Minecraft?");
}
}
/**
* @param plugin The calling plugin
* @param url The URL to call
@ -37,15 +34,8 @@ public class CoreWeb {
*/
public static void asyncGet(final Plugin plugin, final String url, final Map<String, String> data) {
schedule.runTaskAsynchronously(plugin, () -> {
ArrayList<String> query = new ArrayList<>();
for (String key : data.keySet()) {
query.add(key + "=" + data.get(key));
}
String dataQuery = StringUtils.join(query, "&");
try {
HttpClient client = HttpClients.createDefault();
HttpGet get = new HttpGet(url + "?" + dataQuery);
client.execute(get);
HTTP(url, HttpMethod.GET, data);
} catch (Exception ex) {
logger.warning("GET request failed. (" + url + ")");
}
@ -61,29 +51,12 @@ public class CoreWeb {
*/
public static void asyncGetCallback(final Plugin plugin, final String url, final Map<String, String> data, final ICallback callback) {
schedule.runTaskAsynchronously(plugin, () -> {
StringBuilder result = new StringBuilder();
ArrayList<String> query = new ArrayList<>();
for (String key : data.keySet()) {
query.add(key + "=" + data.get(key));
}
String dataQuery = StringUtils.join(query, "&");
try {
HttpClient client = HttpClients.createDefault();
HttpGet get = new HttpGet(url + "?" + dataQuery);
HttpResponse response = client.execute(get);
HttpEntity entity = response.getEntity();
InputStream input = entity.getContent();
BufferedReader in = new BufferedReader(new InputStreamReader(input));
String inputLine;
while ((inputLine = in.readLine()) != null) {
result.append(inputLine);
}
input.close();
String result = HTTP(url, HttpMethod.GET, data);
callback.invoke(result);
} catch (Exception ex) {
logger.warning("GET request failed. (" + url + ")");
}
callback.invoke(result.toString());
});
}
@ -95,14 +68,7 @@ public class CoreWeb {
public static void asyncPost(final Plugin plugin, final String url, final Map<String, String> data) {
schedule.runTaskAsynchronously(plugin, () -> {
try {
HttpClient client = HttpClients.createDefault();
HttpPost post = new HttpPost(url);
List<NameValuePair> params = new ArrayList<>();
for (String key : data.keySet()) {
params.add(new BasicNameValuePair(key, data.get(key)));
}
post.setEntity(new UrlEncodedFormEntity(params, "UTF-8"));
client.execute(post);
HTTP(url, HttpMethod.POST, data);
} catch (Exception ex) {
logger.warning("POST request failed. (" + url + ")");
}
@ -118,29 +84,48 @@ public class CoreWeb {
*/
public static void asyncPostCallback(final Plugin plugin, final String url, final Map<String, String> data, final ICallback callback) {
schedule.runTaskAsynchronously(plugin, () -> {
StringBuilder result = new StringBuilder();
try {
HttpClient client = HttpClients.createDefault();
HttpPost post = new HttpPost(url);
List<NameValuePair> params = new ArrayList<>();
for (String key : data.keySet()) {
params.add(new BasicNameValuePair(key, data.get(key)));
}
post.setEntity(new UrlEncodedFormEntity(params, "UTF-8"));
HttpResponse response = client.execute(post);
HttpEntity entity = response.getEntity();
InputStream input = entity.getContent();
BufferedReader in = new BufferedReader(new InputStreamReader(input));
String inputLine;
while ((inputLine = in.readLine()) != null) {
result.append(inputLine);
}
input.close();
String result = HTTP(url, HttpMethod.POST, data);
callback.invoke(result);
} catch (Exception ex) {
logger.warning("POST request failed. (" + url + ")");
}
callback.invoke(result.toString());
});
}
public enum HttpMethod {
GET, POST
}
public static String HTTP(String endpoint, HttpMethod method, Map<String, String> data) throws Exception {
if (method == HttpMethod.POST) {
MultipartUtility request = new MultipartUtility(endpoint, "utf-8");
for (String key : data.keySet()) {
request.addFormField(key, data.get(key));
}
return request.finish();
}
// Set up data
StringJoiner sj = new StringJoiner("&");
for(Map.Entry<String,String> entry : data.entrySet())
sj.add(URLEncoder.encode(entry.getKey(), "UTF-8") + "="
+ URLEncoder.encode(entry.getValue(), "UTF-8"));
// Set up URL
endpoint += "?" + sj.toString();
URL url = new URL(endpoint);
HttpURLConnection http = (HttpURLConnection) url.openConnection();
StringBuilder result = new StringBuilder();
BufferedReader in = new BufferedReader(new InputStreamReader(http.getInputStream()));
String inputLine;
while ((inputLine = in.readLine()) != null) {
result.append(inputLine);
}
http.disconnect();
return result.toString();
}
}

View File

@ -0,0 +1,144 @@
package xyz.etztech.core.web;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection;
import java.util.ArrayList;
import java.util.List;
public class MultipartUtility {
private final String boundary;
private static final String LINE_FEED = "\r\n";
private HttpURLConnection httpConn;
private String charset;
private OutputStream outputStream;
private PrintWriter writer;
/**
* This constructor initializes a new HTTP POST request with content type
* is set to multipart/form-data
* @param requestURL
* @param charset
* @throws IOException
*/
public MultipartUtility(String requestURL, String charset)
throws IOException {
this.charset = charset;
// creates a unique boundary based on time stamp
boundary = "===" + System.currentTimeMillis() + "===";
URL url = new URL(requestURL);
httpConn = (HttpURLConnection) url.openConnection();
httpConn.setUseCaches(false);
httpConn.setDoOutput(true); // indicates POST method
httpConn.setDoInput(true);
httpConn.setRequestProperty("Content-Type",
"multipart/form-data; boundary=" + boundary);
httpConn.setRequestProperty("User-Agent", "EtzCore Agent");
outputStream = httpConn.getOutputStream();
writer = new PrintWriter(new OutputStreamWriter(outputStream, charset),
true);
}
/**
* Adds a form field to the request
* @param name field name
* @param value field value
*/
public void addFormField(String name, String value) {
writer.append("--" + boundary).append(LINE_FEED);
writer.append("Content-Disposition: form-data; name=\"" + name + "\"")
.append(LINE_FEED);
writer.append("Content-Type: text/plain; charset=" + charset).append(
LINE_FEED);
writer.append(LINE_FEED);
writer.append(value).append(LINE_FEED);
writer.flush();
}
/**
* Adds a upload file section to the request
* @param fieldName name attribute in <input type="file" name="..." />
* @param uploadFile a File to be uploaded
* @throws IOException
*/
public void addFilePart(String fieldName, File uploadFile)
throws IOException {
String fileName = uploadFile.getName();
writer.append("--" + boundary).append(LINE_FEED);
writer.append(
"Content-Disposition: form-data; name=\"" + fieldName
+ "\"; filename=\"" + fileName + "\"")
.append(LINE_FEED);
writer.append(
"Content-Type: "
+ URLConnection.guessContentTypeFromName(fileName))
.append(LINE_FEED);
writer.append("Content-Transfer-Encoding: binary").append(LINE_FEED);
writer.append(LINE_FEED);
writer.flush();
FileInputStream inputStream = new FileInputStream(uploadFile);
byte[] buffer = new byte[4096];
int bytesRead = -1;
while ((bytesRead = inputStream.read(buffer)) != -1) {
outputStream.write(buffer, 0, bytesRead);
}
outputStream.flush();
inputStream.close();
writer.append(LINE_FEED);
writer.flush();
}
/**
* Adds a header field to the request.
* @param name - name of the header field
* @param value - value of the header field
*/
public void addHeaderField(String name, String value) {
writer.append(name + ": " + value).append(LINE_FEED);
writer.flush();
}
/**
* Completes the request and receives response from the server.
* @return a String as response.
* @throws IOException Non-OK status
*/
public String finish() throws IOException {
StringBuilder response = new StringBuilder();
writer.append(LINE_FEED).flush();
writer.append("--" + boundary + "--").append(LINE_FEED);
writer.close();
// checks server's status code first
int status = httpConn.getResponseCode();
if (status < 300) { // 2xx generally considered OK
BufferedReader reader = new BufferedReader(new InputStreamReader(
httpConn.getInputStream()));
String line = null;
while ((line = reader.readLine()) != null) {
response.append(line);
}
reader.close();
httpConn.disconnect();
} else {
throw new IOException("Server returned non-OK status: " + status);
}
return response.toString();
}
}