// Copyright (c) 2015, Christopher "BlayTheNinth" Baker
package net.blay09.mods.eirairc.addon;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import net.blay09.mods.eirairc.api.upload.UploadHoster;
import net.blay09.mods.eirairc.api.upload.UploadedFile;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
public class ImgurHoster implements UploadHoster {
private static final Logger logger = LogManager.getLogger();
private static final String API = "https://api.imgur.com/3/image.json";
private static final String IMAGE_BASE_URL = "https://imgur.com/";
private static final String API_CLIENT_ID = "d47c0303c944643";
@Override
public UploadedFile uploadFile(File file, int uploadBufferSize) {
if(!file.exists()) {
return null;
}
try {
HttpURLConnection con = (HttpURLConnection) new URL(API).openConnection();
con.setDoOutput(true);
con.setRequestProperty("Authorization", "Client-ID " + API_CLIENT_ID);
OutputStream out = con.getOutputStream();
FileInputStream fis = new FileInputStream(file);
byte[] buffer = new byte[uploadBufferSize];
int len;
while((len = fis.read(buffer)) != -1) {
out.write(buffer, 0, len);
}
fis.close();
out.flush();
out.close();
String result = null;
if(con.getResponseCode() == HttpURLConnection.HTTP_OK) {
result = handleResponse(con.getInputStream());
} else {
handleError(con.getErrorStream());
}
con.disconnect();
if(result != null) {
return new UploadedFile(result, result + ".png", null);
} else {
return null;
}
} catch (IOException e) {
e.printStackTrace();
return null;
}
}
private String handleResponse(InputStream in) {
StringBuilder sb = new StringBuilder();
Scanner scanner = new Scanner(in);
while(scanner.hasNext()) {
sb.append(scanner.next());
}
scanner.close();
JsonParser parser = new JsonParser();
JsonElement element = parser.parse(sb.toString());
if(element.isJsonObject()) {
JsonObject root = element.getAsJsonObject();
JsonObject data = root.getAsJsonObject("data");
String imageId = data.get("id").getAsString();
String deleteHash = data.get("deletehash").getAsString();
String result = IMAGE_BASE_URL + imageId;
logger.info("Uploaded image to imgur at {} (delete hash: {})", result, deleteHash);
return result;
}
logger.error("Upload failed due to invalid response: {}", sb.toString());
return null;
}
private void handleError(InputStream in) {
StringBuilder sb = new StringBuilder();
Scanner scanner = new Scanner(in);
while(scanner.hasNext()) {
sb.append(scanner.next());
}
scanner.close();
logger.error("Failed to upload to imgur: {}", sb.toString());
}
@Override
public String getName() {
return "imgur";
}
}