package cc.polyfrost.oneconfig.utils; import com.google.gson.JsonElement; import org.apache.commons.io.IOUtils; import java.awt.*; import java.io.*; import java.net.HttpURLConnection; import java.net.URI; import java.net.URL; import java.nio.charset.StandardCharsets; import java.security.MessageDigest; public class NetworkUtils { private static InputStream setupConnection(String url, String userAgent, int timeout, boolean useCaches) throws IOException { HttpURLConnection connection = ((HttpURLConnection) new URL(url).openConnection()); connection.setRequestMethod("GET"); connection.setUseCaches(useCaches); connection.addRequestProperty("User-Agent", userAgent); connection.setReadTimeout(timeout); connection.setConnectTimeout(timeout); connection.setDoOutput(true); return connection.getInputStream(); } public static String getString(String url, String userAgent, int timeout, boolean useCaches) { try (InputStreamReader input = new InputStreamReader(setupConnection(url, userAgent, timeout, useCaches), StandardCharsets.UTF_8)) { return IOUtils.toString(input); } catch (Exception e) { e.printStackTrace(); return null; } } public static String getString(String url) { return getString(url, "OneConfig/1.0.0", 5000, false); } public static JsonElement getJsonElement(String url, String userAgent, int timeout, boolean useCaches) { return JsonUtils.parseString(getString(url, userAgent, timeout, useCaches)); } public static JsonElement getJsonElement(String url) { return getJsonElement(url, "OneConfig/1.0.0", 5000, false); } public static boolean downloadFile(String url, File file) { return downloadFile(url, file, "OneConfig/1.0.0", 5000, false); } public static boolean downloadFile(String url, File file, String userAgent, int timeout, boolean useCaches) { url = url.replace(" ", "%20"); try (FileOutputStream fileOut = new FileOutputStream(file); BufferedInputStream in = new BufferedInputStream(setupConnection(url, userAgent, timeout, useCaches))) { IOUtils.copy(in, fileOut); } catch (Exception e) { e.printStackTrace(); return false; } return true; } public static String getFileChecksum(String filename) { try (FileInputStream inputStream = new FileInputStream(filename)) { MessageDigest digest = MessageDigest.getInstance("SHA-256"); byte[] bytesBuffer = new byte[1024]; int bytesRead; while ((bytesRead = inputStream.read(bytesBuffer)) != -1) { digest.update(bytesBuffer, 0, bytesRead); } return convertByteArrayToHexString(digest.digest()); } catch (Exception e) { e.printStackTrace(); } return ""; } private static String convertByteArrayToHexString(byte[] arrayBytes) { StringBuilder stringBuffer = new StringBuilder(); for (byte arrayByte : arrayBytes) { stringBuffer.append(Integer.toString((arrayByte & 0xff) + 0x100, 16) .substring(1)); } return stringBuffer.toString(); } public static void browseLink(String uri) { try { browseLink(new URI(uri)); } catch (Exception e) { e.printStackTrace(); System.err.println("Invalid URI: " + uri); } } public static void browseLink(URI uri) { if(Desktop.isDesktopSupported() && Desktop.getDesktop().isSupported(Desktop.Action.BROWSE)) { try { Desktop.getDesktop().browse(uri); } catch (IOException e) { e.printStackTrace(); System.err.println("Failed to open URL in browser: " + uri); } } } }