mirror of
https://github.com/Grasscutters/Grasscutter.git
synced 2025-02-09 14:02:58 +08:00
Implement PR #657
This commit is contained in:
parent
0dcf0862f8
commit
5d7edc389e
@ -1,6 +1,7 @@
|
|||||||
package emu.grasscutter;
|
package emu.grasscutter;
|
||||||
|
|
||||||
import emu.grasscutter.utils.ConfigContainer;
|
import emu.grasscutter.utils.ConfigContainer;
|
||||||
|
import emu.grasscutter.utils.ConfigContainer.*;
|
||||||
|
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
|
|
||||||
@ -40,6 +41,7 @@ public final class Configuration extends ConfigContainer {
|
|||||||
|
|
||||||
public static final Encryption HTTP_ENCRYPTION = config.server.http.encryption;
|
public static final Encryption HTTP_ENCRYPTION = config.server.http.encryption;
|
||||||
public static final Policies HTTP_POLICIES = config.server.http.policies;
|
public static final Policies HTTP_POLICIES = config.server.http.policies;
|
||||||
|
public static final Files HTTP_STATIC_FILES = config.server.http.files;
|
||||||
|
|
||||||
public static final GameOptions GAME_OPTIONS = config.server.game.gameOptions;
|
public static final GameOptions GAME_OPTIONS = config.server.game.gameOptions;
|
||||||
public static final GameOptions.InventoryLimits INVENTORY_LIMITS = config.server.game.gameOptions.inventoryLimits;
|
public static final GameOptions.InventoryLimits INVENTORY_LIMITS = config.server.game.gameOptions.inventoryLimits;
|
||||||
|
@ -2,13 +2,16 @@ package emu.grasscutter.server.http;
|
|||||||
|
|
||||||
import emu.grasscutter.Grasscutter;
|
import emu.grasscutter.Grasscutter;
|
||||||
import emu.grasscutter.Grasscutter.ServerDebugMode;
|
import emu.grasscutter.Grasscutter.ServerDebugMode;
|
||||||
|
import emu.grasscutter.utils.FileUtils;
|
||||||
import express.Express;
|
import express.Express;
|
||||||
|
import express.http.MediaType;
|
||||||
import io.javalin.Javalin;
|
import io.javalin.Javalin;
|
||||||
import org.eclipse.jetty.server.Server;
|
import org.eclipse.jetty.server.Server;
|
||||||
import org.eclipse.jetty.server.ServerConnector;
|
import org.eclipse.jetty.server.ServerConnector;
|
||||||
import org.eclipse.jetty.util.ssl.SslContextFactory;
|
import org.eclipse.jetty.util.ssl.SslContextFactory;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
import static emu.grasscutter.Configuration.*;
|
import static emu.grasscutter.Configuration.*;
|
||||||
import static emu.grasscutter.utils.Language.translate;
|
import static emu.grasscutter.utils.Language.translate;
|
||||||
@ -62,7 +65,7 @@ public final class HttpServer {
|
|||||||
var sslContextFactory = new SslContextFactory.Server();
|
var sslContextFactory = new SslContextFactory.Server();
|
||||||
var keystoreFile = new File(HTTP_ENCRYPTION.keystore);
|
var keystoreFile = new File(HTTP_ENCRYPTION.keystore);
|
||||||
|
|
||||||
if(!keystoreFile.exists()) {;
|
if(!keystoreFile.exists()) {
|
||||||
HTTP_ENCRYPTION.useEncryption = false;
|
HTTP_ENCRYPTION.useEncryption = false;
|
||||||
HTTP_ENCRYPTION.useInRouting = false;
|
HTTP_ENCRYPTION.useInRouting = false;
|
||||||
|
|
||||||
@ -137,7 +140,10 @@ public final class HttpServer {
|
|||||||
*/
|
*/
|
||||||
public static class DefaultRequestRouter implements Router {
|
public static class DefaultRequestRouter implements Router {
|
||||||
@Override public void applyRoutes(Express express, Javalin handle) {
|
@Override public void applyRoutes(Express express, Javalin handle) {
|
||||||
express.get("/", (req, res) -> res.send("""
|
express.get("/", (request, response) -> {
|
||||||
|
File file = new File(HTTP_STATIC_FILES.errorFile);
|
||||||
|
if(!file.exists())
|
||||||
|
response.send("""
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html>
|
<html>
|
||||||
<head>
|
<head>
|
||||||
@ -145,7 +151,14 @@ public final class HttpServer {
|
|||||||
</head>
|
</head>
|
||||||
<body>%s</body>
|
<body>%s</body>
|
||||||
</html>
|
</html>
|
||||||
""".formatted(translate("messages.status.welcome"))));
|
""".formatted(translate("messages.status.welcome")));
|
||||||
|
else {
|
||||||
|
final var filePath = file.getPath();
|
||||||
|
final MediaType fromExtension = MediaType.getByExtension(filePath.substring(filePath.lastIndexOf(".") + 1));
|
||||||
|
response.type((fromExtension != null) ? fromExtension.getMIME() : "text/plain")
|
||||||
|
.send(FileUtils.read(filePath));
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -158,6 +171,9 @@ public final class HttpServer {
|
|||||||
if(SERVER.debugLevel == ServerDebugMode.MISSING)
|
if(SERVER.debugLevel == ServerDebugMode.MISSING)
|
||||||
Grasscutter.getLogger().info(translate("messages.dispatch.unhandled_request_error", context.method(), context.url()));
|
Grasscutter.getLogger().info(translate("messages.dispatch.unhandled_request_error", context.method(), context.url()));
|
||||||
context.contentType("text/html");
|
context.contentType("text/html");
|
||||||
|
|
||||||
|
File file = new File(HTTP_STATIC_FILES.errorFile);
|
||||||
|
if(!file.exists())
|
||||||
context.result("""
|
context.result("""
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html>
|
<html>
|
||||||
@ -170,6 +186,12 @@ public final class HttpServer {
|
|||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
""");
|
""");
|
||||||
|
else {
|
||||||
|
final var filePath = file.getPath();
|
||||||
|
final MediaType fromExtension = MediaType.getByExtension(filePath.substring(filePath.lastIndexOf(".") + 1));
|
||||||
|
context.contentType((fromExtension != null) ? fromExtension.getMIME() : "text/plain")
|
||||||
|
.result(FileUtils.read(filePath));
|
||||||
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -17,7 +17,7 @@ import static emu.grasscutter.Grasscutter.config;
|
|||||||
*/
|
*/
|
||||||
public class ConfigContainer {
|
public class ConfigContainer {
|
||||||
private static int version() {
|
private static int version() {
|
||||||
return 2;
|
return 3;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -125,6 +125,7 @@ public class ConfigContainer {
|
|||||||
|
|
||||||
public Encryption encryption = new Encryption();
|
public Encryption encryption = new Encryption();
|
||||||
public Policies policies = new Policies();
|
public Policies policies = new Policies();
|
||||||
|
public Files files = new Files();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class Game {
|
public static class Game {
|
||||||
@ -228,6 +229,11 @@ public class ConfigContainer {
|
|||||||
public String signature = "Welcome to Grasscutter!";
|
public String signature = "Welcome to Grasscutter!";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static class Files {
|
||||||
|
public String indexFile = "./index.html";
|
||||||
|
public String errorFile = "./404.html";
|
||||||
|
}
|
||||||
|
|
||||||
/* Objects. */
|
/* Objects. */
|
||||||
|
|
||||||
public static class Region {
|
public static class Region {
|
||||||
|
Loading…
Reference in New Issue
Block a user