mirror of
https://github.com/plan-player-analytics/Plan.git
synced 2025-02-02 21:41:28 +01:00
WebServer initialized by Dagger
This commit is contained in:
parent
81a6ed7365
commit
20b651f909
@ -22,7 +22,10 @@ package com.djrapitops.plan;
|
|||||||
import com.djrapitops.plan.api.exceptions.EnableException;
|
import com.djrapitops.plan.api.exceptions.EnableException;
|
||||||
import com.djrapitops.plan.command.PlanCommand;
|
import com.djrapitops.plan.command.PlanCommand;
|
||||||
import com.djrapitops.plan.modules.APFModule;
|
import com.djrapitops.plan.modules.APFModule;
|
||||||
import com.djrapitops.plan.modules.common.*;
|
import com.djrapitops.plan.modules.common.ExportModule;
|
||||||
|
import com.djrapitops.plan.modules.common.LocaleModule;
|
||||||
|
import com.djrapitops.plan.modules.common.PluginHookModule;
|
||||||
|
import com.djrapitops.plan.modules.common.VersionCheckModule;
|
||||||
import com.djrapitops.plan.modules.server.ServerAPIModule;
|
import com.djrapitops.plan.modules.server.ServerAPIModule;
|
||||||
import com.djrapitops.plan.modules.server.ServerDataCacheModule;
|
import com.djrapitops.plan.modules.server.ServerDataCacheModule;
|
||||||
import com.djrapitops.plan.modules.server.ServerInfoSystemModule;
|
import com.djrapitops.plan.modules.server.ServerInfoSystemModule;
|
||||||
@ -64,7 +67,6 @@ import java.util.logging.Logger;
|
|||||||
BukkitInfoModule.class,
|
BukkitInfoModule.class,
|
||||||
BukkitDatabaseModule.class,
|
BukkitDatabaseModule.class,
|
||||||
ServerDataCacheModule.class,
|
ServerDataCacheModule.class,
|
||||||
WebServerSystemModule.class,
|
|
||||||
ServerInfoSystemModule.class,
|
ServerInfoSystemModule.class,
|
||||||
PluginHookModule.class,
|
PluginHookModule.class,
|
||||||
ServerAPIModule.class
|
ServerAPIModule.class
|
||||||
|
@ -10,7 +10,11 @@ import com.djrapitops.plan.modules.APFModule;
|
|||||||
import com.djrapitops.plan.modules.bungee.BungeeAPIModule;
|
import com.djrapitops.plan.modules.bungee.BungeeAPIModule;
|
||||||
import com.djrapitops.plan.modules.bungee.BungeeConfigModule;
|
import com.djrapitops.plan.modules.bungee.BungeeConfigModule;
|
||||||
import com.djrapitops.plan.modules.bungee.BungeeDatabaseModule;
|
import com.djrapitops.plan.modules.bungee.BungeeDatabaseModule;
|
||||||
import com.djrapitops.plan.modules.common.*;
|
import com.djrapitops.plan.modules.bungee.BungeeInfoModule;
|
||||||
|
import com.djrapitops.plan.modules.common.ExportModule;
|
||||||
|
import com.djrapitops.plan.modules.common.LocaleModule;
|
||||||
|
import com.djrapitops.plan.modules.common.PluginHookModule;
|
||||||
|
import com.djrapitops.plan.modules.common.VersionCheckModule;
|
||||||
import com.djrapitops.plan.modules.server.ServerInfoSystemModule;
|
import com.djrapitops.plan.modules.server.ServerInfoSystemModule;
|
||||||
import com.djrapitops.plan.system.BungeeSystem;
|
import com.djrapitops.plan.system.BungeeSystem;
|
||||||
import com.djrapitops.plan.system.locale.Locale;
|
import com.djrapitops.plan.system.locale.Locale;
|
||||||
@ -41,8 +45,8 @@ import java.io.InputStream;
|
|||||||
VersionCheckModule.class,
|
VersionCheckModule.class,
|
||||||
BungeeConfigModule.class,
|
BungeeConfigModule.class,
|
||||||
LocaleModule.class,
|
LocaleModule.class,
|
||||||
|
BungeeInfoModule.class,
|
||||||
BungeeDatabaseModule.class,
|
BungeeDatabaseModule.class,
|
||||||
WebServerSystemModule.class,
|
|
||||||
ServerInfoSystemModule.class,
|
ServerInfoSystemModule.class,
|
||||||
PluginHookModule.class,
|
PluginHookModule.class,
|
||||||
BungeeAPIModule.class
|
BungeeAPIModule.class
|
||||||
|
@ -3,7 +3,10 @@ package com.djrapitops.plan;
|
|||||||
import com.djrapitops.plan.api.exceptions.EnableException;
|
import com.djrapitops.plan.api.exceptions.EnableException;
|
||||||
import com.djrapitops.plan.command.PlanCommand;
|
import com.djrapitops.plan.command.PlanCommand;
|
||||||
import com.djrapitops.plan.modules.APFModule;
|
import com.djrapitops.plan.modules.APFModule;
|
||||||
import com.djrapitops.plan.modules.common.*;
|
import com.djrapitops.plan.modules.common.ExportModule;
|
||||||
|
import com.djrapitops.plan.modules.common.LocaleModule;
|
||||||
|
import com.djrapitops.plan.modules.common.PluginHookModule;
|
||||||
|
import com.djrapitops.plan.modules.common.VersionCheckModule;
|
||||||
import com.djrapitops.plan.modules.server.ServerAPIModule;
|
import com.djrapitops.plan.modules.server.ServerAPIModule;
|
||||||
import com.djrapitops.plan.modules.server.ServerDataCacheModule;
|
import com.djrapitops.plan.modules.server.ServerDataCacheModule;
|
||||||
import com.djrapitops.plan.modules.server.ServerInfoSystemModule;
|
import com.djrapitops.plan.modules.server.ServerInfoSystemModule;
|
||||||
@ -51,7 +54,6 @@ import java.io.InputStream;
|
|||||||
LocaleModule.class,
|
LocaleModule.class,
|
||||||
SpongeDatabaseModule.class,
|
SpongeDatabaseModule.class,
|
||||||
ServerDataCacheModule.class,
|
ServerDataCacheModule.class,
|
||||||
WebServerSystemModule.class,
|
|
||||||
ServerInfoSystemModule.class,
|
ServerInfoSystemModule.class,
|
||||||
SpongeInfoModule.class,
|
SpongeInfoModule.class,
|
||||||
PluginHookModule.class,
|
PluginHookModule.class,
|
||||||
|
@ -0,0 +1,21 @@
|
|||||||
|
package com.djrapitops.plan.modules.bungee;
|
||||||
|
|
||||||
|
import com.djrapitops.plan.PlanBungee;
|
||||||
|
import com.djrapitops.plan.system.info.server.properties.BungeeServerProperties;
|
||||||
|
import com.djrapitops.plan.system.info.server.properties.ServerProperties;
|
||||||
|
import dagger.Module;
|
||||||
|
import dagger.Provides;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Dagger module for Bukkit ServerInfo.
|
||||||
|
*
|
||||||
|
* @author Rsl1122
|
||||||
|
*/
|
||||||
|
@Module
|
||||||
|
public class BungeeInfoModule {
|
||||||
|
|
||||||
|
@Provides
|
||||||
|
ServerProperties provideServerProperties(PlanBungee plugin) {
|
||||||
|
return new BungeeServerProperties(plugin.getProxy());
|
||||||
|
}
|
||||||
|
}
|
@ -1,27 +0,0 @@
|
|||||||
package com.djrapitops.plan.modules.common;
|
|
||||||
|
|
||||||
import com.djrapitops.plan.system.locale.Locale;
|
|
||||||
import com.djrapitops.plan.system.webserver.WebServer;
|
|
||||||
import com.djrapitops.plan.system.webserver.WebServerSystem;
|
|
||||||
import dagger.Module;
|
|
||||||
import dagger.Provides;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Dagger module for WebServerSystem.
|
|
||||||
*
|
|
||||||
* @author Rsl1122
|
|
||||||
*/
|
|
||||||
@Module
|
|
||||||
public class WebServerSystemModule {
|
|
||||||
|
|
||||||
@Provides
|
|
||||||
WebServerSystem provideWebServerSystem(Locale locale) {
|
|
||||||
return new WebServerSystem(() -> locale);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Provides
|
|
||||||
WebServer provideWebServer(WebServerSystem webServerSystem) {
|
|
||||||
return webServerSystem.getWebServer();
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -19,6 +19,7 @@ import com.djrapitops.plan.system.settings.config.ConfigSystem;
|
|||||||
import com.djrapitops.plan.system.settings.network.NetworkSettings;
|
import com.djrapitops.plan.system.settings.network.NetworkSettings;
|
||||||
import com.djrapitops.plan.system.tasks.BukkitTaskSystem;
|
import com.djrapitops.plan.system.tasks.BukkitTaskSystem;
|
||||||
import com.djrapitops.plan.system.update.VersionCheckSystem;
|
import com.djrapitops.plan.system.update.VersionCheckSystem;
|
||||||
|
import com.djrapitops.plan.system.webserver.WebServerSystem;
|
||||||
|
|
||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
|
|
||||||
@ -36,6 +37,7 @@ public class BukkitSystem extends PlanSystem implements ServerSystem {
|
|||||||
InfoSystem serverInfoSystem,
|
InfoSystem serverInfoSystem,
|
||||||
BukkitServerInfo serverInfo,
|
BukkitServerInfo serverInfo,
|
||||||
DBSystem databaseSystem,
|
DBSystem databaseSystem,
|
||||||
|
WebServerSystem webServerSystem,
|
||||||
BukkitListenerSystem bukkitListenerSystem,
|
BukkitListenerSystem bukkitListenerSystem,
|
||||||
BukkitTaskSystem bukkitTaskSystem,
|
BukkitTaskSystem bukkitTaskSystem,
|
||||||
ExportSystem exportSystem,
|
ExportSystem exportSystem,
|
||||||
@ -43,6 +45,7 @@ public class BukkitSystem extends PlanSystem implements ServerSystem {
|
|||||||
PlanAPI planAPI,
|
PlanAPI planAPI,
|
||||||
ShutdownHook shutdownHook
|
ShutdownHook shutdownHook
|
||||||
) {
|
) {
|
||||||
|
super(webServerSystem);
|
||||||
this.versionCheckSystem = versionCheckSystem;
|
this.versionCheckSystem = versionCheckSystem;
|
||||||
this.fileSystem = fileSystem;
|
this.fileSystem = fileSystem;
|
||||||
this.configSystem = serverConfigSystem;
|
this.configSystem = serverConfigSystem;
|
||||||
|
@ -19,6 +19,7 @@ import com.djrapitops.plan.system.settings.config.BungeeConfigSystem;
|
|||||||
import com.djrapitops.plan.system.settings.network.NetworkSettings;
|
import com.djrapitops.plan.system.settings.network.NetworkSettings;
|
||||||
import com.djrapitops.plan.system.tasks.BungeeTaskSystem;
|
import com.djrapitops.plan.system.tasks.BungeeTaskSystem;
|
||||||
import com.djrapitops.plan.system.update.VersionCheckSystem;
|
import com.djrapitops.plan.system.update.VersionCheckSystem;
|
||||||
|
import com.djrapitops.plan.system.webserver.WebServerSystem;
|
||||||
|
|
||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
|
|
||||||
@ -34,12 +35,15 @@ public class BungeeSystem extends PlanSystem {
|
|||||||
VersionCheckSystem versionCheckSystem,
|
VersionCheckSystem versionCheckSystem,
|
||||||
FileSystem fileSystem,
|
FileSystem fileSystem,
|
||||||
BungeeConfigSystem bungeeConfigSystem,
|
BungeeConfigSystem bungeeConfigSystem,
|
||||||
|
BungeeServerInfo bungeeServerInfo,
|
||||||
BungeeCacheSystem bungeeCacheSystem,
|
BungeeCacheSystem bungeeCacheSystem,
|
||||||
DBSystem databaseSystem,
|
DBSystem databaseSystem,
|
||||||
|
WebServerSystem webServerSystem,
|
||||||
HookHandler hookHandler,
|
HookHandler hookHandler,
|
||||||
ExportSystem exportSystem,
|
ExportSystem exportSystem,
|
||||||
PlanAPI planAPI
|
PlanAPI planAPI
|
||||||
) {
|
) {
|
||||||
|
super(webServerSystem);
|
||||||
setTestSystem(this);
|
setTestSystem(this);
|
||||||
|
|
||||||
this.versionCheckSystem = versionCheckSystem;
|
this.versionCheckSystem = versionCheckSystem;
|
||||||
@ -52,7 +56,7 @@ public class BungeeSystem extends PlanSystem {
|
|||||||
taskSystem = new BungeeTaskSystem(plugin.getRunnableFactory());
|
taskSystem = new BungeeTaskSystem(plugin.getRunnableFactory());
|
||||||
|
|
||||||
infoSystem = new BungeeInfoSystem();
|
infoSystem = new BungeeInfoSystem();
|
||||||
serverInfo = new BungeeServerInfo(plugin);
|
serverInfo = bungeeServerInfo;
|
||||||
|
|
||||||
this.hookHandler = hookHandler;
|
this.hookHandler = hookHandler;
|
||||||
this.planAPI = planAPI;
|
this.planAPI = planAPI;
|
||||||
|
@ -61,11 +61,11 @@ public abstract class PlanSystem implements SubSystem {
|
|||||||
// Not a SubSystem.
|
// Not a SubSystem.
|
||||||
protected PlanAPI planAPI;
|
protected PlanAPI planAPI;
|
||||||
|
|
||||||
public PlanSystem() {
|
public PlanSystem(WebServerSystem webServerSystem) {
|
||||||
|
this.webServerSystem = webServerSystem;
|
||||||
Supplier<Locale> localeSupplier = () -> getLocaleSystem().getLocale();
|
Supplier<Locale> localeSupplier = () -> getLocaleSystem().getLocale();
|
||||||
|
|
||||||
processing = new Processing(localeSupplier);
|
processing = new Processing(localeSupplier);
|
||||||
webServerSystem = new WebServerSystem(localeSupplier);
|
|
||||||
localeSystem = new LocaleSystem();
|
localeSystem = new LocaleSystem();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -19,6 +19,7 @@ import com.djrapitops.plan.system.settings.config.ConfigSystem;
|
|||||||
import com.djrapitops.plan.system.settings.network.NetworkSettings;
|
import com.djrapitops.plan.system.settings.network.NetworkSettings;
|
||||||
import com.djrapitops.plan.system.tasks.SpongeTaskSystem;
|
import com.djrapitops.plan.system.tasks.SpongeTaskSystem;
|
||||||
import com.djrapitops.plan.system.update.VersionCheckSystem;
|
import com.djrapitops.plan.system.update.VersionCheckSystem;
|
||||||
|
import com.djrapitops.plan.system.webserver.WebServerSystem;
|
||||||
|
|
||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
|
|
||||||
@ -36,14 +37,16 @@ public class SpongeSystem extends PlanSystem implements ServerSystem {
|
|||||||
ConfigSystem serverConfigSystem,
|
ConfigSystem serverConfigSystem,
|
||||||
InfoSystem serverInfoSystem,
|
InfoSystem serverInfoSystem,
|
||||||
SpongeServerInfo serverInfo,
|
SpongeServerInfo serverInfo,
|
||||||
|
DBSystem databaseSystem,
|
||||||
|
WebServerSystem webServerSystem,
|
||||||
SpongeListenerSystem spongeListenerSystem,
|
SpongeListenerSystem spongeListenerSystem,
|
||||||
SpongeTaskSystem spongeTaskSystem,
|
SpongeTaskSystem spongeTaskSystem,
|
||||||
DBSystem databaseSystem,
|
|
||||||
ExportSystem exportSystem,
|
ExportSystem exportSystem,
|
||||||
HookHandler hookHandler,
|
HookHandler hookHandler,
|
||||||
PlanAPI planAPI,
|
PlanAPI planAPI,
|
||||||
ShutdownHook shutdownHook
|
ShutdownHook shutdownHook
|
||||||
) {
|
) {
|
||||||
|
super(webServerSystem);
|
||||||
setTestSystem(this);
|
setTestSystem(this);
|
||||||
|
|
||||||
this.versionCheckSystem = versionCheckSystem;
|
this.versionCheckSystem = versionCheckSystem;
|
||||||
|
@ -10,7 +10,7 @@ import com.djrapitops.plan.system.database.databases.Database;
|
|||||||
import com.djrapitops.plan.system.info.server.properties.ServerProperties;
|
import com.djrapitops.plan.system.info.server.properties.ServerProperties;
|
||||||
import com.djrapitops.plan.system.settings.Settings;
|
import com.djrapitops.plan.system.settings.Settings;
|
||||||
import com.djrapitops.plan.system.settings.config.PlanConfig;
|
import com.djrapitops.plan.system.settings.config.PlanConfig;
|
||||||
import com.djrapitops.plan.system.webserver.WebServerSystem;
|
import com.djrapitops.plan.system.webserver.WebServer;
|
||||||
|
|
||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
@ -26,15 +26,23 @@ import java.util.UUID;
|
|||||||
*/
|
*/
|
||||||
public class BukkitServerInfo extends ServerInfo {
|
public class BukkitServerInfo extends ServerInfo {
|
||||||
|
|
||||||
|
private final WebServer webServer;
|
||||||
private final PlanConfig config;
|
private final PlanConfig config;
|
||||||
private ServerInfoFile serverInfoFile;
|
private ServerInfoFile serverInfoFile;
|
||||||
private Database database;
|
private Database database;
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
public BukkitServerInfo(ServerProperties serverProperties, ServerInfoFile serverInfoFile, Database database, PlanConfig config) {
|
public BukkitServerInfo(
|
||||||
|
ServerProperties serverProperties,
|
||||||
|
ServerInfoFile serverInfoFile,
|
||||||
|
Database database,
|
||||||
|
WebServer webServer,
|
||||||
|
PlanConfig config
|
||||||
|
) {
|
||||||
super(serverProperties);
|
super(serverProperties);
|
||||||
this.serverInfoFile = serverInfoFile;
|
this.serverInfoFile = serverInfoFile;
|
||||||
this.database = database;
|
this.database = database;
|
||||||
|
this.webServer = webServer;
|
||||||
this.config = config;
|
this.config = config;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -67,7 +75,7 @@ public class BukkitServerInfo extends ServerInfo {
|
|||||||
return registerServer(serverUUID);
|
return registerServer(serverUUID);
|
||||||
}
|
}
|
||||||
String name = config.getString(Settings.SERVER_NAME).replaceAll("[^a-zA-Z0-9_\\s]", "_");
|
String name = config.getString(Settings.SERVER_NAME).replaceAll("[^a-zA-Z0-9_\\s]", "_");
|
||||||
String webAddress = WebServerSystem.getInstance().getWebServer().getAccessAddress();
|
String webAddress = webServer.getAccessAddress();
|
||||||
if ("plan".equalsIgnoreCase(name)) {
|
if ("plan".equalsIgnoreCase(name)) {
|
||||||
name = "Server " + serverID.get();
|
name = "Server " + serverID.get();
|
||||||
}
|
}
|
||||||
@ -83,7 +91,7 @@ public class BukkitServerInfo extends ServerInfo {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private Server registerServer(UUID serverUUID) throws IOException {
|
private Server registerServer(UUID serverUUID) throws IOException {
|
||||||
String webAddress = WebServerSystem.getInstance().getWebServer().getAccessAddress();
|
String webAddress = webServer.getAccessAddress();
|
||||||
String name = config.getString(Settings.SERVER_NAME).replaceAll("[^a-zA-Z0-9_\\s]", "_");
|
String name = config.getString(Settings.SERVER_NAME).replaceAll("[^a-zA-Z0-9_\\s]", "_");
|
||||||
int maxPlayers = serverProperties.getMaxPlayers();
|
int maxPlayers = serverProperties.getMaxPlayers();
|
||||||
|
|
||||||
@ -103,7 +111,12 @@ public class BukkitServerInfo extends ServerInfo {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private UUID generateNewUUID() {
|
private UUID generateNewUUID() {
|
||||||
String seed = serverProperties.getServerId() + serverProperties.getName() + serverProperties.getIp() + serverProperties.getPort() + serverProperties.getVersion() + serverProperties.getImplVersion();
|
String seed = serverProperties.getServerId() +
|
||||||
|
serverProperties.getName() +
|
||||||
|
serverProperties.getIp() +
|
||||||
|
serverProperties.getPort() +
|
||||||
|
serverProperties.getVersion() +
|
||||||
|
serverProperties.getImplVersion();
|
||||||
return UUID.nameUUIDFromBytes(seed.getBytes());
|
return UUID.nameUUIDFromBytes(seed.getBytes());
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -4,15 +4,14 @@
|
|||||||
*/
|
*/
|
||||||
package com.djrapitops.plan.system.info.server;
|
package com.djrapitops.plan.system.info.server;
|
||||||
|
|
||||||
import com.djrapitops.plan.PlanBungee;
|
|
||||||
import com.djrapitops.plan.api.exceptions.EnableException;
|
import com.djrapitops.plan.api.exceptions.EnableException;
|
||||||
import com.djrapitops.plan.api.exceptions.database.DBOpException;
|
import com.djrapitops.plan.api.exceptions.database.DBOpException;
|
||||||
import com.djrapitops.plan.system.database.databases.Database;
|
import com.djrapitops.plan.system.database.databases.Database;
|
||||||
import com.djrapitops.plan.system.info.server.properties.BungeeServerProperties;
|
|
||||||
import com.djrapitops.plan.system.info.server.properties.ServerProperties;
|
import com.djrapitops.plan.system.info.server.properties.ServerProperties;
|
||||||
import com.djrapitops.plan.system.webserver.WebServerSystem;
|
import com.djrapitops.plan.system.webserver.WebServer;
|
||||||
import com.djrapitops.plugin.api.utility.log.Log;
|
import com.djrapitops.plugin.logging.console.PluginLogger;
|
||||||
|
|
||||||
|
import javax.inject.Inject;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
@ -23,8 +22,21 @@ import java.util.UUID;
|
|||||||
*/
|
*/
|
||||||
public class BungeeServerInfo extends ServerInfo {
|
public class BungeeServerInfo extends ServerInfo {
|
||||||
|
|
||||||
public BungeeServerInfo(PlanBungee plugin) {
|
private final Database database;
|
||||||
super(new BungeeServerProperties(plugin.getProxy()));
|
private final WebServer webServer;
|
||||||
|
private final PluginLogger logger;
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
public BungeeServerInfo(
|
||||||
|
ServerProperties serverProperties,
|
||||||
|
Database database,
|
||||||
|
WebServer webServer,
|
||||||
|
PluginLogger logger
|
||||||
|
) {
|
||||||
|
super(serverProperties);
|
||||||
|
this.database = database;
|
||||||
|
this.webServer = webServer;
|
||||||
|
this.logger = logger;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -32,13 +44,12 @@ public class BungeeServerInfo extends ServerInfo {
|
|||||||
checkIfDefaultIP();
|
checkIfDefaultIP();
|
||||||
|
|
||||||
try {
|
try {
|
||||||
Database db = Database.getActive();
|
Optional<Server> bungeeInfo = database.fetch().getBungeeInformation();
|
||||||
Optional<Server> bungeeInfo = db.fetch().getBungeeInformation();
|
|
||||||
if (bungeeInfo.isPresent()) {
|
if (bungeeInfo.isPresent()) {
|
||||||
server = bungeeInfo.get();
|
server = bungeeInfo.get();
|
||||||
updateServerInfo(db);
|
updateServerInfo(database);
|
||||||
} else {
|
} else {
|
||||||
server = registerBungeeInfo(db);
|
server = registerBungeeInfo(database);
|
||||||
}
|
}
|
||||||
} catch (DBOpException e) {
|
} catch (DBOpException e) {
|
||||||
throw new EnableException("Failed to read Server information from Database.");
|
throw new EnableException("Failed to read Server information from Database.");
|
||||||
@ -47,7 +58,7 @@ public class BungeeServerInfo extends ServerInfo {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void updateServerInfo(Database db) {
|
private void updateServerInfo(Database db) {
|
||||||
String accessAddress = WebServerSystem.getInstance().getWebServer().getAccessAddress();
|
String accessAddress = webServer.getAccessAddress();
|
||||||
if (!accessAddress.equals(server.getWebAddress())) {
|
if (!accessAddress.equals(server.getWebAddress())) {
|
||||||
server.setWebAddress(accessAddress);
|
server.setWebAddress(accessAddress);
|
||||||
db.save().serverInfoForThisServer(server);
|
db.save().serverInfoForThisServer(server);
|
||||||
@ -55,20 +66,19 @@ public class BungeeServerInfo extends ServerInfo {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void checkIfDefaultIP() throws EnableException {
|
private void checkIfDefaultIP() throws EnableException {
|
||||||
String ip = ServerInfo.getServerProperties_Old().getIp();
|
String ip = serverProperties.getIp();
|
||||||
if ("0.0.0.0".equals(ip)) {
|
if ("0.0.0.0".equals(ip)) {
|
||||||
Log.error("IP setting still 0.0.0.0 - Configure AlternativeIP/IP that connects to the Proxy server.");
|
logger.error("IP setting still 0.0.0.0 - Configure AlternativeIP/IP that connects to the Proxy server.");
|
||||||
Log.info("Player Analytics partially enabled (Use /planbungee to reload config)");
|
logger.info("Player Analytics partially enabled (Use /planbungee to reload config)");
|
||||||
throw new EnableException("IP setting still 0.0.0.0 - Configure AlternativeIP/IP that connects to the Proxy server.");
|
throw new EnableException("IP setting still 0.0.0.0 - Configure AlternativeIP/IP that connects to the Proxy server.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private Server registerBungeeInfo(Database db) throws EnableException {
|
private Server registerBungeeInfo(Database db) throws EnableException {
|
||||||
ServerProperties properties = ServerInfo.getServerProperties_Old();
|
UUID serverUUID = generateNewUUID();
|
||||||
UUID serverUUID = generateNewUUID(properties);
|
String accessAddress = webServer.getAccessAddress();
|
||||||
String accessAddress = WebServerSystem.getInstance().getWebServer().getAccessAddress();
|
|
||||||
|
|
||||||
Server bungeeCord = new Server(-1, serverUUID, "BungeeCord", accessAddress, properties.getMaxPlayers());
|
Server bungeeCord = new Server(-1, serverUUID, "BungeeCord", accessAddress, serverProperties.getMaxPlayers());
|
||||||
db.save().serverInfoForThisServer(bungeeCord);
|
db.save().serverInfoForThisServer(bungeeCord);
|
||||||
|
|
||||||
Optional<Server> bungeeInfo = db.fetch().getBungeeInformation();
|
Optional<Server> bungeeInfo = db.fetch().getBungeeInformation();
|
||||||
@ -78,8 +88,12 @@ public class BungeeServerInfo extends ServerInfo {
|
|||||||
throw new EnableException("BungeeCord registration failed (DB)");
|
throw new EnableException("BungeeCord registration failed (DB)");
|
||||||
}
|
}
|
||||||
|
|
||||||
private UUID generateNewUUID(ServerProperties properties) {
|
private UUID generateNewUUID() {
|
||||||
String seed = properties.getName() + properties.getIp() + properties.getPort() + properties.getVersion() + properties.getImplVersion();
|
String seed = serverProperties.getName() +
|
||||||
|
serverProperties.getIp() +
|
||||||
|
serverProperties.getPort() +
|
||||||
|
serverProperties.getVersion() +
|
||||||
|
serverProperties.getImplVersion();
|
||||||
return UUID.nameUUIDFromBytes(seed.getBytes());
|
return UUID.nameUUIDFromBytes(seed.getBytes());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3,13 +3,20 @@ package com.djrapitops.plan.system.info.server;
|
|||||||
import com.djrapitops.plan.system.database.databases.Database;
|
import com.djrapitops.plan.system.database.databases.Database;
|
||||||
import com.djrapitops.plan.system.info.server.properties.ServerProperties;
|
import com.djrapitops.plan.system.info.server.properties.ServerProperties;
|
||||||
import com.djrapitops.plan.system.settings.config.PlanConfig;
|
import com.djrapitops.plan.system.settings.config.PlanConfig;
|
||||||
|
import com.djrapitops.plan.system.webserver.WebServer;
|
||||||
|
|
||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
|
|
||||||
public class SpongeServerInfo extends BukkitServerInfo {
|
public class SpongeServerInfo extends BukkitServerInfo {
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
public SpongeServerInfo(ServerProperties serverProperties, ServerInfoFile serverInfoFile, Database database, PlanConfig config) {
|
public SpongeServerInfo(
|
||||||
super(serverProperties, serverInfoFile, database, config);
|
ServerProperties serverProperties,
|
||||||
|
ServerInfoFile serverInfoFile,
|
||||||
|
Database database,
|
||||||
|
WebServer webServer,
|
||||||
|
PlanConfig config
|
||||||
|
) {
|
||||||
|
super(serverProperties, serverInfoFile, database, webServer, config);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -17,29 +17,32 @@ import com.sun.net.httpserver.Headers;
|
|||||||
import com.sun.net.httpserver.HttpExchange;
|
import com.sun.net.httpserver.HttpExchange;
|
||||||
import com.sun.net.httpserver.HttpHandler;
|
import com.sun.net.httpserver.HttpHandler;
|
||||||
|
|
||||||
|
import javax.inject.Inject;
|
||||||
|
import javax.inject.Singleton;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.function.Supplier;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* HttpHandler for WebServer request management.
|
* HttpHandler for WebServer request management.
|
||||||
*
|
*
|
||||||
* @author Rsl1122
|
* @author Rsl1122
|
||||||
*/
|
*/
|
||||||
|
@Singleton
|
||||||
public class RequestHandler implements HttpHandler {
|
public class RequestHandler implements HttpHandler {
|
||||||
|
|
||||||
private final Supplier<Locale> locale;
|
private final Locale locale;
|
||||||
private final ResponseHandler responseHandler;
|
private final ResponseHandler responseHandler;
|
||||||
|
|
||||||
RequestHandler(WebServer webServer) {
|
@Inject
|
||||||
responseHandler = new ResponseHandler(webServer);
|
RequestHandler(Locale locale, ResponseHandler responseHandler) {
|
||||||
locale = webServer.getLocaleSupplier();
|
this.locale = locale;
|
||||||
|
this.responseHandler = responseHandler;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void handle(HttpExchange exchange) {
|
public void handle(HttpExchange exchange) {
|
||||||
Headers requestHeaders = exchange.getRequestHeaders();
|
Headers requestHeaders = exchange.getRequestHeaders();
|
||||||
Headers responseHeaders = exchange.getResponseHeaders();
|
Headers responseHeaders = exchange.getResponseHeaders();
|
||||||
Request request = new Request(exchange, locale.get());
|
Request request = new Request(exchange, locale);
|
||||||
request.setAuth(getAuthorization(requestHeaders));
|
request.setAuth(getAuthorization(requestHeaders));
|
||||||
|
|
||||||
String requestString = request.toString();
|
String requestString = request.toString();
|
||||||
@ -53,7 +56,7 @@ public class RequestHandler implements HttpHandler {
|
|||||||
}
|
}
|
||||||
|
|
||||||
response.setResponseHeaders(responseHeaders);
|
response.setResponseHeaders(responseHeaders);
|
||||||
response.send(exchange, locale.get());
|
response.send(exchange, locale);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
if (Settings.DEV_MODE.isTrue()) {
|
if (Settings.DEV_MODE.isTrue()) {
|
||||||
Log.warn("THIS ERROR IS ONLY LOGGED IN DEV MODE:");
|
Log.warn("THIS ERROR IS ONLY LOGGED IN DEV MODE:");
|
||||||
|
@ -14,8 +14,11 @@ import com.djrapitops.plan.system.webserver.cache.ResponseCache;
|
|||||||
import com.djrapitops.plan.system.webserver.pages.*;
|
import com.djrapitops.plan.system.webserver.pages.*;
|
||||||
import com.djrapitops.plan.system.webserver.response.*;
|
import com.djrapitops.plan.system.webserver.response.*;
|
||||||
import com.djrapitops.plan.system.webserver.response.errors.*;
|
import com.djrapitops.plan.system.webserver.response.errors.*;
|
||||||
import com.djrapitops.plugin.api.utility.log.Log;
|
import com.djrapitops.plugin.logging.L;
|
||||||
|
import com.djrapitops.plugin.logging.error.ErrorHandler;
|
||||||
|
|
||||||
|
import javax.inject.Inject;
|
||||||
|
import javax.inject.Singleton;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@ -26,15 +29,22 @@ import java.util.Optional;
|
|||||||
*
|
*
|
||||||
* @author Rsl1122
|
* @author Rsl1122
|
||||||
*/
|
*/
|
||||||
|
@Singleton
|
||||||
public class ResponseHandler extends TreePageHandler {
|
public class ResponseHandler extends TreePageHandler {
|
||||||
|
|
||||||
private final WebServer webServer;
|
private final ErrorHandler errorHandler;
|
||||||
|
|
||||||
public ResponseHandler(WebServer webServer) {
|
private WebServer webServer;
|
||||||
this.webServer = webServer;
|
|
||||||
|
@Inject
|
||||||
|
public ResponseHandler(ErrorHandler errorHandler) {
|
||||||
|
this.errorHandler = errorHandler;
|
||||||
|
|
||||||
|
registerWebAPIPages();
|
||||||
|
registerDefaultPages();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void registerDefaultPages() {
|
private void registerDefaultPages() {
|
||||||
registerPage("favicon.ico", new RedirectResponse("https://puu.sh/tK0KL/6aa2ba141b.ico"), 5);
|
registerPage("favicon.ico", new RedirectResponse("https://puu.sh/tK0KL/6aa2ba141b.ico"), 5);
|
||||||
registerPage("debug", new DebugPageHandler());
|
registerPage("debug", new DebugPageHandler());
|
||||||
registerPage("players", new PlayersPageHandler());
|
registerPage("players", new PlayersPageHandler());
|
||||||
@ -44,7 +54,7 @@ public class ResponseHandler extends TreePageHandler {
|
|||||||
registerPage("network", serverPageHandler);
|
registerPage("network", serverPageHandler);
|
||||||
registerPage("server", serverPageHandler);
|
registerPage("server", serverPageHandler);
|
||||||
registerPage("", webServer.isAuthRequired()
|
registerPage("", webServer.isAuthRequired()
|
||||||
? new RootPageHandler(this)
|
? new RootPageHandler()
|
||||||
: new PageHandler() {
|
: new PageHandler() {
|
||||||
@Override
|
@Override
|
||||||
public Response getResponse(Request request, List<String> target) {
|
public Response getResponse(Request request, List<String> target) {
|
||||||
@ -53,7 +63,7 @@ public class ResponseHandler extends TreePageHandler {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public void registerWebAPIPages() {
|
private void registerWebAPIPages() {
|
||||||
registerPage("info", new InfoRequestPageHandler());
|
registerPage("info", new InfoRequestPageHandler());
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -84,7 +94,7 @@ public class ResponseHandler extends TreePageHandler {
|
|||||||
return new InternalErrorResponse(request.getTarget(), e);
|
return new InternalErrorResponse(request.getTarget(), e);
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
Log.toLog(this.getClass(), e);
|
errorHandler.log(L.ERROR, this.getClass(), e);
|
||||||
return new InternalErrorResponse(request.getTarget(), e);
|
return new InternalErrorResponse(request.getTarget(), e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -106,7 +116,7 @@ public class ResponseHandler extends TreePageHandler {
|
|||||||
if (webServer.isUsingHTTPS()) {
|
if (webServer.isUsingHTTPS()) {
|
||||||
return DefaultResponses.BASIC_AUTH.get();
|
return DefaultResponses.BASIC_AUTH.get();
|
||||||
} else {
|
} else {
|
||||||
return forbiddenResponse();
|
return DefaultResponses.FORBIDDEN.get();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -118,13 +128,11 @@ public class ResponseHandler extends TreePageHandler {
|
|||||||
if (!isAuthRequired || isAuthorized) {
|
if (!isAuthRequired || isAuthorized) {
|
||||||
return pageHandler.getResponse(request, target);
|
return pageHandler.getResponse(request, target);
|
||||||
}
|
}
|
||||||
return forbiddenResponse();
|
return DefaultResponses.FORBIDDEN.get();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public Response forbiddenResponse() {
|
public void setWebServer(WebServer webServer) {
|
||||||
return ResponseCache.loadResponse(PageId.FORBIDDEN.id(), () ->
|
this.webServer = webServer;
|
||||||
new ForbiddenResponse("Your user is not authorized to view this page.<br>"
|
|
||||||
+ "If you believe this is an error contact staff to change your access level."));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,22 +1,25 @@
|
|||||||
package com.djrapitops.plan.system.webserver;
|
package com.djrapitops.plan.system.webserver;
|
||||||
|
|
||||||
import com.djrapitops.plan.PlanPlugin;
|
|
||||||
import com.djrapitops.plan.api.exceptions.EnableException;
|
import com.djrapitops.plan.api.exceptions.EnableException;
|
||||||
import com.djrapitops.plan.system.SubSystem;
|
import com.djrapitops.plan.system.SubSystem;
|
||||||
import com.djrapitops.plan.system.file.FileSystem;
|
import com.djrapitops.plan.system.file.FileSystem;
|
||||||
import com.djrapitops.plan.system.locale.Locale;
|
import com.djrapitops.plan.system.locale.Locale;
|
||||||
import com.djrapitops.plan.system.locale.lang.PluginLang;
|
import com.djrapitops.plan.system.locale.lang.PluginLang;
|
||||||
import com.djrapitops.plan.system.settings.Settings;
|
import com.djrapitops.plan.system.settings.Settings;
|
||||||
|
import com.djrapitops.plan.system.settings.config.PlanConfig;
|
||||||
import com.djrapitops.plan.utilities.html.HtmlUtils;
|
import com.djrapitops.plan.utilities.html.HtmlUtils;
|
||||||
import com.djrapitops.plugin.StaticHolder;
|
|
||||||
import com.djrapitops.plugin.api.Check;
|
import com.djrapitops.plugin.api.Check;
|
||||||
import com.djrapitops.plugin.api.utility.log.Log;
|
import com.djrapitops.plugin.logging.L;
|
||||||
|
import com.djrapitops.plugin.logging.console.PluginLogger;
|
||||||
|
import com.djrapitops.plugin.logging.error.ErrorHandler;
|
||||||
import com.djrapitops.plugin.utilities.Verify;
|
import com.djrapitops.plugin.utilities.Verify;
|
||||||
import com.sun.net.httpserver.HttpServer;
|
import com.sun.net.httpserver.HttpServer;
|
||||||
import com.sun.net.httpserver.HttpsConfigurator;
|
import com.sun.net.httpserver.HttpsConfigurator;
|
||||||
import com.sun.net.httpserver.HttpsParameters;
|
import com.sun.net.httpserver.HttpsParameters;
|
||||||
import com.sun.net.httpserver.HttpsServer;
|
import com.sun.net.httpserver.HttpsServer;
|
||||||
|
|
||||||
|
import javax.inject.Inject;
|
||||||
|
import javax.inject.Singleton;
|
||||||
import javax.net.ssl.*;
|
import javax.net.ssl.*;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.FileInputStream;
|
import java.io.FileInputStream;
|
||||||
@ -30,14 +33,21 @@ import java.security.cert.CertificateException;
|
|||||||
import java.util.concurrent.ArrayBlockingQueue;
|
import java.util.concurrent.ArrayBlockingQueue;
|
||||||
import java.util.concurrent.ThreadPoolExecutor;
|
import java.util.concurrent.ThreadPoolExecutor;
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
import java.util.function.Supplier;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Rsl1122
|
* @author Rsl1122
|
||||||
*/
|
*/
|
||||||
|
@Singleton
|
||||||
public class WebServer implements SubSystem {
|
public class WebServer implements SubSystem {
|
||||||
|
|
||||||
private final Supplier<Locale> locale;
|
private final Locale locale;
|
||||||
|
private final FileSystem fileSystem;
|
||||||
|
private final PlanConfig config;
|
||||||
|
|
||||||
|
private final RequestHandler requestHandler;
|
||||||
|
|
||||||
|
private final PluginLogger logger;
|
||||||
|
private final ErrorHandler errorHandler;
|
||||||
|
|
||||||
private int port;
|
private int port;
|
||||||
private boolean enabled = false;
|
private boolean enabled = false;
|
||||||
@ -45,13 +55,27 @@ public class WebServer implements SubSystem {
|
|||||||
|
|
||||||
private boolean usingHttps = false;
|
private boolean usingHttps = false;
|
||||||
|
|
||||||
private RequestHandler requestHandler;
|
@Inject
|
||||||
private ResponseHandler responseHandler;
|
public WebServer(
|
||||||
|
Locale locale,
|
||||||
public WebServer(Supplier<Locale> locale) {
|
FileSystem fileSystem,
|
||||||
|
PlanConfig config,
|
||||||
|
PluginLogger logger,
|
||||||
|
ErrorHandler errorHandler,
|
||||||
|
RequestHandler requestHandler
|
||||||
|
) {
|
||||||
this.locale = locale;
|
this.locale = locale;
|
||||||
|
this.fileSystem = fileSystem;
|
||||||
|
this.config = config;
|
||||||
|
|
||||||
|
this.requestHandler = requestHandler;
|
||||||
|
requestHandler.getResponseHandler().setWebServer(this);
|
||||||
|
|
||||||
|
this.logger = logger;
|
||||||
|
this.errorHandler = errorHandler;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Deprecated
|
||||||
public static WebServer getInstance() {
|
public static WebServer getInstance() {
|
||||||
WebServer webServer = WebServerSystem.getInstance().getWebServer();
|
WebServer webServer = WebServerSystem.getInstance().getWebServer();
|
||||||
Verify.nullCheck(webServer, () -> new IllegalStateException("WebServer was not initialized."));
|
Verify.nullCheck(webServer, () -> new IllegalStateException("WebServer was not initialized."));
|
||||||
@ -60,25 +84,18 @@ public class WebServer implements SubSystem {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void enable() throws EnableException {
|
public void enable() throws EnableException {
|
||||||
this.port = Settings.WEBSERVER_PORT.getNumber();
|
this.port = config.getNumber(Settings.WEBSERVER_PORT);
|
||||||
|
|
||||||
requestHandler = new RequestHandler(this);
|
|
||||||
responseHandler = requestHandler.getResponseHandler();
|
|
||||||
|
|
||||||
PlanPlugin plugin = PlanPlugin.getInstance();
|
|
||||||
StaticHolder.saveInstance(RequestHandler.class, plugin.getClass());
|
|
||||||
StaticHolder.saveInstance(ResponseHandler.class, plugin.getClass());
|
|
||||||
|
|
||||||
initServer();
|
initServer();
|
||||||
|
|
||||||
if (!isEnabled()) {
|
if (!isEnabled()) {
|
||||||
if (Check.isBungeeAvailable()) {
|
if (Check.isBungeeAvailable()) {
|
||||||
throw new EnableException(locale.get().getString(PluginLang.ENABLE_FAIL_NO_WEB_SERVER_BUNGEE));
|
throw new EnableException(locale.getString(PluginLang.ENABLE_FAIL_NO_WEB_SERVER_BUNGEE));
|
||||||
}
|
}
|
||||||
if (Settings.WEBSERVER_DISABLED.isTrue()) {
|
if (config.isTrue(Settings.WEBSERVER_DISABLED)) {
|
||||||
Log.warn(locale.get().getString(PluginLang.ENABLE_NOTIFY_WEB_SERVER_DISABLED));
|
logger.warn(locale.getString(PluginLang.ENABLE_NOTIFY_WEB_SERVER_DISABLED));
|
||||||
} else {
|
} else {
|
||||||
Log.error(locale.get().getString(PluginLang.WEB_SERVER_FAIL_PORT_BIND, port));
|
logger.error(locale.getString(PluginLang.WEB_SERVER_FAIL_PORT_BIND, port));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -87,24 +104,24 @@ public class WebServer implements SubSystem {
|
|||||||
* Starts up the WebServer in a new Thread Pool.
|
* Starts up the WebServer in a new Thread Pool.
|
||||||
*/
|
*/
|
||||||
private void initServer() {
|
private void initServer() {
|
||||||
// Check if Bukkit WebServer has been disabled.
|
if (!Check.isBungeeAvailable() && config.isTrue(Settings.WEBSERVER_DISABLED)) {
|
||||||
if (!Check.isBungeeAvailable() && Settings.WEBSERVER_DISABLED.isTrue()) {
|
// Bukkit WebServer has been disabled.
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Server is already enabled stop code
|
|
||||||
if (enabled) {
|
if (enabled) {
|
||||||
|
// Server is already enabled stop code
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
usingHttps = startHttpsServer();
|
usingHttps = startHttpsServer();
|
||||||
|
|
||||||
Log.debug(usingHttps ? "Https Start Successful." : "Https Start Failed.");
|
logger.debug(usingHttps ? "Https Start Successful." : "Https Start Failed.");
|
||||||
|
|
||||||
if (!usingHttps) {
|
if (!usingHttps) {
|
||||||
Log.infoColor("§e" + locale.get().getString(PluginLang.WEB_SERVER_NOTIFY_HTTP_USER_AUTH));
|
logger.log(L.INFO_COLOR, "§e" + locale.getString(PluginLang.WEB_SERVER_NOTIFY_HTTP_USER_AUTH));
|
||||||
server = HttpServer.create(new InetSocketAddress(Settings.WEBSERVER_IP.toString(), port), 10);
|
server = HttpServer.create(new InetSocketAddress(config.getString(Settings.WEBSERVER_IP), port), 10);
|
||||||
}
|
}
|
||||||
server.createContext("/", requestHandler);
|
server.createContext("/", requestHandler);
|
||||||
|
|
||||||
@ -113,22 +130,22 @@ public class WebServer implements SubSystem {
|
|||||||
|
|
||||||
enabled = true;
|
enabled = true;
|
||||||
|
|
||||||
Log.info(locale.get().getString(PluginLang.ENABLED_WEB_SERVER, server.getAddress().getPort(), getAccessAddress()));
|
logger.info(locale.getString(PluginLang.ENABLED_WEB_SERVER, server.getAddress().getPort(), getAccessAddress()));
|
||||||
} catch (IllegalArgumentException | IllegalStateException | IOException e) {
|
} catch (IllegalArgumentException | IllegalStateException | IOException e) {
|
||||||
Log.toLog(this.getClass(), e);
|
errorHandler.log(L.ERROR, this.getClass(), e);
|
||||||
enabled = false;
|
enabled = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean startHttpsServer() {
|
private boolean startHttpsServer() {
|
||||||
String keyStorePath = Settings.WEBSERVER_CERTIFICATE_PATH.toString();
|
String keyStorePath = config.getString(Settings.WEBSERVER_CERTIFICATE_PATH);
|
||||||
if (!Paths.get(keyStorePath).isAbsolute()) {
|
if (!Paths.get(keyStorePath).isAbsolute()) {
|
||||||
keyStorePath = FileSystem.getDataFolder_Old() + File.separator + keyStorePath;
|
keyStorePath = fileSystem.getDataFolder() + File.separator + keyStorePath;
|
||||||
}
|
}
|
||||||
|
|
||||||
char[] storepass = Settings.WEBSERVER_CERTIFICATE_STOREPASS.toString().toCharArray();
|
char[] storepass = config.getString(Settings.WEBSERVER_CERTIFICATE_STOREPASS).toCharArray();
|
||||||
char[] keypass = Settings.WEBSERVER_CERTIFICATE_KEYPASS.toString().toCharArray();
|
char[] keypass = config.getString(Settings.WEBSERVER_CERTIFICATE_KEYPASS).toCharArray();
|
||||||
String alias = Settings.WEBSERVER_CERTIFICATE_ALIAS.toString();
|
String alias = config.getString(Settings.WEBSERVER_CERTIFICATE_ALIAS);
|
||||||
|
|
||||||
boolean startSuccessful = false;
|
boolean startSuccessful = false;
|
||||||
try (FileInputStream fIn = new FileInputStream(keyStorePath)) {
|
try (FileInputStream fIn = new FileInputStream(keyStorePath)) {
|
||||||
@ -141,7 +158,7 @@ public class WebServer implements SubSystem {
|
|||||||
throw new IllegalStateException("Certificate with Alias: " + alias + " was not found in the Keystore.");
|
throw new IllegalStateException("Certificate with Alias: " + alias + " was not found in the Keystore.");
|
||||||
}
|
}
|
||||||
|
|
||||||
Log.info("Certificate: " + cert.getType());
|
logger.info("Certificate: " + cert.getType());
|
||||||
|
|
||||||
KeyManagerFactory keyManagerFactory = KeyManagerFactory.getInstance("SunX509");
|
KeyManagerFactory keyManagerFactory = KeyManagerFactory.getInstance("SunX509");
|
||||||
keyManagerFactory.init(keystore, keypass);
|
keyManagerFactory.init(keystore, keypass);
|
||||||
@ -149,7 +166,7 @@ public class WebServer implements SubSystem {
|
|||||||
TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance("SunX509");
|
TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance("SunX509");
|
||||||
trustManagerFactory.init(keystore);
|
trustManagerFactory.init(keystore);
|
||||||
|
|
||||||
server = HttpsServer.create(new InetSocketAddress(Settings.WEBSERVER_IP.toString(), port), 10);
|
server = HttpsServer.create(new InetSocketAddress(config.getString(Settings.WEBSERVER_IP), port), 10);
|
||||||
SSLContext sslContext = SSLContext.getInstance("TLSv1.2");
|
SSLContext sslContext = SSLContext.getInstance("TLSv1.2");
|
||||||
sslContext.init(keyManagerFactory.getKeyManagers(), null/*trustManagerFactory.getTrustManagers()*/, null);
|
sslContext.init(keyManagerFactory.getKeyManagers(), null/*trustManagerFactory.getTrustManagers()*/, null);
|
||||||
|
|
||||||
@ -168,20 +185,20 @@ public class WebServer implements SubSystem {
|
|||||||
});
|
});
|
||||||
startSuccessful = true;
|
startSuccessful = true;
|
||||||
} catch (IllegalStateException e) {
|
} catch (IllegalStateException e) {
|
||||||
Log.error(e.getMessage());
|
logger.error(e.getMessage());
|
||||||
Log.toLog(this.getClass(), e);
|
errorHandler.log(L.ERROR, this.getClass(), e);
|
||||||
} catch (KeyManagementException | NoSuchAlgorithmException e) {
|
} catch (KeyManagementException | NoSuchAlgorithmException e) {
|
||||||
Log.error(locale.get().getString(PluginLang.WEB_SERVER_FAIL_SSL_CONTEXT));
|
logger.error(locale.getString(PluginLang.WEB_SERVER_FAIL_SSL_CONTEXT));
|
||||||
Log.toLog(this.getClass(), e);
|
errorHandler.log(L.ERROR, this.getClass(), e);
|
||||||
} catch (FileNotFoundException e) {
|
} catch (FileNotFoundException e) {
|
||||||
Log.infoColor("§e" + locale.get().getString(PluginLang.WEB_SERVER_NOTIFY_NO_CERT_FILE, keyStorePath));
|
logger.log(L.INFO_COLOR, "§e" + locale.getString(PluginLang.WEB_SERVER_NOTIFY_NO_CERT_FILE, keyStorePath));
|
||||||
Log.info(locale.get().getString(PluginLang.WEB_SERVER_NOTIFY_HTTP));
|
logger.info(locale.getString(PluginLang.WEB_SERVER_NOTIFY_HTTP));
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
Log.error("WebServer: " + e);
|
logger.error("WebServer: " + e);
|
||||||
Log.toLog(this.getClass(), e);
|
errorHandler.log(L.ERROR, this.getClass(), e);
|
||||||
} catch (KeyStoreException | CertificateException | UnrecoverableKeyException e) {
|
} catch (KeyStoreException | CertificateException | UnrecoverableKeyException e) {
|
||||||
Log.error(locale.get().getString(PluginLang.WEB_SERVER_FAIL_STORE_LOAD));
|
logger.error(locale.getString(PluginLang.WEB_SERVER_FAIL_STORE_LOAD));
|
||||||
Log.toLog(this.getClass(), e);
|
errorHandler.log(L.ERROR, this.getClass(), e);
|
||||||
}
|
}
|
||||||
return startSuccessful;
|
return startSuccessful;
|
||||||
}
|
}
|
||||||
@ -199,7 +216,7 @@ public class WebServer implements SubSystem {
|
|||||||
@Override
|
@Override
|
||||||
public void disable() {
|
public void disable() {
|
||||||
if (server != null) {
|
if (server != null) {
|
||||||
Log.info(locale.get().getString(PluginLang.DISABLED_WEB_SERVER));
|
logger.info(locale.getString(PluginLang.DISABLED_WEB_SERVER));
|
||||||
server.stop(0);
|
server.stop(0);
|
||||||
}
|
}
|
||||||
enabled = false;
|
enabled = false;
|
||||||
@ -218,18 +235,6 @@ public class WebServer implements SubSystem {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public String getAccessAddress() {
|
public String getAccessAddress() {
|
||||||
return isEnabled() ? getProtocol() + "://" + HtmlUtils.getIP() : Settings.EXTERNAL_WEBSERVER_LINK.toString();
|
return isEnabled() ? getProtocol() + "://" + HtmlUtils.getIP() : config.getString(Settings.EXTERNAL_WEBSERVER_LINK);
|
||||||
}
|
|
||||||
|
|
||||||
public RequestHandler getRequestHandler() {
|
|
||||||
return requestHandler;
|
|
||||||
}
|
|
||||||
|
|
||||||
public ResponseHandler getResponseHandler() {
|
|
||||||
return responseHandler;
|
|
||||||
}
|
|
||||||
|
|
||||||
Supplier<Locale> getLocaleSupplier() {
|
|
||||||
return locale;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -7,11 +7,10 @@ package com.djrapitops.plan.system.webserver;
|
|||||||
import com.djrapitops.plan.api.exceptions.EnableException;
|
import com.djrapitops.plan.api.exceptions.EnableException;
|
||||||
import com.djrapitops.plan.system.PlanSystem;
|
import com.djrapitops.plan.system.PlanSystem;
|
||||||
import com.djrapitops.plan.system.SubSystem;
|
import com.djrapitops.plan.system.SubSystem;
|
||||||
import com.djrapitops.plan.system.locale.Locale;
|
|
||||||
import com.djrapitops.plan.system.webserver.cache.ResponseCache;
|
import com.djrapitops.plan.system.webserver.cache.ResponseCache;
|
||||||
import com.djrapitops.plugin.api.Benchmark;
|
import com.djrapitops.plugin.benchmarking.Timings;
|
||||||
|
|
||||||
import java.util.function.Supplier;
|
import javax.inject.Inject;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* WebServer subsystem for managing WebServer initialization.
|
* WebServer subsystem for managing WebServer initialization.
|
||||||
@ -20,16 +19,21 @@ import java.util.function.Supplier;
|
|||||||
*/
|
*/
|
||||||
public class WebServerSystem implements SubSystem {
|
public class WebServerSystem implements SubSystem {
|
||||||
|
|
||||||
private WebServer webServer;
|
private final WebServer webServer;
|
||||||
|
private Timings timings;
|
||||||
|
|
||||||
public WebServerSystem(Supplier<Locale> locale) {
|
@Inject
|
||||||
webServer = new WebServer(locale);
|
public WebServerSystem(WebServer webServer, Timings timings) {
|
||||||
|
this.webServer = webServer;
|
||||||
|
this.timings = timings;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Deprecated
|
||||||
public static WebServerSystem getInstance() {
|
public static WebServerSystem getInstance() {
|
||||||
return PlanSystem.getInstance().getWebServerSystem();
|
return PlanSystem.getInstance().getWebServerSystem();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Deprecated
|
||||||
public static boolean isWebServerEnabled() {
|
public static boolean isWebServerEnabled() {
|
||||||
WebServer webServer = getInstance().webServer;
|
WebServer webServer = getInstance().webServer;
|
||||||
return webServer != null && webServer.isEnabled();
|
return webServer != null && webServer.isEnabled();
|
||||||
@ -37,12 +41,9 @@ public class WebServerSystem implements SubSystem {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void enable() throws EnableException {
|
public void enable() throws EnableException {
|
||||||
Benchmark.start("WebServer Initialization");
|
timings.start("WebServer Initialization");
|
||||||
webServer.enable();
|
webServer.enable();
|
||||||
ResponseHandler responseHandler = webServer.getResponseHandler();
|
timings.end("WebServer Initialization");
|
||||||
responseHandler.registerWebAPIPages();
|
|
||||||
responseHandler.registerDefaultPages();
|
|
||||||
Benchmark.stop("Enable", "WebServer Initialization");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -7,12 +7,11 @@ package com.djrapitops.plan.system.webserver.pages;
|
|||||||
import com.djrapitops.plan.api.exceptions.connection.WebException;
|
import com.djrapitops.plan.api.exceptions.connection.WebException;
|
||||||
import com.djrapitops.plan.data.WebUser;
|
import com.djrapitops.plan.data.WebUser;
|
||||||
import com.djrapitops.plan.system.webserver.Request;
|
import com.djrapitops.plan.system.webserver.Request;
|
||||||
import com.djrapitops.plan.system.webserver.ResponseHandler;
|
|
||||||
import com.djrapitops.plan.system.webserver.auth.Authentication;
|
import com.djrapitops.plan.system.webserver.auth.Authentication;
|
||||||
import com.djrapitops.plan.system.webserver.response.DefaultResponses;
|
import com.djrapitops.plan.system.webserver.response.DefaultResponses;
|
||||||
|
import com.djrapitops.plan.system.webserver.response.RedirectResponse;
|
||||||
import com.djrapitops.plan.system.webserver.response.Response;
|
import com.djrapitops.plan.system.webserver.response.Response;
|
||||||
|
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
|
|
||||||
@ -25,12 +24,6 @@ import java.util.Optional;
|
|||||||
*/
|
*/
|
||||||
public class RootPageHandler extends PageHandler {
|
public class RootPageHandler extends PageHandler {
|
||||||
|
|
||||||
private final ResponseHandler responseHandler;
|
|
||||||
|
|
||||||
public RootPageHandler(ResponseHandler responseHandler) {
|
|
||||||
this.responseHandler = responseHandler;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Response getResponse(Request request, List<String> target) throws WebException {
|
public Response getResponse(Request request, List<String> target) throws WebException {
|
||||||
Optional<Authentication> auth = request.getAuth();
|
Optional<Authentication> auth = request.getAuth();
|
||||||
@ -43,13 +36,13 @@ public class RootPageHandler extends PageHandler {
|
|||||||
int permLevel = webUser.getPermLevel();
|
int permLevel = webUser.getPermLevel();
|
||||||
switch (permLevel) {
|
switch (permLevel) {
|
||||||
case 0:
|
case 0:
|
||||||
return responseHandler.getPageHandler("server").getResponse(request, Collections.emptyList());
|
return new RedirectResponse("/server");
|
||||||
case 1:
|
case 1:
|
||||||
return responseHandler.getPageHandler("players").getResponse(request, Collections.emptyList());
|
return new RedirectResponse("/players");
|
||||||
case 2:
|
case 2:
|
||||||
return responseHandler.getPageHandler("player").getResponse(request, Collections.singletonList(webUser.getName()));
|
return new RedirectResponse("/player/" + webUser.getName());
|
||||||
default:
|
default:
|
||||||
return responseHandler.forbiddenResponse();
|
return DefaultResponses.FORBIDDEN.get();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4,6 +4,8 @@
|
|||||||
*/
|
*/
|
||||||
package com.djrapitops.plan.system.webserver.response;
|
package com.djrapitops.plan.system.webserver.response;
|
||||||
|
|
||||||
|
import com.djrapitops.plan.system.webserver.response.errors.ForbiddenResponse;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Enum containing default responses that don't need to be cached because they're always the same.
|
* Enum containing default responses that don't need to be cached because they're always the same.
|
||||||
*
|
*
|
||||||
@ -11,7 +13,9 @@ package com.djrapitops.plan.system.webserver.response;
|
|||||||
*/
|
*/
|
||||||
public enum DefaultResponses {
|
public enum DefaultResponses {
|
||||||
BASIC_AUTH(PromptAuthorizationResponse.getBasicAuthResponse()),
|
BASIC_AUTH(PromptAuthorizationResponse.getBasicAuthResponse()),
|
||||||
SUCCESS(new TextResponse("Success"));
|
SUCCESS(new TextResponse("Success")),
|
||||||
|
FORBIDDEN(new ForbiddenResponse("Your user is not authorized to view this page.<br>"
|
||||||
|
+ "If you believe this is an error contact staff to change your access level."));
|
||||||
|
|
||||||
private final Response response;
|
private final Response response;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user