Skip to content

Commit

Permalink
The rebirth, Part 2. Order to (some of the) chaos
Browse files Browse the repository at this point in the history
  • Loading branch information
dries007 committed Nov 9, 2014
1 parent b1efc09 commit 18461c1
Show file tree
Hide file tree
Showing 21 changed files with 428 additions and 190 deletions.
Expand Up @@ -56,6 +56,7 @@
import net.doubledoordev.backend.server.Server;
import net.doubledoordev.backend.server.WorldManager;
import net.doubledoordev.backend.util.Cache;
import net.doubledoordev.backend.util.exceptions.BackupException;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

Expand Down Expand Up @@ -170,7 +171,7 @@ public void cmdBackup(Server[] servers) throws CommandException
server.getWorldManager().bypassLimits = true;
server.getWorldManager().makeAllOfTheBackup();
}
catch (WorldManager.BackupException e)
catch (BackupException e)
{
CMDLOGGER.warn("Error when making a backup of " + server.getID());
CMDLOGGER.warn(e);
Expand Down
Expand Up @@ -56,6 +56,7 @@
import java.io.IOException;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.LinkedList;

import static net.doubledoordev.backend.webserver_old.NanoHTTPD.MIME_PLAINTEXT;
Expand Down
4 changes: 2 additions & 2 deletions src/main/java/net/doubledoordev/backend/server/Server.java
Expand Up @@ -645,7 +645,7 @@ public void setExtraJavaParameters(List<String> list) throws Exception
{
if (getOnline()) throw new ServerOnlineException();
for (String s : list)
for (Pattern pattern : Constants.ILLEGAL_OPTIONS)
for (Pattern pattern : Constants.SERVER_START_ARGS_BLACKLIST_PATTERNS)
if (pattern.matcher(s).matches()) throw new Exception(s + " NOT ALLOWED.");
data.extraJavaParameters = list;
Settings.save();
Expand All @@ -665,7 +665,7 @@ public void setExtraMCParameters(List<String> list) throws Exception
{
if (getOnline()) throw new ServerOnlineException();
for (String s : list)
for (Pattern pattern : Constants.ILLEGAL_OPTIONS)
for (Pattern pattern : Constants.SERVER_START_ARGS_BLACKLIST_PATTERNS)
if (pattern.matcher(s).matches()) throw new Exception(s + " NOT ALLOWED.");
data.extraMCParameters = list;
Settings.save();
Expand Down
Expand Up @@ -40,6 +40,7 @@

package net.doubledoordev.backend.server;

import net.doubledoordev.backend.util.exceptions.BackupException;
import net.lingala.zip4j.core.ZipFile;
import net.lingala.zip4j.exception.ZipException;
import net.lingala.zip4j.model.ZipParameters;
Expand Down Expand Up @@ -167,12 +168,4 @@ private boolean checkSpace()
if (bypassLimits) return !(bypassLimits = false);
return server.getOwnerObject().getMaxDiskspace() == -1 || server.getOwnerObject().getDiskspaceLeft() <= 0;
}

public class BackupException extends Exception
{
public BackupException(String s)
{
super(s);
}
}
}
Expand Up @@ -40,10 +40,13 @@

package net.doubledoordev.backend.server.query;

import net.doubledoordev.backend.util.Constants;
import net.doubledoordev.backend.util.exceptions.ServerOfflineException;

import java.net.*;

import static net.doubledoordev.backend.util.Constants.LOCALHOST;

/**
* A class that handles Minecraft Query protocol requests
*
Expand All @@ -54,7 +57,7 @@ public class MCQuery
final static byte HANDSHAKE = 9;
final static byte STAT = 0;

String serverAddress = "localhost";
String serverAddress = LOCALHOST;
int queryPort = 25565; // the default minecraft query port

int localPort = 25566; // the local port we're connected to the server on
Expand Down
7 changes: 0 additions & 7 deletions src/main/java/net/doubledoordev/backend/util/Cache.java
Expand Up @@ -216,13 +216,6 @@ public void run()
}
}
};
/**
* Time vars
*/
public static long REALLY_LONG_CACHE_TIMEOUT = 1000 * 60 * 60 * 24; // 24 hours
public static long LONG_CACHE_TIMEOUT = 1000 * 60 * 60; // 1 hour
public static long MEDIUM_CACHE_TIMEOUT = 1000 * 60; // 1 minute
public static long SHORT_CACHE_TIMEOUT = 1000 * 10; // 20 seconds
/**
* Forge version related things
*/
Expand Down
159 changes: 93 additions & 66 deletions src/main/java/net/doubledoordev/backend/util/Constants.java
Expand Up @@ -41,13 +41,9 @@
package net.doubledoordev.backend.util;

import com.google.common.base.Joiner;
import com.google.common.collect.ImmutableList;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonParser;
import freemarker.ext.beans.BeansWrapper;
import freemarker.template.TemplateModel;
import freemarker.template.TemplateModelException;
import net.doubledoordev.backend.server.Server;
import net.doubledoordev.backend.server.ServerData;
import net.doubledoordev.backend.util.winreg.JavaFinder;
Expand All @@ -68,106 +64,144 @@
*/
public class Constants
{
public static final String NAME = "D3 Backend";
public static final String LOCALHOST = "localhost";
public static final Pattern USERNAME_CHECK = Pattern.compile("^[\\w-]+$");
public static final Gson GSON = new GsonBuilder()
.registerTypeAdapter(Server.class, new Server.Deserializer())
.registerTypeAdapter(ServerData.class, new ServerData.Deserializer())
.registerTypeAdapter(Server.class, new Server.Serializer())
.setPrettyPrinting()
.create();
public static final Random RANDOM = new Random();
/*
* String constants
*/
public static final String NAME = "D3 Backend";
public static final String LOCALHOST = "localhost";
public static final String COOKIE_KEY = "user";
public static final String WORLD = "world";
public static final String SERVER = "server";
public static final String FILE = "file";
public static final String INDEX = "index";
public static final String USER = "user";
public static final String DIM = "DIM";
public static final String TEMPLATE_EXTENSION = ".ftl";
public static final String ERROR_TEMPLATE = "error.ftl";
/*
* URL and PATH constants
*/
public static final String SLASH_STR = "/";
public static final String STATIC_PATH = "/static/";
public static final String TEMPLATES_PATH = "/templates/";
public static final String P2S_PATH = "/pay2spawn/";
public static final String SOCKET_CONTEXT = "/socket";
public static final String LOGIN_URL = "/login";
public static final String REGISTER_URL = "/register";
public static final String NEWSERVER_URL = "/newserver";
public static final String SERVER_URL = "/server?server=";
public static final String FAVOTICON = "favicon.ico";

public static final char[] symbols = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ".toCharArray();
public static final File ROOT = getRootFile();
public static final File CONFIG_FILE = new File(ROOT, "config.json");
public static final File SERVERS_FILE = new File(ROOT, "servers.json");
public static final File USERS_FILE = new File(ROOT, "users.json");
public static final File SERVERS = new File(ROOT, "servers");
public static final File BACKUPS = new File(ROOT, "backups");
public static final ImmutableList<String> ADMINPAGES = ImmutableList.of("console", "backendConsoleText");
public static final String STATIC_PATH = "/static/";
public static final String TEMPLATES_PATH = "/templates/";
public static final String P2S_PATH = "/pay2spawn/";
public static final String SOCKET_CONTEXT = "/socket";
public static final String FAVOTICON = "favicon.ico";
public static final String ERROR_TEMPLATE = "error.ftl";
public static final String COOKIE_KEY = "user";
public static final JsonParser JSONPARSER = new JsonParser();
public static final String MC_VERIONS_URL = "https://s3.amazonaws.com/Minecraft.Download/versions/versions.json";
public static final String FORGE_VERIONS_URL = "http://files.minecraftforge.net/maven/net/minecraftforge/forge/json";
public static final String MC_SERVER_JAR_URL = "https://s3.amazonaws.com/Minecraft.Download/versions/%ID%/minecraft_server.%ID%.jar";
public static final String FORGE_INSTALLER_URL = "http://files.minecraftforge.net/maven/net/minecraftforge/forge/%ID%/forge-%ID%-installer.jar";
public static final Pattern ILLEGAL_OPTIONS[] = {Pattern.compile("^-Xms.*$"), Pattern.compile("^-Xmx.*$"), Pattern.compile("^-XX:MaxPermSize=.*$")};
public static final SimpleDateFormat BACKUP_SDF = new SimpleDateFormat("yyyy-MM-dd_HH-mm-ss");
public static final String WORLD = "world";
public static final String SERVER = "server";
public static final String DIM = "DIM";
public final static FilenameFilter NOT_DIM_FILTER = new FilenameFilter()
public static final String MC_VERIONS_URL = "https://s3.amazonaws.com/Minecraft.Download/versions/versions.json";
public static final String FORGE_VERIONS_URL = "http://files.minecraftforge.net/maven/net/minecraftforge/forge/json";
public static final String MC_SERVER_JAR_URL = "https://s3.amazonaws.com/Minecraft.Download/versions/%ID%/minecraft_server.%ID%.jar";
public static final String FORGE_INSTALLER_URL = "http://files.minecraftforge.net/maven/net/minecraftforge/forge/%ID%/forge-%ID%-installer.jar";
public static final String VERSION_CHECKER_URL = "http://jenkins.dries007.net/view/D3_misc/job/D3Backend/api/json?tree=lastStableBuild[number,artifacts[*]]";
/*
* FORM field names
*/
public static final String USERNAME = "username";
public static final String PASSWORD = "password";
public static final String OLD_PASSWORD = "oldPassword";
public static final String NEW_PASSWORD = "newPassword";
public static final String ARE_YOU_HUMAN = "areyouhuman";
/*
* File constants
*/
public static final File ROOT = getRootFile();
public static final File CONFIG_FILE = new File(ROOT, "config.json");
public static final File SERVERS_FILE = new File(ROOT, "servers.json");
public static final File USERS_FILE = new File(ROOT, "users.json");
public static final File SERVERS = new File(ROOT, "servers");
public static final File BACKUPS = new File(ROOT, "backups");
/*
* Time constants
*/
public static final long SOCKET_PING_TIME = 1000 * 50; // 50 seconds
public static final long REALLY_LONG_CACHE_TIMEOUT = 1000 * 60 * 60 * 24; // 24 hours
public static final long LONG_CACHE_TIMEOUT = 1000 * 60 * 60; // 1 hour
public static final long MEDIUM_CACHE_TIMEOUT = 1000 * 60; // 1 minute
public static final long SHORT_CACHE_TIMEOUT = 1000 * 10; // 20 seconds
/*
* Pattern constants
*/
public static final Pattern USERNAME_PATTERN = Pattern.compile("^[\\w-]+$");
public static final Pattern VERSION_PATTERN = Pattern.compile("\\d+(?:\\.\\d+)+");
public static final Pattern SERVER_START_ARGS_BLACKLIST_PATTERNS[] = {Pattern.compile("^-Xms.*$"), Pattern.compile("^-Xmx.*$"), Pattern.compile("^-XX:MaxPermSize=.*$")};
/*
* FilenameFilter constants
*/
public final static FilenameFilter NOT_DIM_FILTER = new FilenameFilter()
{
@Override
public boolean accept(File dir, String name)
{
return !name.startsWith(DIM);
}
};
public final static FilenameFilter DIM_ONLY_FILTER = new FilenameFilter()
public final static FilenameFilter DIM_ONLY_FILTER = new FilenameFilter()
{
@Override
public boolean accept(File dir, String name)
{
return name.startsWith(DIM);
}
};
public final static FilenameFilter ACCEPT_ALL_FILTER = new FilenameFilter()
public final static FilenameFilter ACCEPT_ALL_FILTER = new FilenameFilter()
{
@Override
public boolean accept(File dir, String name)
{
return !name.equalsIgnoreCase("eula.txt");
}
};
public final static FilenameFilter ACCEPT_NONE_FILTER = new FilenameFilter()
public final static FilenameFilter ACCEPT_NONE_FILTER = new FilenameFilter()
{
@Override
public boolean accept(File dir, String name)
{
return false;
}
};
public final static FilenameFilter ACCEPT_FORGE_FILTER = new FilenameFilter()
public final static FilenameFilter ACCEPT_FORGE_FILTER = new FilenameFilter()
{
@Override
public boolean accept(File dir, String name)
{
return name.startsWith("forge");
}
};
public final static FilenameFilter ACCEPT_MINECRAFT_SERVER_FILTER = new FilenameFilter()
public final static FilenameFilter ACCEPT_MINECRAFT_SERVER_FILTER = new FilenameFilter()
{
@Override
public boolean accept(File dir, String name)
{
return name.startsWith("minecraft_server");
}
};
public static final TemplateModel HELPER_TEMPLATE_MODEL = getStaticHelper();
public static final Timer TIMER = new Timer();
public static final Joiner JOINER_COMMA_SPACE = Joiner.on(", ");
public static final Joiner JOINER_COMMA = Joiner.on(',');
public static final Joiner JOINER_SPACE = Joiner.on(' ');
public static final String VERSION_CHECKER_URL = "http://jenkins.dries007.net/view/D3_misc/job/D3Backend/api/json?tree=lastStableBuild[number,artifacts[*]]";
public static final Pattern VERSION_PATTERN = Pattern.compile("\\d+(?:\\.\\d+)+");
public static final String JAVAPATH = getJavaPath();
public static final String SLASH_STR = "/";
public static final String TEMPLATE_EXTENSION = ".ftl";
public static final long SOCKET_PING_TIME = 1000 * 50;
/*
* JSON constants
*/
public static final Gson GSON = getGSON();
public static final JsonParser JSONPARSER = new JsonParser();
/*
* Joiner constants
*/
public static final Joiner JOINER_COMMA_SPACE = Joiner.on(", ");
public static final Joiner JOINER_COMMA = Joiner.on(',');
public static final Joiner JOINER_SPACE = Joiner.on(' ');
/*
* Special constants
* Can be order sensitive!
*/
public static final Random RANDOM = new Random();
public static final String JAVAPATH = getJavaPath();
public static final SimpleDateFormat BACKUP_SDF = new SimpleDateFormat("yyyy-MM-dd_HH-mm-ss");
public static final Timer TIMER = new Timer();

/**
* Methods that only get called to init the Constants
*/

private Constants()
{
}
Expand Down Expand Up @@ -204,15 +238,8 @@ else if (OSUtils.getCurrentOS() == OSUtils.OS.WINDOWS)
return System.getProperty("java.home") + "/bin/java";
}

private static TemplateModel getStaticHelper()
private static Gson getGSON()
{
try
{
return BeansWrapper.getDefaultInstance().getStaticModels().get(Helper.class.getName());
}
catch (TemplateModelException e)
{
throw new RuntimeException(e);
}
return new GsonBuilder().registerTypeAdapter(Server.class, new Server.Deserializer()).registerTypeAdapter(ServerData.class, new ServerData.Deserializer()).registerTypeAdapter(Server.class, new Server.Serializer()).setPrettyPrinting().create();
}
}
1 change: 1 addition & 0 deletions src/main/java/net/doubledoordev/backend/util/Helper.java
Expand Up @@ -100,6 +100,7 @@ public static boolean isPortAvailable(String hostname, int port)
}
}

private static final char[] symbols = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ".toCharArray();
public static String randomString(int length)
{
return new String(randomCharArray(length));
Expand Down
9 changes: 1 addition & 8 deletions src/main/java/net/doubledoordev/backend/util/PortRange.java
Expand Up @@ -41,6 +41,7 @@
package net.doubledoordev.backend.util;

import net.doubledoordev.backend.server.Server;
import net.doubledoordev.backend.util.exceptions.OutOfPortsException;

import java.util.HashSet;

Expand Down Expand Up @@ -73,12 +74,4 @@ public int getNextAvailablePort() throws OutOfPortsException
{
return getNextAvailablePort(-1);
}

public static class OutOfPortsException extends Exception
{
private OutOfPortsException()
{
super("We have run out of available ports...");
}
}
}

0 comments on commit 18461c1

Please sign in to comment.