From f27aece88b64e47e6ad147f5fd517d0440849c32 Mon Sep 17 00:00:00 2001 From: Rsl1122 Date: Sat, 21 Sep 2019 12:17:04 +0300 Subject: [PATCH] Disabled Bukkit/Sponge webserver if Proxy in db --- .../java/com/djrapitops/plan/PlanSystem.java | 13 +++ .../NonProxyWebserverDisableChecker.java | 83 +++++++++++++++++++ .../plan/settings/BukkitConfigSystem.java | 2 +- .../config/changes/ConfigUpdater.java | 3 +- .../settings/config/paths/PluginSettings.java | 2 +- .../resources/assets/plan/bungeeconfig.yml | 2 +- .../src/main/resources/assets/plan/config.yml | 4 +- .../plan/settings/ConfigSettingKeyTest.java | 2 +- 8 files changed, 104 insertions(+), 7 deletions(-) create mode 100644 Plan/common/src/main/java/com/djrapitops/plan/delivery/webserver/NonProxyWebserverDisableChecker.java diff --git a/Plan/common/src/main/java/com/djrapitops/plan/PlanSystem.java b/Plan/common/src/main/java/com/djrapitops/plan/PlanSystem.java index 08623447c..f170b83d3 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/PlanSystem.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/PlanSystem.java @@ -20,6 +20,7 @@ import com.djrapitops.plan.api.PlanAPI; import com.djrapitops.plan.capability.CapabilityServiceImplementation; import com.djrapitops.plan.delivery.DeliveryUtilities; import com.djrapitops.plan.delivery.export.ExportSystem; +import com.djrapitops.plan.delivery.webserver.NonProxyWebserverDisableChecker; import com.djrapitops.plan.delivery.webserver.WebServer; import com.djrapitops.plan.delivery.webserver.WebServerSystem; import com.djrapitops.plan.exceptions.EnableException; @@ -40,6 +41,7 @@ import com.djrapitops.plan.storage.database.queries.objects.ServerQueries; import com.djrapitops.plan.storage.file.PlanFiles; import com.djrapitops.plan.version.VersionCheckSystem; import com.djrapitops.plugin.logging.L; +import com.djrapitops.plugin.logging.console.PluginLogger; import com.djrapitops.plugin.logging.error.ErrorHandler; import javax.inject.Inject; @@ -76,6 +78,7 @@ public class PlanSystem implements SubSystem { private final ExtensionServiceImplementation extensionService; private final QueryServiceImplementation queryService; private final SettingsServiceImplementation settingsService; + private final PluginLogger logger; private final ErrorHandler errorHandler; @Inject @@ -97,6 +100,7 @@ public class PlanSystem implements SubSystem { ExtensionServiceImplementation extensionService, QueryServiceImplementation queryService, SettingsServiceImplementation settingsService, + PluginLogger logger, ErrorHandler errorHandler, PlanAPI.PlanAPIHolder apiHolder ) { @@ -117,6 +121,7 @@ public class PlanSystem implements SubSystem { this.extensionService = extensionService; this.queryService = queryService; this.settingsService = settingsService; + this.logger = logger; this.errorHandler = errorHandler; } @@ -149,6 +154,14 @@ public class PlanSystem implements SubSystem { listenerSystem, taskSystem ); + + // Disables Webserver if Proxy is detected in the database + if (serverInfo.getServer().isNotProxy()) { + processing.submitNonCritical(new NonProxyWebserverDisableChecker( + configSystem.getConfig(), databaseSystem, webServerSystem, logger, errorHandler + )); + } + settingsService.register(); queryService.register(); extensionService.register(); diff --git a/Plan/common/src/main/java/com/djrapitops/plan/delivery/webserver/NonProxyWebserverDisableChecker.java b/Plan/common/src/main/java/com/djrapitops/plan/delivery/webserver/NonProxyWebserverDisableChecker.java new file mode 100644 index 000000000..4b2443766 --- /dev/null +++ b/Plan/common/src/main/java/com/djrapitops/plan/delivery/webserver/NonProxyWebserverDisableChecker.java @@ -0,0 +1,83 @@ +/* + * This file is part of Player Analytics (Plan). + * + * Plan is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License v3 as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Plan is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Plan. If not, see . + */ +package com.djrapitops.plan.delivery.webserver; + +import com.djrapitops.plan.settings.config.PlanConfig; +import com.djrapitops.plan.settings.config.paths.PluginSettings; +import com.djrapitops.plan.settings.config.paths.WebserverSettings; +import com.djrapitops.plan.storage.database.DBSystem; +import com.djrapitops.plan.storage.database.queries.objects.ServerQueries; +import com.djrapitops.plugin.logging.L; +import com.djrapitops.plugin.logging.console.PluginLogger; +import com.djrapitops.plugin.logging.error.ErrorHandler; + +import java.io.IOException; + +/** + * In charge of disabling Webserver if a Proxy server is detected in the database. + * + * @author Rsl1122 + */ +public class NonProxyWebserverDisableChecker implements Runnable { + + private final PlanConfig config; + private final DBSystem dbSystem; + private final WebServerSystem webServerSystem; + private final PluginLogger logger; + private final ErrorHandler errorHandler; + + public NonProxyWebserverDisableChecker( + PlanConfig config, + DBSystem dbSystem, + WebServerSystem webServerSystem, + PluginLogger logger, + ErrorHandler errorHandler + ) { + this.config = config; + this.dbSystem = dbSystem; + this.webServerSystem = webServerSystem; + this.logger = logger; + this.errorHandler = errorHandler; + } + + @Override + public void run() { + if (config.isFalse(PluginSettings.PROXY_COPY_CONFIG)) return; + + dbSystem.getDatabase().query(ServerQueries.fetchProxyServerInformation()).ifPresent(proxy -> { + logger.info("Proxy server detected in the database - Proxy Webserver address is '" + proxy.getWebAddress() + "'."); + WebServer webServer = webServerSystem.getWebServer(); + + if (webServer.isEnabled()) { + disableWebserver(webServer); + } + }); + } + + private void disableWebserver(WebServer webServer) { + logger.warn("Disabling Webserver on this server - You can override this behavior by setting '" + PluginSettings.PROXY_COPY_CONFIG.getPath() + "' to false."); + webServer.disable(); + try { + config.set(WebserverSettings.DISABLED, true); + config.save(); + logger.warn("Note: Set '" + WebserverSettings.DISABLED.getPath() + "' to true"); + + } catch (IOException e) { + errorHandler.log(L.WARN, this.getClass(), e); + } + } +} \ No newline at end of file diff --git a/Plan/common/src/main/java/com/djrapitops/plan/settings/BukkitConfigSystem.java b/Plan/common/src/main/java/com/djrapitops/plan/settings/BukkitConfigSystem.java index 56d10599a..ef4b8af42 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/settings/BukkitConfigSystem.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/settings/BukkitConfigSystem.java @@ -62,7 +62,7 @@ public class BukkitConfigSystem extends ConfigSystem { @Override public void enable() throws EnableException { super.enable(); - if (config.isTrue(PluginSettings.BUNGEE_COPY_CONFIG)) { + if (config.isTrue(PluginSettings.PROXY_COPY_CONFIG)) { serverSettingsManager.enable(); } } diff --git a/Plan/common/src/main/java/com/djrapitops/plan/settings/config/changes/ConfigUpdater.java b/Plan/common/src/main/java/com/djrapitops/plan/settings/config/changes/ConfigUpdater.java index a8ad7a876..0720aa702 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/settings/config/changes/ConfigUpdater.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/settings/config/changes/ConfigUpdater.java @@ -136,7 +136,8 @@ public class ConfigUpdater { new ConfigChange.Removed("Display_options.Show_player_IPs"), new ConfigChange.Removed("Export.Parts.JavaScript_and_CSS"), new ConfigChange.Moved("Plugins.LiteBans", "Plugins.Litebans"), - new ConfigChange.Moved("Plugins.BuyCraft", "Plugins.Buycraft") + new ConfigChange.Moved("Plugins.BuyCraft", "Plugins.Buycraft"), + new ConfigChange.Moved("Plugin.Configuration.Allow_bungeecord_to_manage_settings", "Plugin.Configuration.Allow_proxy_to_manage_settings") }; } diff --git a/Plan/common/src/main/java/com/djrapitops/plan/settings/config/paths/PluginSettings.java b/Plan/common/src/main/java/com/djrapitops/plan/settings/config/paths/PluginSettings.java index 2dd03ac03..bb3a1b2a6 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/settings/config/paths/PluginSettings.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/settings/config/paths/PluginSettings.java @@ -36,7 +36,7 @@ public class PluginSettings { public static final Setting KEEP_LOGS_DAYS = new IntegerSetting("Plugin.Logging.Delete_logs_after_days", Setting::timeValidator); public static final Setting CHECK_FOR_UPDATES = new BooleanSetting("Plugin.Update_notifications.Check_for_updates"); public static final Setting NOTIFY_ABOUT_DEV_RELEASES = new BooleanSetting("Plugin.Update_notifications.Notify_about_DEV_releases"); - public static final Setting BUNGEE_COPY_CONFIG = new BooleanSetting("Plugin.Configuration.Allow_bungeecord_to_manage_settings"); + public static final Setting PROXY_COPY_CONFIG = new BooleanSetting("Plugin.Configuration.Allow_proxy_to_manage_settings"); private PluginSettings() { /* static variable class */ diff --git a/Plan/common/src/main/resources/assets/plan/bungeeconfig.yml b/Plan/common/src/main/resources/assets/plan/bungeeconfig.yml index 6abd6677b..baa28fbe0 100644 --- a/Plan/common/src/main/resources/assets/plan/bungeeconfig.yml +++ b/Plan/common/src/main/resources/assets/plan/bungeeconfig.yml @@ -179,6 +179,6 @@ Export: # If a plugin is causing issues the integration can be disabled by setting Plugin_name.Enabled: false # ----------------------------------------------------- Plugins: - BuyCraft: + Buycraft: # http://help.buycraft.net/article/36-where-to-find-the-secret-key Secret: "-" \ No newline at end of file diff --git a/Plan/common/src/main/resources/assets/plan/config.yml b/Plan/common/src/main/resources/assets/plan/config.yml index 01faa024e..d768a7400 100644 --- a/Plan/common/src/main/resources/assets/plan/config.yml +++ b/Plan/common/src/main/resources/assets/plan/config.yml @@ -20,7 +20,7 @@ Plugin: Check_for_updates: true Notify_about_DEV_releases: false Configuration: - Allow_bungeecord_to_manage_settings: true + Allow_proxy_to_manage_settings: true # ----------------------------------------------------- # Supported databases: SQLite, H2, MySQL # ----------------------------------------------------- @@ -185,7 +185,7 @@ Export: # If a plugin is causing issues the integration can be disabled by setting Plugin_name.Enabled: false # ----------------------------------------------------- Plugins: - BuyCraft: + Buycraft: # http://help.buycraft.net/article/36-where-to-find-the-secret-key Secret: '-' Factions: diff --git a/Plan/common/src/test/java/com/djrapitops/plan/settings/ConfigSettingKeyTest.java b/Plan/common/src/test/java/com/djrapitops/plan/settings/ConfigSettingKeyTest.java index 9b2f9b372..ad44059a2 100644 --- a/Plan/common/src/test/java/com/djrapitops/plan/settings/ConfigSettingKeyTest.java +++ b/Plan/common/src/test/java/com/djrapitops/plan/settings/ConfigSettingKeyTest.java @@ -112,7 +112,7 @@ public class ConfigSettingKeyTest { // Server settings contained in the key classes, remove settings.remove(PluginSettings.SERVER_NAME); - settings.remove(PluginSettings.BUNGEE_COPY_CONFIG); + settings.remove(PluginSettings.PROXY_COPY_CONFIG); settings.remove(DatabaseSettings.TYPE); settings.remove(DisplaySettings.WORLD_ALIASES); return settings;