From ea73dec439f7ba1e3fd54b503c37f747edc5a0a4 Mon Sep 17 00:00:00 2001
From: Risto Lahtela <24460436+Rsl1122@users.noreply.github.com>
Date: Sun, 21 Jun 2020 19:57:35 +0300
Subject: [PATCH] Registered plan json command
---
.../djrapitops/plan/commands/PlanCommand.java | 23 ++++-
.../commands/subcommands/LinkCommands.java | 22 +++++
.../manage/ManageRawDataCommand.java | 93 -------------------
3 files changed, 40 insertions(+), 98 deletions(-)
delete mode 100644 Plan/common/src/main/java/com/djrapitops/plan/commands/subcommands/manage/ManageRawDataCommand.java
diff --git a/Plan/common/src/main/java/com/djrapitops/plan/commands/PlanCommand.java b/Plan/common/src/main/java/com/djrapitops/plan/commands/PlanCommand.java
index ef9ad8cd3..00ac45922 100644
--- a/Plan/common/src/main/java/com/djrapitops/plan/commands/PlanCommand.java
+++ b/Plan/common/src/main/java/com/djrapitops/plan/commands/PlanCommand.java
@@ -89,6 +89,7 @@ public class PlanCommand {
.subcommand(playerCommand())
.subcommand(playersCommand())
.subcommand(networkCommand())
+ .subcommand(jsonCommand())
.subcommand(registerCommand())
.subcommand(unregisterCommand())
@@ -102,7 +103,7 @@ public class PlanCommand {
.subcommand(disableCommand())
.subcommand(databaseCommand())
- .subcommand(export())
+ .subcommand(exportCommand())
.exceptionHandler(this::handleException)
.build();
}
@@ -259,7 +260,7 @@ public class PlanCommand {
.subcommand(moveCommand())
.subcommand(clearCommand())
.subcommand(removeCommand())
- .subcommand(uninstalled())
+ .subcommand(uninstalledCommand())
.inDepthDescription("Use different database subcommands to change the data in some way")
.build();
}
@@ -321,7 +322,7 @@ public class PlanCommand {
.build();
}
- private Subcommand uninstalled() {
+ private Subcommand uninstalledCommand() {
return Subcommand.builder()
.aliases("uninstalled")
.requirePermission("plan.data.uninstalled")
@@ -332,7 +333,7 @@ public class PlanCommand {
.build();
}
- private Subcommand export() {
+ private Subcommand exportCommand() {
return Subcommand.builder()
.aliases("export")
.requirePermission("plan.data.export")
@@ -342,4 +343,16 @@ public class PlanCommand {
.onCommand(dataUtilityCommands::onExport)
.build();
}
-}
+
+
+ private Subcommand jsonCommand() {
+ return Subcommand.builder()
+ .aliases("json")
+ .requirePermission("plan.json.self")
+ .requiredArgument("name/uuid", "Name or UUID of a player")
+ .description("View json of Player's raw data.")
+ .inDepthDescription("Allows you to download a player's data in json format. All of it.")
+ .onCommand(linkCommands::onJson)
+ .build();
+ }
+}
\ No newline at end of file
diff --git a/Plan/common/src/main/java/com/djrapitops/plan/commands/subcommands/LinkCommands.java b/Plan/common/src/main/java/com/djrapitops/plan/commands/subcommands/LinkCommands.java
index 6c4460653..fea357216 100644
--- a/Plan/common/src/main/java/com/djrapitops/plan/commands/subcommands/LinkCommands.java
+++ b/Plan/common/src/main/java/com/djrapitops/plan/commands/subcommands/LinkCommands.java
@@ -224,4 +224,26 @@ public class LinkCommands {
.send();
}
+ public void onJson(CMDSender sender, Arguments arguments) {
+ String identifier = arguments.concatenate(" ");
+ UUID playerUUID = identifiers.getPlayerUUID(identifier);
+ UUID senderUUID = sender.getUUID().orElse(null);
+ if (playerUUID == null) playerUUID = senderUUID;
+ if (playerUUID == null) {
+ throw new IllegalArgumentException("Player '" + identifier + "' was not found, they have no UUID.");
+ }
+
+ String playerName = dbSystem.getDatabase().query(UserIdentifierQueries.fetchPlayerNameOf(playerUUID))
+ .orElseThrow(() -> new IllegalArgumentException("Player '" + identifier + "' was not found in the database."));
+
+ if (sender.hasPermission("plan.json.other") || playerUUID.equals(senderUUID)) {
+ String address = getAddress(sender) + "/player/" + Html.encodeToURL(playerName) + "/raw";
+ sender.buildMessage()
+ .addPart(colors.getMainColor() + "Player json: ")
+ .apply(builder -> linkTo(builder, sender, address))
+ .send();
+ } else {
+ throw new IllegalArgumentException("Insufficient permissions: You can not view other player's json.");
+ }
+ }
}
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
deleted file mode 100644
index baef1323a..000000000
--- a/Plan/common/src/main/java/com/djrapitops/plan/commands/subcommands/manage/ManageRawDataCommand.java
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
- * This file is part of Player Analytics (Plan).
- *
- * Plan is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License v3 as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * Plan is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with Plan. If not, see .
- */
-package com.djrapitops.plan.commands.subcommands.manage;
-
-import com.djrapitops.plan.delivery.rendering.html.Html;
-import com.djrapitops.plan.delivery.webserver.Addresses;
-import com.djrapitops.plan.processing.Processing;
-import com.djrapitops.plan.settings.Permissions;
-import com.djrapitops.plan.settings.locale.Locale;
-import com.djrapitops.plan.settings.locale.lang.CmdHelpLang;
-import com.djrapitops.plan.settings.locale.lang.CommandLang;
-import com.djrapitops.plan.settings.locale.lang.DeepHelpLang;
-import com.djrapitops.plan.utilities.MiscUtils;
-import com.djrapitops.plugin.command.CommandNode;
-import com.djrapitops.plugin.command.CommandType;
-import com.djrapitops.plugin.command.CommandUtils;
-import com.djrapitops.plugin.command.Sender;
-import com.djrapitops.plugin.utilities.Verify;
-
-import javax.inject.Inject;
-import java.util.Arrays;
-
-/**
- * This manage subcommand is used to remove a single player's data from the
- * database.
- *
- * @author Rsl1122
- */
-public class ManageRawDataCommand extends CommandNode {
-
- private final Locale locale;
- private final Addresses addresses;
- private final Processing processing;
-
- @Inject
- public ManageRawDataCommand(
- Locale locale,
- Addresses addresses,
- Processing processing
- ) {
- super("raw", Permissions.MANAGE.getPermission(), CommandType.PLAYER_OR_ARGS);
-
- this.locale = locale;
- this.addresses = addresses;
- this.processing = processing;
-
- setArguments("");
- setShortHelp(locale.getString(CmdHelpLang.MANAGE_RAW_DATA));
- setInDepthHelp(locale.getArray(DeepHelpLang.MANAGE_RAW_DATA));
- }
-
- @Override
- public void onCommand(Sender sender, String commandLabel, String[] args) {
- Verify.isTrue(args.length >= 1,
- () -> new IllegalArgumentException(locale.getString(CommandLang.FAIL_REQ_ONE_ARG, Arrays.toString(this.getArguments()))));
-
- processing.submitNonCritical(() -> {
- String playerName = MiscUtils.getPlayerName(args, sender, Permissions.MANAGE);
-
- sender.sendMessage(locale.getString(CommandLang.HEADER_INSPECT, playerName));
- // Link
- String address = addresses.getMainAddress().orElseGet(() -> {
- sender.sendMessage(locale.getString(CommandLang.NO_ADDRESS_NOTIFY));
- return addresses.getFallbackLocalhostAddress();
- });
- String url = address + "/player/" + Html.encodeToURL(playerName) + "/raw";
- String linkPrefix = locale.getString(CommandLang.LINK_PREFIX);
- boolean console = !CommandUtils.isPlayer(sender);
- if (console) {
- sender.sendMessage(linkPrefix + url);
- } else {
- sender.sendMessage(linkPrefix);
- sender.sendLink(" ", locale.getString(CommandLang.LINK_CLICK_ME), url);
- }
-
- sender.sendMessage(">");
- });
- }
-}