Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions bukkit/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ dependencies {
compileOnly("org.spigotmc:spigot-api:1.17.1-R0.1-SNAPSHOT") {
exclude("junit", "junit")
}
compileOnly("org.apache.logging.log4j:log4j-core:2.17.0")
"shadeOnly"("org.bstats:bstats-bukkit:2.2.1")
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,6 @@ public void onEnable() {

setupListeners();
setupCommands();
setupRunnables();
}

@Override
Expand Down Expand Up @@ -110,12 +109,6 @@ public void setupCommands() {
}
}

public void setupRunnables() {
// Runner syncRunner = new Runner(new ExpiresSync(plugin));

// getServer().getScheduler().runTaskTimerAsynchronously(this, syncRunner, 10L, 10L);
}

public void setupListeners() {
appender = new LogServerAppender(plugin);
((org.apache.logging.log4j.core.Logger) LogManager.getRootLogger()).addAppender(appender);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,10 @@
import org.bukkit.event.Listener;

import java.sql.SQLException;
import java.util.Iterator;
import java.util.ArrayList;
import java.util.List;
import java.util.Queue;
import me.confuser.banmanager.common.BanManagerPlugin;

public class ReportListener implements Listener {
private final BukkitPlugin plugin;
Expand All @@ -29,24 +31,29 @@ public ReportListener(BukkitPlugin plugin) {

@EventHandler(ignoreCancelled = true, priority = EventPriority.MONITOR)
public void notifyOnReport(PlayerReportedEvent event) {
PlayerReportData report = event.getReport();
List<LogData> logs;
Queue<LogData> queue = plugin.getAppender().getQueue();

synchronized (queue) {
Iterator<LogData> iterator = queue.iterator();
logs = new ArrayList<>(queue);
}

final int reportId = event.getReport().getId();

// Create many-to-many relationship
while (iterator.hasNext()) {
LogData log = iterator.next();
BanManagerPlugin.getInstance().getScheduler().runAsync(() -> {
try {
PlayerReportData report = BanManagerPlugin.getInstance()
.getPlayerReportStorage().queryForId(reportId);

try {
if (report == null) return;

for (LogData log : logs) {
plugin.getPlugin().getLogStorage().createIfNotExists(log);
plugin.getPlugin().getReportLogStorage().create(new ReportLogData(report, log));
} catch (SQLException e) {
e.printStackTrace();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
});
}

@EventHandler
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,6 @@ public void onEnable() {

setupListeners();
setupCommands();
setupRunnables();
}

@Override
Expand Down Expand Up @@ -103,12 +102,6 @@ private void setupCommands() {
getLogger().info("Registered commands");
}

public void setupRunnables() {
// Runner syncRunner = new Runner(new ExpiresSync(plugin));

// getServer().getScheduler().runTaskTimerAsynchronously(this, syncRunner, 10L, 10L);
}

public void setupListeners() {
registerEvent(new BanListener(this));
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,11 @@
import me.confuser.banmanager.webenhancer.common.storage.LogStorage;
import me.confuser.banmanager.webenhancer.common.storage.PlayerPinStorage;
import me.confuser.banmanager.webenhancer.common.storage.ReportLogStorage;
import me.confuser.banmanager.webenhancer.common.runnables.ExpiresSync;

import java.io.File;
import java.sql.SQLException;
import java.time.Duration;

public class WebEnhancerPlugin {
private static WebEnhancerPlugin self;
Expand Down Expand Up @@ -58,6 +60,9 @@ public final void enable() throws Exception {
e.printStackTrace();
throw new Exception("An error occurred attempting to make a database connection, please see stack trace below");
}

// Schedule pin cleanup every 60 seconds
scheduler.runAsyncRepeating(new ExpiresSync(this), Duration.ofSeconds(60), Duration.ofSeconds(60));
}

public void setupConfigs() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,10 @@
import lombok.Getter;
import lombok.Setter;

import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

@DatabaseTable
public class LogData {

Expand All @@ -22,11 +26,31 @@ public class LogData {
@Getter
private long created = System.currentTimeMillis() / 1000L;

@DatabaseField(columnDefinition = "CHAR(64)")
@Getter
@Setter
private String messageHash;

LogData() {
}

public LogData(String message, long created) {
this.message = message;
this.created = created;
this.messageHash = computeHash(message);
}

public static String computeHash(String message) {
try {
MessageDigest digest = MessageDigest.getInstance("SHA-256");
byte[] hash = digest.digest(message.getBytes(StandardCharsets.UTF_8));
StringBuilder hex = new StringBuilder();
for (byte b : hash) {
hex.append(String.format("%02x", b));
}
return hex.toString();
} catch (NoSuchAlgorithmException e) {
throw new RuntimeException(e);
}
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package me.confuser.banmanager.webenhancer.common.runnables;

import me.confuser.banmanager.common.ormlite.dao.CloseableIterator;
import me.confuser.banmanager.common.ormlite.stmt.DeleteBuilder;
import me.confuser.banmanager.common.BanManagerPlugin;
import me.confuser.banmanager.common.runnables.BmRunnable;
import me.confuser.banmanager.common.util.DateUtils;
Expand All @@ -23,19 +23,12 @@ public ExpiresSync(WebEnhancerPlugin plugin) {
public void run() {
long now = (System.currentTimeMillis() / 1000L) + DateUtils.getTimeDiff();

CloseableIterator<PlayerPinData> pins = null;
try {
pins = pinStorage.queryBuilder().where().le("expires", now).iterator();

while (pins.hasNext()) {
PlayerPinData pin = pins.next();

pinStorage.delete(pin);
}
DeleteBuilder<PlayerPinData, Integer> deleteBuilder = pinStorage.deleteBuilder();
deleteBuilder.where().le("expires", now);
deleteBuilder.delete();
} catch (SQLException e) {
e.printStackTrace();
} finally {
if (pins != null) pins.closeQuietly();
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -24,13 +24,50 @@ public LogStorage(ConnectionSource connection) throws SQLException {
executeRawNoArgs("ALTER TABLE " + tableConfig.getTableName() + " CHANGE `created` `created` BIGINT UNSIGNED");
} catch (SQLException e) {
}

boolean columnAdded = false;
try {
executeRawNoArgs("ALTER TABLE " + tableConfig.getTableName() +
" ADD COLUMN messageHash CHAR(64)");
columnAdded = true;
} catch (SQLException e) {
}

try {
executeRawNoArgs("CREATE INDEX idx_" + tableConfig.getTableName() +
"_created_hash ON " + tableConfig.getTableName() + " (created, messageHash)");
} catch (SQLException e) {
}

if (columnAdded) {
try {
executeRawNoArgs(
"UPDATE " + tableConfig.getTableName() +
" SET messageHash = SHA2(message, 256)" +
" WHERE messageHash IS NULL"
);
BanManagerPlugin.getInstance().getLogger().info("[WebEnhancer] Log hash migration completed");
} catch (SQLException e) {
BanManagerPlugin.getInstance().getLogger().info("[WebEnhancer] SQL hash migration skipped (SHA2 not available) - new logs will be indexed");
}
}
}
}

public LogData createIfNotExists(LogData data) throws SQLException {
QueryBuilder<LogData, Integer> query = queryBuilder();
//TODO Will require full table scan because of message, add index
query.where().eq("message", data.getMessage()).and().eq("created", data.getCreated());

if (data.getMessageHash() != null) {
query.where()
.eq("created", data.getCreated())
.and()
.eq("messageHash", data.getMessageHash());
} else {
query.where()
.eq("message", data.getMessage())
.and()
.eq("created", data.getCreated());
}

List<LogData> results = query.query();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,9 @@
import org.apache.logging.log4j.LogManager;

import lombok.Getter;
import me.confuser.banmanager.common.BanManagerPlugin;
import me.confuser.banmanager.common.commands.CommonCommand;
import me.confuser.banmanager.common.configs.PluginInfo;
import me.confuser.banmanager.fabric.FabricScheduler;
import me.confuser.banmanager.common.configuration.ConfigurationSection;
import me.confuser.banmanager.common.configuration.file.YamlConfiguration;
import me.confuser.banmanager.fabric.FabricCommand;
Expand All @@ -37,6 +37,7 @@ public class FabricPlugin implements DedicatedServerModInitializer {
private PluginInfo pluginInfo;
@Getter
private LogServerAppender appender;
private FabricScheduler scheduler;

@Override
public void onInitializeServer() {
Expand All @@ -47,11 +48,13 @@ public void onInitializeServer() {
return;
}

scheduler = new FabricScheduler();

plugin = new WebEnhancerPlugin(
pluginInfo,
new PluginLogger(LogManager.getLogger("BanManager-WebEnhancer")),
getDataFolder(),
BanManagerPlugin.getInstance().getScheduler(),
scheduler,
new FabricMetrics()
);

Expand All @@ -69,6 +72,10 @@ public void onInitializeServer() {
}

private void onServerStopping(MinecraftServer server) {
if (scheduler != null) {
scheduler.shutdown();
}

if (appender != null) {
((org.apache.logging.log4j.core.Logger) LogManager.getRootLogger()).removeAppender(appender);
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
package me.confuser.banmanager.webenhancer.fabric.listeners;

import java.sql.SQLException;
import java.util.Iterator;
import java.util.ArrayList;
import java.util.List;
import java.util.Queue;
import me.confuser.banmanager.common.BanManagerPlugin;

import me.confuser.banmanager.common.data.PlayerReportData;
import me.confuser.banmanager.common.ormlite.stmt.DeleteBuilder;
Expand All @@ -24,23 +26,29 @@ public ReportListener(FabricPlugin fabricPlugin) {
}

private void notifyOnReport(PlayerReportData report, boolean silent) {
List<LogData> logs;
Queue<LogData> queue = fabricPlugin.getAppender().getQueue();

synchronized (queue) {
Iterator<LogData> iterator = queue.iterator();
logs = new ArrayList<>(queue);
}

final int reportId = report.getId();

// Create many-to-many relationship
while (iterator.hasNext()) {
LogData log = iterator.next();
BanManagerPlugin.getInstance().getScheduler().runAsync(() -> {
try {
PlayerReportData reportReloaded = BanManagerPlugin.getInstance()
.getPlayerReportStorage().queryForId(reportId);

try {
if (reportReloaded == null) return;

for (LogData log : logs) {
fabricPlugin.getPlugin().getLogStorage().createIfNotExists(log);
fabricPlugin.getPlugin().getReportLogStorage().create(new ReportLogData(report, log));
} catch (SQLException e) {
e.printStackTrace();
fabricPlugin.getPlugin().getReportLogStorage().create(new ReportLogData(reportReloaded, log));
}
} catch (SQLException e) {
e.printStackTrace();
}
}
});
}

private void reportDeleted(PlayerReportData report) {
Expand Down
4 changes: 0 additions & 4 deletions libs/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,6 @@ dependencies {
"shade"("org.bouncycastle:bcprov-jdk15on:1.70")
"shade"("org.bouncycastle:bcpkix-jdk15on:1.70")
"shade"("com.google.guava:guava:17.0")
"shade"("org.apache.logging.log4j:log4j-core:2.17.0")
"shade"("org.apache.logging.log4j:log4j-api:2.17.0")
}

tasks.withType<Jar>() {
Expand All @@ -27,8 +25,6 @@ tasks.named<ShadowJar>("jar") {
include(dependency("com.google.guava:guava"))
}

include(dependency("org.apache.logging.log4j:log4j-core"))
include(dependency("org.apache.logging.log4j:log4j-api"))
include(dependency("org.bouncycastle:bcpkix-jdk15on"))
}

Expand Down
1 change: 1 addition & 0 deletions sponge-api7/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,7 @@ configurations {
dependencies {
compileOnly("org.spongepowered:spongeapi:7.2.0")
compileOnly("me.confuser.banmanager:BanManagerSponge7:7.10.0-SNAPSHOT")
compileOnly("org.apache.logging.log4j:log4j-core:2.17.0")

api(project(":BanManagerWebEnhancerCommon")) {
isTransitive = true
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -101,7 +101,6 @@ public void onEnable(GameInitializationEvent event) {

setupListeners();
setupCommands();
setupRunnables();
}

public CommonLogger getLogger() {
Expand Down Expand Up @@ -146,9 +145,6 @@ public void setupCommands() {
}
}

public void setupRunnables() {
}

public void setupListeners() {
appender = new LogServerAppender(plugin);
((org.apache.logging.log4j.core.Logger) LogManager.getRootLogger()).addAppender(appender);
Expand Down
Loading