diff --git a/Plan/src/main/java/com/djrapitops/plan/ui/webserver/WebServer.java b/Plan/src/main/java/com/djrapitops/plan/ui/webserver/WebServer.java index 7e2a9626c..17658e1f6 100644 --- a/Plan/src/main/java/com/djrapitops/plan/ui/webserver/WebServer.java +++ b/Plan/src/main/java/com/djrapitops/plan/ui/webserver/WebServer.java @@ -34,6 +34,7 @@ import java.util.*; import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit; +import java.util.stream.Collectors; import java.util.zip.GZIPOutputStream; /** @@ -300,23 +301,21 @@ public class WebServer { return PageCacheHandler.loadPage(error, () -> new BadRequestResponse(error)); } - return api.onResponse(plan, variables); + try { + return api.onResponse(plan, variables); + } catch (Exception ex) { + Log.toLog("WebServer.getAPIResponse", ex); + return new InternalErrorResponse(ex, "An error while processing the request happened"); + } } private Map readVariables(String response) { - Map variableMap = new HashMap<>(); String[] variables = response.split("&"); - for (String variable : variables) { - String[] splittedVariables = variable.split("=", 2); - if (splittedVariables.length != 2) { - continue; - } - - variableMap.put(splittedVariables[0], splittedVariables[1]); - } - - return variableMap; + return Arrays.stream(variables) + .map(variable -> variable.split("=", 2)) + .filter(splittedVariables -> splittedVariables.length == 2) + .collect(Collectors.toMap(splittedVariables -> splittedVariables[0], splittedVariables -> splittedVariables[1], (a, b) -> b)); } private Response getResponse(String target, WebUser user) { diff --git a/Plan/src/main/java/com/djrapitops/plan/ui/webserver/response/InternalErrorResponse.java b/Plan/src/main/java/com/djrapitops/plan/ui/webserver/response/InternalErrorResponse.java index 6585692d8..a08d61b5b 100644 --- a/Plan/src/main/java/com/djrapitops/plan/ui/webserver/response/InternalErrorResponse.java +++ b/Plan/src/main/java/com/djrapitops/plan/ui/webserver/response/InternalErrorResponse.java @@ -9,18 +9,23 @@ import main.java.com.djrapitops.plan.ui.html.Html; public class InternalErrorResponse extends Response { public InternalErrorResponse(Throwable e, String cause) { - super.setHeader("HTTP/1.1 500 Internal Error"); StringBuilder content = new StringBuilder(); + + super.setHeader("HTTP/1.1 500 Internal Error"); + content.append("

500 Internal Error occurred

"); content.append("

Please report this issue here:

"); content.append(Html.LINK.parse("https://github.com/Rsl1122/Plan-PlayerAnalytics/issues", "Issues")); content.append("

"); content.append(e).append(" | ").append(cause); - for (Object element : e.getStackTrace()) { + + for (StackTraceElement element : e.getStackTrace()) { content.append("
"); content.append(" ").append(element); } + content.append("

"); + super.setContent(content.toString()); } }