diff --git a/common/src/main/java/org/geysermc/floodgate/util/HttpUtils.java b/common/src/main/java/org/geysermc/floodgate/util/HttpUtils.java index 038f6f6b..d90df756 100644 --- a/common/src/main/java/org/geysermc/floodgate/util/HttpUtils.java +++ b/common/src/main/java/org/geysermc/floodgate/util/HttpUtils.java @@ -37,21 +37,19 @@ import java.util.concurrent.Executors; import lombok.AccessLevel; import lombok.AllArgsConstructor; import lombok.Getter; +import org.checkerframework.checker.nullness.qual.NonNull; +import org.checkerframework.checker.nullness.qual.Nullable; -@SuppressWarnings("all") +// resources are properly closed and ignoring the original stack trace is intended +@SuppressWarnings({"PMD.CloseResource", "PMD.PreserveStackTrace"}) public class HttpUtils { private static final ExecutorService EXECUTOR_SERVICE = Executors.newSingleThreadExecutor(); private static final Gson GSON = new Gson(); private static final String USER_AGENT = "GeyserMC/Floodgate"; - private static final String CONNECTION_STRING = "--"; - private static final String BOUNDARY = "******"; - private static final String END = "\r\n"; public static CompletableFuture asyncGet(String urlString) { - return CompletableFuture.supplyAsync(() -> { - return get(urlString); - }, EXECUTOR_SERVICE); + return CompletableFuture.supplyAsync(() -> get(urlString), EXECUTOR_SERVICE); } public static DefaultHttpResponse get(String urlString) { @@ -83,8 +81,14 @@ public class HttpUtils { return connection; } - private static HttpResponse readResponseSilent(HttpURLConnection connection, Class clazz) { + @NonNull + private static HttpResponse readResponseSilent( + HttpURLConnection connection, + Class clazz) { InputStreamReader streamReader = createReader(connection); + if (streamReader == null) { + return new HttpResponse<>(-1, null); + } try { int responseCode = connection.getResponseCode(); @@ -100,8 +104,12 @@ public class HttpUtils { } } + @NonNull private static DefaultHttpResponse readDefaultResponse(HttpURLConnection connection) { InputStreamReader streamReader = createReader(connection); + if (streamReader == null) { + return new DefaultHttpResponse(-1, null); + } try { int responseCode = connection.getResponseCode(); @@ -117,8 +125,9 @@ public class HttpUtils { } } + @Nullable private static InputStreamReader createReader(HttpURLConnection connection) { - InputStream stream = null; + InputStream stream; try { stream = connection.getInputStream(); } catch (Exception exception) { @@ -128,7 +137,12 @@ public class HttpUtils { throw new RuntimeException("Both the input and the error stream failed?!"); } } - return new InputStreamReader(stream); + + // it's null for example when it couldn't connect to the server + if (stream != null) { + return new InputStreamReader(stream); + } + return null; } @Getter @@ -139,7 +153,7 @@ public class HttpUtils { } public static final class DefaultHttpResponse extends HttpResponse { - private DefaultHttpResponse(int httpCode, JsonObject response) { + DefaultHttpResponse(int httpCode, JsonObject response) { super(httpCode, response); } }