Add /ld uploadlogs

This commit is contained in:
libraryaddict 2020-06-18 15:48:59 +12:00
parent 6f3d4d8300
commit a81b3b1d5f
No known key found for this signature in database
GPG Key ID: 052E4FBCD257AEA4
5 changed files with 238 additions and 7 deletions

View File

@ -32,6 +32,7 @@ public class LibsDisguisesCommand implements CommandExecutor, TabCompleter {
getCommands().add(new LDMods()); getCommands().add(new LDMods());
getCommands().add(new LDMetaInfo()); getCommands().add(new LDMetaInfo());
getCommands().add(new LDDebugPlayer()); getCommands().add(new LDDebugPlayer());
getCommands().add(new LDUploadLogs());
} }
protected ArrayList<String> filterTabs(ArrayList<String> list, String[] origArgs) { protected ArrayList<String> filterTabs(ArrayList<String> list, String[] origArgs) {

View File

@ -0,0 +1,234 @@
package me.libraryaddict.disguise.commands.libsdisguises;
import lombok.Data;
import me.libraryaddict.disguise.LibsDisguises;
import me.libraryaddict.disguise.utilities.reflection.NmsVersion;
import me.libraryaddict.disguise.utilities.translations.LibsMsg;
import net.md_5.bungee.api.chat.ClickEvent;
import net.md_5.bungee.api.chat.ComponentBuilder;
import org.bukkit.ChatColor;
import org.bukkit.command.CommandSender;
import org.bukkit.craftbukkit.libs.org.apache.commons.io.FileUtils;
import org.bukkit.entity.Player;
import org.bukkit.scheduler.BukkitRunnable;
import javax.net.ssl.HttpsURLConnection;
import java.io.*;
import java.net.URL;
import java.net.URLEncoder;
import java.util.AbstractMap.SimpleEntry;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
/**
* Created by libraryaddict on 18/06/2020.
*/
public class LDUploadLogs implements LDCommand {
/**
* Small modification of https://gist.github.com/jamezrin/12de49643d7be7150da362e86407113f
*/
@Data
public class GuestPaste {
private String name = null;
private final String text;
public GuestPaste(String name, String text) {
this.name = name;
this.text = text;
}
public URL paste() throws Exception {
URL url = new URL("https://pastebin.com/api/api_post.php");
HttpsURLConnection con = (HttpsURLConnection) url.openConnection();
con.setRequestMethod("POST");
con.setRequestProperty("User-Agent", "Mozilla/5.0");
List<SimpleEntry<String, String>> params = new LinkedList<>();
// This doesn't give you access to my pastebin account ;)
// You need to enter another key for that, this key is for pastebin's tracking metrics.
// If you're using this code, please use your own pastebin dev key.
// Overuse will get it banned, and you'll have to ship a new version with your own key anyways.
// This is seperated into strings to prevent super easy scraping.
if (getClass().getName().contains("me.libraryaddict")) {
params.add(new SimpleEntry<>("api_dev_key", "62067f9d" + "cc1979a475105b529" + "eb453a5"));
}
params.add(new SimpleEntry<>("api_option", "paste"));
params.add(new SimpleEntry<>("api_paste_name", name));
params.add(new SimpleEntry<>("api_paste_code", text));
params.add(new SimpleEntry<>("api_paste_format", "text"));
params.add(new SimpleEntry<>("api_paste_expire_date", "1M"));
params.add(new SimpleEntry<>("api_paste_private", "1"));
StringBuilder output = new StringBuilder();
for (SimpleEntry<String, String> entry : params) {
if (output.length() > 0)
output.append('&');
output.append(URLEncoder.encode(entry.getKey(), "UTF-8"));
output.append('=');
output.append(URLEncoder.encode(entry.getValue(), "UTF-8"));
}
con.setDoOutput(true);
try (DataOutputStream dos = new DataOutputStream(con.getOutputStream())) {
dos.writeBytes(output.toString());
dos.flush();
}
int status = con.getResponseCode();
if (status >= 200 && status < 300) {
try (BufferedReader br = new BufferedReader(new InputStreamReader(con.getInputStream()))) {
String inputLine;
StringBuilder response = new StringBuilder();
while ((inputLine = br.readLine()) != null) {
response.append(inputLine);
}
return new URL(response.toString());
}
} else {
throw new IllegalStateException("Unexpected response code " + status);
}
}
}
@Override
public List<String> getTabComplete() {
return Collections.singletonList("uploadlogs");
}
@Override
public boolean hasPermission(CommandSender sender) {
return sender.isOp();
}
@Override
public String getPermission() {
return null;
}
@Override
public void onCommand(CommandSender sender, String[] args) {
File latest = new File("logs/latest.log");
File disguises = new File(LibsDisguises.getInstance().getDataFolder(), "disguises.yml");
File config = new File(LibsDisguises.getInstance().getDataFolder(), "config.yml");
if (isTooBig(latest)) {
sender.sendMessage(ChatColor.RED +
"Your latest.log file is too big! It should be less than 512kb! Please restart and run this " +
"command again!");
return;
}
if (isTooBig(disguises)) {
sender.sendMessage(ChatColor.RED +
"Your disguises.yml is too big! You'll need to trim that file down before using this command! It " +
"should be less than 512kb!");
return;
}
if (isTooBig(config)) {
sender.sendMessage(ChatColor.RED + "Your config.yml is too big! It should be less than 512kb!");
return;
}
try {
String latestText = FileUtils.readFileToString(latest, "UTF-8");
boolean valid = false;
int lastFind = 0;
for (int i = 0; i < 15; i++) {
int nextLine = latestText.indexOf("\n", lastFind);
if (nextLine == -1) {
break;
}
String str = latestText.substring(lastFind, nextLine);
lastFind = nextLine + 2;
if (!str.contains("Starting minecraft server version") && !str.contains("Loading properties") &&
!str.contains("This server is running")) {
continue;
}
valid = true;
break;
}
if (!valid) {
sender.sendMessage(
ChatColor.RED + "Your latest.log is too old! Please restart the server and try again!");
return;
}
sender.sendMessage(ChatColor.GOLD + "Now creating pastebin links...");
new BukkitRunnable() {
@Override
public void run() {
try {
String disguiseText = FileUtils.readFileToString(disguises, "UTF-8");
String configText = FileUtils.readFileToString(config, "UTF-8");
URL latestPaste = new GuestPaste("latest.log", latestText).paste();
URL configPaste = new GuestPaste("LibsDisguises config.yml", configText).paste();
URL disguisesPaste = new GuestPaste("LibsDisguises disguises.yml", disguiseText).paste();
new BukkitRunnable() {
@Override
public void run() {
sender.sendMessage(ChatColor.GOLD + "Upload successful!");
if (NmsVersion.v1_13.isSupported()) {
// Console can't click :(
if (sender instanceof Player) {
sender.sendMessage(ChatColor.GOLD +
"Click on the below message to have it appear in your chat input");
}
String text = "My log file: " + latestPaste + ", my config file: " + configPaste +
" and my disguises file: " + disguisesPaste;
ComponentBuilder builder = new ComponentBuilder("");
builder.appendLegacy(ChatColor.AQUA + "");
builder.append(text);
builder.event(new ClickEvent(ClickEvent.Action.SUGGEST_COMMAND, text));
sender.spigot().sendMessage(builder.create());
} else {
sender.sendMessage(
ChatColor.GOLD + "Log: " + latestPaste + "\nConfig: " + configPaste +
"\nDisguises: " + disguisesPaste);
}
}
}.runTask(LibsDisguises.getInstance());
}
catch (Exception e) {
e.printStackTrace();
sender.sendMessage(ChatColor.RED + "Unexpected error! Upload failed! " + e.getMessage());
}
}
}.runTaskAsynchronously(LibsDisguises.getInstance());
}
catch (IOException e) {
e.printStackTrace();
}
}
private boolean isTooBig(File file) {
return file.exists() && file.length() >= 512 * 1024;
}
@Override
public LibsMsg getHelp() {
return LibsMsg.LD_COMMAND_UPLOAD_LOGS;
}
}

View File

@ -37,7 +37,6 @@ import org.bukkit.boss.BossBar;
import org.bukkit.entity.*; import org.bukkit.entity.*;
import org.bukkit.metadata.FixedMetadataValue; import org.bukkit.metadata.FixedMetadataValue;
import org.bukkit.scheduler.BukkitRunnable; import org.bukkit.scheduler.BukkitRunnable;
import org.bukkit.scheduler.BukkitTask;
import org.bukkit.util.Vector; import org.bukkit.util.Vector;
import java.lang.reflect.InvocationTargetException; import java.lang.reflect.InvocationTargetException;

View File

@ -1,16 +1,10 @@
package me.libraryaddict.disguise.utilities.listeners; package me.libraryaddict.disguise.utilities.listeners;
import me.libraryaddict.disguise.LibsDisguises;
import me.libraryaddict.disguise.utilities.modded.ModdedEntity;
import me.libraryaddict.disguise.utilities.modded.ModdedManager; import me.libraryaddict.disguise.utilities.modded.ModdedManager;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority; import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener; import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerLoginEvent; import org.bukkit.event.player.PlayerLoginEvent;
import org.bukkit.metadata.FixedMetadataValue;
import java.util.ArrayList;
/** /**
* Created by libraryaddict on 11/06/2020. * Created by libraryaddict on 11/06/2020.

View File

@ -339,6 +339,9 @@ public enum LibsMsg {
"Reload's the plugin config and possibly blows disguises"), "Reload's the plugin config and possibly blows disguises"),
LD_COMMAND_DEBUG(ChatColor.BLUE + "/libsdisguises debug - " + ChatColor.AQUA + LD_COMMAND_DEBUG(ChatColor.BLUE + "/libsdisguises debug - " + ChatColor.AQUA +
"Used to help debug scoreboard issues on a player disguise"), "Used to help debug scoreboard issues on a player disguise"),
LD_COMMAND_UPLOAD_LOGS(ChatColor.BLUE + "/libsdisguises uploadlogs - " + ChatColor.AQUA +
"Uploads latest.log, disguises.yml and config.yml and gives you the link to share. Used when seeking " +
"assistance."),
SELF_DISGUISE_HIDDEN(ChatColor.GREEN + "Self disguise hidden as it's too tall.."); SELF_DISGUISE_HIDDEN(ChatColor.GREEN + "Self disguise hidden as it's too tall..");
private final String string; private final String string;