From e0c64219bcef6f4dc95e2fe3e407a155d0ee2c2e Mon Sep 17 00:00:00 2001 From: BuildTools Date: Fri, 18 Aug 2023 18:06:28 +0300 Subject: [PATCH] Fix[api]: Automatically URL-encode all query params and values Not doing this coused issues on Android 6 with Modrinth facets --- .../modloaders/modpacks/api/ApiHandler.java | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/modloaders/modpacks/api/ApiHandler.java b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/modloaders/modpacks/api/ApiHandler.java index 6de53db0a..4c03ecf2b 100644 --- a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/modloaders/modpacks/api/ApiHandler.java +++ b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/modloaders/modpacks/api/ApiHandler.java @@ -10,11 +10,14 @@ import net.kdt.pojavlaunch.Tools; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; +import java.io.UnsupportedEncodingException; import java.net.HttpURLConnection; import java.net.URL; +import java.net.URLEncoder; import java.nio.charset.StandardCharsets; import java.util.HashMap; import java.util.Map; +import java.util.Objects; @SuppressWarnings("unused") public class ApiHandler { @@ -110,8 +113,11 @@ public class ApiHandler { private static String parseQueries(HashMap query) { StringBuilder params = new StringBuilder("?"); for (String param : query.keySet()) { - Object value = query.get(param); - params.append(param).append("=").append(value).append("&"); + String value = Objects.toString(query.get(param)); + params.append(urlEncodeUTF8(param)) + .append("=") + .append(urlEncodeUTF8(value)) + .append("&"); } return params.substring(0, params.length() - 1); } @@ -147,4 +153,12 @@ public class ApiHandler { public static T postFullUrl(Map headers, String url, HashMap query, T body, Class tClass) { return new Gson().fromJson(postRaw(headers, url + parseQueries(query), body.toString()), tClass); } + + private static String urlEncodeUTF8(String input) { + try { + return URLEncoder.encode(input, "UTF-8"); + }catch (UnsupportedEncodingException e) { + throw new RuntimeException("UTF-8 is required"); + } + } }