From de33cb1b4f867a51a7a63568704b2556613ee16a Mon Sep 17 00:00:00 2001 From: Rsl1122 Date: Mon, 30 Sep 2019 15:53:43 +0300 Subject: [PATCH] Encoded player & server names in URLs --- .../main/java/com/djrapitops/plan/api/CommonAPI.java | 3 ++- .../plan/commands/subcommands/AnalyzeCommand.java | 3 ++- .../plan/commands/subcommands/InspectCommand.java | 3 ++- .../subcommands/manage/ManageRawDataCommand.java | 3 ++- .../plan/delivery/domain/mutators/SessionsMutator.java | 2 ++ .../djrapitops/plan/delivery/rendering/html/Html.java | 10 ++++++++++ .../rendering/json/PlayersTableJSONParser.java | 2 +- .../plan/delivery/webserver/pages/RootPageHandler.java | 3 ++- .../implementation/results/ExtensionStringData.java | 2 +- .../resources/assets/plan/web/js/sessionAccordion.js | 4 ++-- 10 files changed, 26 insertions(+), 9 deletions(-) diff --git a/Plan/common/src/main/java/com/djrapitops/plan/api/CommonAPI.java b/Plan/common/src/main/java/com/djrapitops/plan/api/CommonAPI.java index 6489b3f1c..83920bb0c 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/api/CommonAPI.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/api/CommonAPI.java @@ -19,6 +19,7 @@ package com.djrapitops.plan.api; import com.djrapitops.plan.api.data.PlayerContainer; import com.djrapitops.plan.api.data.ServerContainer; import com.djrapitops.plan.data.plugin.PluginData; +import com.djrapitops.plan.delivery.rendering.html.Html; import com.djrapitops.plan.exceptions.database.DBOpException; import com.djrapitops.plan.identification.UUIDUtility; import com.djrapitops.plan.storage.database.DBSystem; @@ -80,7 +81,7 @@ public class CommonAPI implements PlanAPI { @Override public String getPlayerInspectPageLink(String playerName) { - return "../player/" + playerName; + return "../player/" + Html.encodeToURL(playerName); } @Override diff --git a/Plan/common/src/main/java/com/djrapitops/plan/commands/subcommands/AnalyzeCommand.java b/Plan/common/src/main/java/com/djrapitops/plan/commands/subcommands/AnalyzeCommand.java index 766c27be9..5ce531349 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/commands/subcommands/AnalyzeCommand.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/commands/subcommands/AnalyzeCommand.java @@ -18,6 +18,7 @@ package com.djrapitops.plan.commands.subcommands; import com.djrapitops.plan.PlanSystem; import com.djrapitops.plan.delivery.export.Exporter; +import com.djrapitops.plan.delivery.rendering.html.Html; import com.djrapitops.plan.delivery.webserver.WebServer; import com.djrapitops.plan.exceptions.ExportException; import com.djrapitops.plan.exceptions.database.DBOpException; @@ -108,7 +109,7 @@ public class AnalyzeCommand extends CommandNode { } private void sendLink(Server server, Sender sender) { - String target = "/server/" + server.getName(); + String target = "/server/" + Html.encodeToURL(server.getName()); String address = PlanSystem.getMainAddress(webServer, dbSystem); String url = address + target; String linkPrefix = locale.getString(CommandLang.LINK_PREFIX); diff --git a/Plan/common/src/main/java/com/djrapitops/plan/commands/subcommands/InspectCommand.java b/Plan/common/src/main/java/com/djrapitops/plan/commands/subcommands/InspectCommand.java index 84c14f1df..5b155f96e 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/commands/subcommands/InspectCommand.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/commands/subcommands/InspectCommand.java @@ -17,6 +17,7 @@ package com.djrapitops.plan.commands.subcommands; import com.djrapitops.plan.PlanSystem; +import com.djrapitops.plan.delivery.rendering.html.Html; import com.djrapitops.plan.delivery.webserver.WebServer; import com.djrapitops.plan.exceptions.database.DBOpException; import com.djrapitops.plan.identification.UUIDUtility; @@ -132,7 +133,7 @@ public class InspectCommand extends CommandNode { sender.sendMessage(locale.getString(CommandLang.HEADER_INSPECT, playerName)); String address = PlanSystem.getMainAddress(webServer, dbSystem); - String url = address + "/player/" + playerName; + String url = address + "/player/" + Html.encodeToURL(playerName); String linkPrefix = locale.getString(CommandLang.LINK_PREFIX); boolean console = !CommandUtils.isPlayer(sender); diff --git a/Plan/common/src/main/java/com/djrapitops/plan/commands/subcommands/manage/ManageRawDataCommand.java b/Plan/common/src/main/java/com/djrapitops/plan/commands/subcommands/manage/ManageRawDataCommand.java index 7012e7b37..d92d00c3f 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/commands/subcommands/manage/ManageRawDataCommand.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/commands/subcommands/manage/ManageRawDataCommand.java @@ -17,6 +17,7 @@ package com.djrapitops.plan.commands.subcommands.manage; import com.djrapitops.plan.PlanSystem; +import com.djrapitops.plan.delivery.rendering.html.Html; import com.djrapitops.plan.delivery.webserver.WebServer; import com.djrapitops.plan.settings.Permissions; import com.djrapitops.plan.settings.locale.Locale; @@ -69,7 +70,7 @@ public class ManageRawDataCommand extends CommandNode { sender.sendMessage(locale.getString(CommandLang.HEADER_INSPECT, playerName)); // Link String address = PlanSystem.getMainAddress(webServer, dbSystem); - String url = address + "/player/" + playerName + "/raw"; + String url = address + "/player/" + Html.encodeToURL(playerName) + "/raw"; String linkPrefix = locale.getString(CommandLang.LINK_PREFIX); boolean console = !CommandUtils.isPlayer(sender); if (console) { diff --git a/Plan/common/src/main/java/com/djrapitops/plan/delivery/domain/mutators/SessionsMutator.java b/Plan/common/src/main/java/com/djrapitops/plan/delivery/domain/mutators/SessionsMutator.java index 1a960d919..69c2bb270 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/delivery/domain/mutators/SessionsMutator.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/delivery/domain/mutators/SessionsMutator.java @@ -283,7 +283,9 @@ public class SessionsMutator { return sessions.stream().map(session -> { Map sessionMap = new HashMap<>(); sessionMap.put("player_name", session.getValue(SessionKeys.NAME).orElse(session.getUnsafe(SessionKeys.UUID).toString())); + sessionMap.put("player_uuid", session.getUnsafe(SessionKeys.UUID).toString()); sessionMap.put("server_name", session.getValue(SessionKeys.SERVER_NAME).orElse(session.getUnsafe(SessionKeys.SERVER_UUID).toString())); + sessionMap.put("server_uuid", session.getUnsafe(SessionKeys.SERVER_UUID).toString()); sessionMap.put("name", nameFunction.apply(sessionMap)); sessionMap.put("start", session.getValue(SessionKeys.START).map(formatters.yearLong()).orElse("-") + (session.supports(SessionKeys.END) ? "" : " (Online)")); diff --git a/Plan/common/src/main/java/com/djrapitops/plan/delivery/rendering/html/Html.java b/Plan/common/src/main/java/com/djrapitops/plan/delivery/rendering/html/Html.java index 5700db9b3..1ea493109 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/delivery/rendering/html/Html.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/delivery/rendering/html/Html.java @@ -20,6 +20,8 @@ import org.apache.commons.text.StringSubstitutor; import org.apache.commons.text.TextStringBuilder; import java.io.Serializable; +import java.io.UnsupportedEncodingException; +import java.net.URLEncoder; import java.util.HashMap; import java.util.Map; @@ -169,4 +171,12 @@ public enum Html { sub.setEnableSubstitutionInVariables(false); return sub.replace(html); } + + public static String encodeToURL(String string) { + try { + return URLEncoder.encode(string, "UTF-8"); + } catch (UnsupportedEncodingException e) { + return string; + } + } } diff --git a/Plan/common/src/main/java/com/djrapitops/plan/delivery/rendering/json/PlayersTableJSONParser.java b/Plan/common/src/main/java/com/djrapitops/plan/delivery/rendering/json/PlayersTableJSONParser.java index ce13fd312..e90df0621 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/delivery/rendering/json/PlayersTableJSONParser.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/delivery/rendering/json/PlayersTableJSONParser.java @@ -125,7 +125,7 @@ public class PlayersTableJSONParser { private void appendPlayerData(StringBuilder dataJSON, TablePlayer player) { String name = player.getName().orElse(player.getPlayerUUID().toString()); - String url = "../player/" + name; + String url = "../player/" + Html.encodeToURL(name); int loginTimes = player.getSessionCount().orElse(0); long playtime = player.getPlaytime().orElse(-1L); diff --git a/Plan/common/src/main/java/com/djrapitops/plan/delivery/webserver/pages/RootPageHandler.java b/Plan/common/src/main/java/com/djrapitops/plan/delivery/webserver/pages/RootPageHandler.java index 5f01d2ab3..eef32abf3 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/delivery/webserver/pages/RootPageHandler.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/delivery/webserver/pages/RootPageHandler.java @@ -17,6 +17,7 @@ package com.djrapitops.plan.delivery.webserver.pages; import com.djrapitops.plan.delivery.domain.WebUser; +import com.djrapitops.plan.delivery.rendering.html.Html; import com.djrapitops.plan.delivery.webserver.Request; import com.djrapitops.plan.delivery.webserver.RequestTarget; import com.djrapitops.plan.delivery.webserver.WebServer; @@ -68,7 +69,7 @@ public class RootPageHandler implements PageHandler { case 1: return new RedirectResponse("/players"); case 2: - return new RedirectResponse("/player/" + webUser.getName()); + return new RedirectResponse("/player/" + Html.encodeToURL(webUser.getName())); default: return responseFactory.forbidden403(); } diff --git a/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/results/ExtensionStringData.java b/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/results/ExtensionStringData.java index 065b6742b..593b6871c 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/results/ExtensionStringData.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/results/ExtensionStringData.java @@ -41,7 +41,7 @@ public class ExtensionStringData implements DescribedExtensionData { public String getFormattedValue() { String withColors = Html.swapColorCodesToSpan(value); - return !playerName ? withColors : Html.LINK.parse("../player/" + value, withColors); + return !playerName ? withColors : Html.LINK.parse("../player/" + Html.encodeToURL(value), withColors); } ExtensionStringData concatenate(ExtensionStringData other) { diff --git a/Plan/common/src/main/resources/assets/plan/web/js/sessionAccordion.js b/Plan/common/src/main/resources/assets/plan/web/js/sessionAccordion.js index 9a7e79c6e..e5d5db79f 100644 --- a/Plan/common/src/main/resources/assets/plan/web/js/sessionAccordion.js +++ b/Plan/common/src/main/resources/assets/plan/web/js/sessionAccordion.js @@ -88,8 +88,8 @@ function createAccordionBody(i, session) { createKillsTable(session.player_kills) + '
' + '
' + - ' Player Page' + - (session.network_server ? ' Server Analysis' : '') + + ' Player Page' + + (session.network_server ? ' Server Analysis' : '') + '
' + '' }