diff --git a/src/me/StevenLawson/TotalFreedomMod/HTTPD/HTMLGenerationTools.java b/src/me/StevenLawson/TotalFreedomMod/HTTPD/HTMLGenerationTools.java
new file mode 100644
index 00000000..20949290
--- /dev/null
+++ b/src/me/StevenLawson/TotalFreedomMod/HTTPD/HTMLGenerationTools.java
@@ -0,0 +1,37 @@
+package me.StevenLawson.TotalFreedomMod.HTTPD;
+
+import java.util.Iterator;
+import java.util.Map;
+
+import static org.apache.commons.lang3.StringEscapeUtils.*;
+
+public class HTMLGenerationTools
+{
+ private HTMLGenerationTools()
+ {
+ throw new AssertionError();
+ }
+
+ public static String paragraph(String data)
+ {
+ return "
" + escapeHtml4(data) + "
\r\n";
+ }
+
+ public static String mapToHTMLList(Map map)
+ {
+ StringBuilder output = new StringBuilder();
+
+ output.append("\r\n");
+
+ Iterator> it = map.entrySet().iterator();
+ while (it.hasNext())
+ {
+ Map.Entry entry = it.next();
+ output.append("- ").append(escapeHtml4(entry.getKey() + " = " + entry.getValue())).append("
\r\n");
+ }
+
+ output.append("
\r\n");
+
+ return output.toString();
+ }
+}
diff --git a/src/me/StevenLawson/TotalFreedomMod/HTTPD/Module_dump.java b/src/me/StevenLawson/TotalFreedomMod/HTTPD/Module_dump.java
new file mode 100644
index 00000000..fa1d7fed
--- /dev/null
+++ b/src/me/StevenLawson/TotalFreedomMod/HTTPD/Module_dump.java
@@ -0,0 +1,41 @@
+package me.StevenLawson.TotalFreedomMod.HTTPD;
+
+import java.util.Map;
+import org.apache.commons.lang.StringUtils;
+
+import static me.StevenLawson.TotalFreedomMod.HTTPD.HTMLGenerationTools.*;
+
+public class Module_dump extends TFM_HTTPD_Module
+{
+ public Module_dump(String uri, NanoHTTPD.Method method, Map headers, Map params, Map files)
+ {
+ super(uri, method, headers, params, files);
+ }
+
+ @Override
+ public String getBody()
+ {
+ StringBuilder responseBody = new StringBuilder();
+
+ String[] args = StringUtils.split(uri, "/");
+
+ responseBody
+ .append(paragraph("URI: " + uri))
+ .append(paragraph("args (Length: " + args.length + "): " + StringUtils.join(args, ",")))
+ .append(paragraph("Method: " + method.toString()))
+ .append(paragraph("Headers:"))
+ .append(mapToHTMLList(headers))
+ .append(paragraph("Params:"))
+ .append(mapToHTMLList(params))
+ .append(paragraph("Files:"))
+ .append(mapToHTMLList(files));
+
+ return responseBody.toString();
+ }
+
+ @Override
+ public String getTitle()
+ {
+ return "TotalFreedomMod :: Request Debug Dumper";
+ }
+}
diff --git a/src/me/StevenLawson/TotalFreedomMod/HTTPD/Module_help.java b/src/me/StevenLawson/TotalFreedomMod/HTTPD/Module_help.java
new file mode 100644
index 00000000..0cfd9628
--- /dev/null
+++ b/src/me/StevenLawson/TotalFreedomMod/HTTPD/Module_help.java
@@ -0,0 +1,62 @@
+package me.StevenLawson.TotalFreedomMod.HTTPD;
+
+import java.util.Iterator;
+import java.util.Map;
+import org.apache.commons.lang.StringEscapeUtils;
+import org.bukkit.Bukkit;
+import org.bukkit.plugin.Plugin;
+
+public class Module_help extends TFM_HTTPD_Module
+{
+ public Module_help(String uri, NanoHTTPD.Method method, Map headers, Map params, Map files)
+ {
+ super(uri, method, headers, params, files);
+ }
+
+ @Override
+ public String getBody()
+ {
+ final StringBuilder body = new StringBuilder();
+
+ Plugin[] plugins = Bukkit.getPluginManager().getPlugins();
+ for (Plugin plugin : plugins)
+ {
+ Map> commands = plugin.getDescription().getCommands();
+ if (commands != null)
+ {
+ Iterator>> it1 = commands.entrySet().iterator();
+ while (it1.hasNext())
+ {
+ Map.Entry> next1 = it1.next();
+ String key1 = next1.getKey();
+ Map value1 = next1.getValue();
+
+ Iterator> it2 = value1.entrySet().iterator();
+ while (it2.hasNext())
+ {
+ Map.Entry next2 = it2.next();
+ String key2 = next2.getKey();
+ Object value2 = next2.getValue();
+
+ body
+ .append("")
+ .append(StringEscapeUtils.escapeHtml(key1))
+ .append(".")
+ .append(StringEscapeUtils.escapeHtml(key2))
+ .append(" = ")
+ .append(StringEscapeUtils.escapeHtml(value2.toString()))
+ .append("
\r\n");
+ }
+ }
+ }
+ }
+
+ return body.toString();
+ }
+
+ @Override
+ public String getTitle()
+ {
+ return "Module_help";
+ }
+}
diff --git a/src/me/StevenLawson/TotalFreedomMod/HTTPD/Module_list.java b/src/me/StevenLawson/TotalFreedomMod/HTTPD/Module_list.java
new file mode 100644
index 00000000..561a047e
--- /dev/null
+++ b/src/me/StevenLawson/TotalFreedomMod/HTTPD/Module_list.java
@@ -0,0 +1,72 @@
+package me.StevenLawson.TotalFreedomMod.HTTPD;
+
+import java.util.Map;
+import me.StevenLawson.TotalFreedomMod.TFM_SuperadminList;
+import me.StevenLawson.TotalFreedomMod.TFM_Util;
+import org.bukkit.Bukkit;
+import org.bukkit.entity.Player;
+
+public class Module_list extends TFM_HTTPD_Module
+{
+ public Module_list(String uri, NanoHTTPD.Method method, Map headers, Map params, Map files)
+ {
+ super(uri, method, headers, params, files);
+ }
+
+ @Override
+ public String getBody()
+ {
+ final StringBuilder body = new StringBuilder();
+
+ final Player[] onlinePlayers = Bukkit.getOnlinePlayers();
+
+ body.append("There are ").append(onlinePlayers.length).append("/").append(Bukkit.getMaxPlayers()).append(" players online:
\r\n");
+
+ body.append("\r\n");
+
+ for (Player player : onlinePlayers)
+ {
+ String prefix = "";
+ if (TFM_SuperadminList.isUserSuperadmin(player))
+ {
+ if (TFM_SuperadminList.isSeniorAdmin(player))
+ {
+ prefix = "[SrA]";
+ }
+ else
+ {
+ prefix = "[SA]";
+ }
+
+ if (TFM_Util.DEVELOPERS.contains(player.getName()))
+ {
+ prefix = "[Dev]";
+ }
+
+ if (player.getName().equals("markbyron"))
+ {
+ prefix = "[Owner]";
+ }
+ }
+ else
+ {
+ if (player.isOp())
+ {
+ prefix = "[OP]";
+ }
+ }
+
+ body.append("- ").append(prefix).append(player.getName()).append("
\r\n");
+ }
+
+ body.append("
\r\n");
+
+ return body.toString();
+ }
+
+ @Override
+ public String getTitle()
+ {
+ return "Total Freedom - Online Users";
+ }
+}
diff --git a/src/me/StevenLawson/TotalFreedomMod/HTTPD/TFM_HTTPDManager.java b/src/me/StevenLawson/TotalFreedomMod/HTTPD/TFM_HTTPDManager.java
deleted file mode 100644
index 45f62e77..00000000
--- a/src/me/StevenLawson/TotalFreedomMod/HTTPD/TFM_HTTPDManager.java
+++ /dev/null
@@ -1,63 +0,0 @@
-package me.StevenLawson.TotalFreedomMod.HTTPD;
-
-import java.io.IOException;
-import java.util.Date;
-import java.util.Map;
-import me.StevenLawson.TotalFreedomMod.TFM_Log;
-
-public class TFM_HTTPDManager
-{
- public static final int PORT = 28966;
- //
- private final TFM_HTTPD httpd = new TFM_HTTPD(PORT);
-
- private TFM_HTTPDManager()
- {
- }
-
- public void start()
- {
- try
- {
- httpd.start();
- }
- catch (IOException ex)
- {
- TFM_Log.severe(ex);
- }
- }
-
- public void stop()
- {
- httpd.stop();
- }
-
- private static class TFM_HTTPD extends NanoHTTPD
- {
- public TFM_HTTPD(int port)
- {
- super(port);
- }
-
- public TFM_HTTPD(String hostname, int port)
- {
- super(hostname, port);
- }
-
- @Override
- public Response serve(String uri, Method method, Map headers, Map parms, Map files)
- {
- return new Response("OK - " + new Date().toString() + "
");
- }
- }
-
- public static TFM_HTTPDManager getInstance()
- {
- return TFM_HTTPDManagerHolder.INSTANCE;
- }
-
- private static class TFM_HTTPDManagerHolder
- {
- private static final TFM_HTTPDManager INSTANCE = new TFM_HTTPDManager();
- }
-}
diff --git a/src/me/StevenLawson/TotalFreedomMod/HTTPD/TFM_HTTPD_Manager.java b/src/me/StevenLawson/TotalFreedomMod/HTTPD/TFM_HTTPD_Manager.java
new file mode 100644
index 00000000..41460d20
--- /dev/null
+++ b/src/me/StevenLawson/TotalFreedomMod/HTTPD/TFM_HTTPD_Manager.java
@@ -0,0 +1,91 @@
+package me.StevenLawson.TotalFreedomMod.HTTPD;
+
+import java.io.IOException;
+import java.util.Map;
+import me.StevenLawson.TotalFreedomMod.TFM_Log;
+import org.apache.commons.lang.StringUtils;
+
+public class TFM_HTTPD_Manager
+{
+ public static final int PORT = 28966;
+ //
+ private final TFM_HTTPD httpd = new TFM_HTTPD(PORT);
+
+ private TFM_HTTPD_Manager()
+ {
+ }
+
+ public void start()
+ {
+ try
+ {
+ httpd.start();
+ }
+ catch (IOException ex)
+ {
+ TFM_Log.severe(ex);
+ }
+ }
+
+ public void stop()
+ {
+ httpd.stop();
+ }
+
+ private static class TFM_HTTPD extends NanoHTTPD
+ {
+ public TFM_HTTPD(int port)
+ {
+ super(port);
+ }
+
+ public TFM_HTTPD(String hostname, int port)
+ {
+ super(hostname, port);
+ }
+
+ @Override
+ public Response serve(String uri, Method method, Map headers, Map params, Map files)
+ {
+ Response response = null;
+
+ final String[] args = StringUtils.split(uri, "/");
+ if (args.length >= 1)
+ {
+ if ("dump".equalsIgnoreCase(args[0]))
+ {
+ response = new Module_dump(uri, method, headers, params, files).getResponse();
+ }
+ else if ("list".equalsIgnoreCase(args[0]))
+ {
+ response = new Module_list(uri, method, headers, params, files).getResponse();
+ }
+ else if ("help".equalsIgnoreCase(args[0]))
+ {
+ //The issue is that plugin.getDescription().getCommands() only shows commands in the plugin.yml file.
+ //I need to make another version of this that uses the CommandMap.
+ response = new Module_help(uri, method, headers, params, files).getResponse();
+ }
+ }
+
+ if (response == null)
+ {
+ return new Response(Response.Status.NOT_FOUND, MIME_PLAINTEXT, "Error 404: Not Found - The requested resource was not found on this server.");
+ }
+ else
+ {
+ return response;
+ }
+ }
+ }
+
+ public static TFM_HTTPD_Manager getInstance()
+ {
+ return TFM_HTTPDManagerHolder.INSTANCE;
+ }
+
+ private static class TFM_HTTPDManagerHolder
+ {
+ private static final TFM_HTTPD_Manager INSTANCE = new TFM_HTTPD_Manager();
+ }
+}
diff --git a/src/me/StevenLawson/TotalFreedomMod/HTTPD/TFM_HTTPD_Module.java b/src/me/StevenLawson/TotalFreedomMod/HTTPD/TFM_HTTPD_Module.java
new file mode 100644
index 00000000..d0b728e8
--- /dev/null
+++ b/src/me/StevenLawson/TotalFreedomMod/HTTPD/TFM_HTTPD_Module.java
@@ -0,0 +1,31 @@
+package me.StevenLawson.TotalFreedomMod.HTTPD;
+
+import java.util.Map;
+import me.StevenLawson.TotalFreedomMod.HTTPD.NanoHTTPD.*;
+
+public abstract class TFM_HTTPD_Module
+{
+ protected final String uri;
+ protected final Method method;
+ protected final Map headers;
+ protected final Map params;
+ protected final Map files;
+
+ public TFM_HTTPD_Module(String uri, Method method, Map headers, Map params, Map files)
+ {
+ this.uri = uri;
+ this.method = method;
+ this.headers = headers;
+ this.params = params;
+ this.files = files;
+ }
+
+ public abstract String getBody();
+
+ public abstract String getTitle();
+
+ public final Response getResponse()
+ {
+ return new TFM_HTTPD_PageBuilder(getBody(), getTitle()).getResponse();
+ }
+}
diff --git a/src/me/StevenLawson/TotalFreedomMod/HTTPD/TFM_HTTPD_PageBuilder.java b/src/me/StevenLawson/TotalFreedomMod/HTTPD/TFM_HTTPD_PageBuilder.java
new file mode 100644
index 00000000..ea34b0b5
--- /dev/null
+++ b/src/me/StevenLawson/TotalFreedomMod/HTTPD/TFM_HTTPD_PageBuilder.java
@@ -0,0 +1,44 @@
+package me.StevenLawson.TotalFreedomMod.HTTPD;
+
+import me.StevenLawson.TotalFreedomMod.HTTPD.NanoHTTPD.Response;
+
+public class TFM_HTTPD_PageBuilder
+{
+ private static final String TEMPLATE =
+ "\n"
+ + "\n"
+ + "\n"
+ + "{$TITLE}\n"
+ + "\n"
+ + "\n"
+ + "{$BODY}\n"
+ + "\n";
+ //
+ private String body;
+ private String title;
+
+ public TFM_HTTPD_PageBuilder()
+ {
+ }
+
+ public TFM_HTTPD_PageBuilder(String body, String title)
+ {
+ this.body = body;
+ this.title = title;
+ }
+
+ public void setBody(String body)
+ {
+ this.body = body;
+ }
+
+ public void setTitle(String title)
+ {
+ this.title = title;
+ }
+
+ public Response getResponse()
+ {
+ return new Response(TEMPLATE.replace("{$TITLE}", title).replace("{$BODY}", body));
+ }
+}
diff --git a/src/me/StevenLawson/TotalFreedomMod/TotalFreedomMod.java b/src/me/StevenLawson/TotalFreedomMod/TotalFreedomMod.java
index 4f77c251..86a0ee79 100644
--- a/src/me/StevenLawson/TotalFreedomMod/TotalFreedomMod.java
+++ b/src/me/StevenLawson/TotalFreedomMod/TotalFreedomMod.java
@@ -6,7 +6,7 @@ import java.io.InputStream;
import java.util.*;
import me.StevenLawson.TotalFreedomMod.Commands.TFM_Command;
import me.StevenLawson.TotalFreedomMod.Commands.TFM_CommandLoader;
-import me.StevenLawson.TotalFreedomMod.HTTPD.TFM_HTTPDManager;
+import me.StevenLawson.TotalFreedomMod.HTTPD.TFM_HTTPD_Manager;
import me.StevenLawson.TotalFreedomMod.Listener.*;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.exception.ExceptionUtils;
@@ -173,7 +173,7 @@ public class TotalFreedomMod extends JavaPlugin
}
}.runTaskLater(plugin, 20L);
- TFM_HTTPDManager.getInstance().start();
+ TFM_HTTPD_Manager.getInstance().start();
TFM_Log.info("Plugin enabled.");
}
@@ -183,7 +183,7 @@ public class TotalFreedomMod extends JavaPlugin
{
server.getScheduler().cancelTasks(plugin);
- TFM_HTTPDManager.getInstance().stop();
+ TFM_HTTPD_Manager.getInstance().stop();
TFM_Log.info("Plugin disabled.");
}