diff --git a/Plugin/src/main/java/xyz/kyngs/librelogin/common/log/Log4JFilter.java b/Plugin/src/main/java/xyz/kyngs/librelogin/common/log/Log4JFilter.java index e8344444..79d0ea8e 100644 --- a/Plugin/src/main/java/xyz/kyngs/librelogin/common/log/Log4JFilter.java +++ b/Plugin/src/main/java/xyz/kyngs/librelogin/common/log/Log4JFilter.java @@ -14,6 +14,15 @@ import org.apache.logging.log4j.core.Logger; import org.apache.logging.log4j.message.Message; +/** + * A Log4J implementation of the {@link LogFilter} that filters out sensitive authentication commands. + *
+ * This class extends {@link LogFilter} and implements Log4J's {@link Filter} interface to provide filtering capabilities for Log4J logging system. + *
+ * The filter is designed to prevent logging of sensitive information such as passwords and authentication tokens that might appear in certain commands. It integrates with Log4J's filtering chain and can be easily added to the root logger. + *
+ * This implementation handles various Log4J filter method overloads to ensure comprehensive coverage of all possible logging scenarios, including parameterized messages and raw objects. + */ public class Log4JFilter extends LogFilter implements Filter { @Override @@ -21,8 +30,16 @@ public void inject() { ((Logger) LogManager.getRootLogger()).addFilter(new Log4JFilter()); } - private Result checkMessageResult(String message) { - return checkMessage(message) ? Result.NEUTRAL : Result.DENY; + /** + * Converts the result of message checking into a Log4J {@link Result}. + * + * @param message The message pattern to be checked + * @param parameters The parameters associated with the message. + * @return {@link Result#NEUTRAL} if the message should be logged, {@link Result#DENY} if it should be filtered out + * @see LogFilter#checkMessage + */ + private Result checkMessageResult(String message, Object[] parameters) { + return checkMessage(message, parameters) ? Result.NEUTRAL : Result.DENY; } @Override @@ -37,72 +54,73 @@ public Result getOnMismatch() { @Override public Result filter(Logger logger, Level level, Marker marker, String message, Object... params) { - return checkMessageResult(message); + return checkMessageResult(message, params); } @Override public Result filter(Logger logger, Level level, Marker marker, String message, Object p0) { - return checkMessageResult(message); + return checkMessageResult(message, new Object[]{p0}); } @Override public Result filter(Logger logger, Level level, Marker marker, String message, Object p0, Object p1) { - return checkMessageResult(message); + return checkMessageResult(message, new Object[]{p0, p1}); } @Override public Result filter(Logger logger, Level level, Marker marker, String message, Object p0, Object p1, Object p2) { - return checkMessageResult(message); + return checkMessageResult(message, new Object[]{p0, p1, p2}); } @Override public Result filter(Logger logger, Level level, Marker marker, String message, Object p0, Object p1, Object p2, Object p3) { - return checkMessageResult(message); + return checkMessageResult(message, new Object[]{p0, p1, p2, p3}); } @Override public Result filter(Logger logger, Level level, Marker marker, String message, Object p0, Object p1, Object p2, Object p3, Object p4) { - return checkMessageResult(message); + return checkMessageResult(message, new Object[]{p0, p1, p2, p3, p4}); } @Override public Result filter(Logger logger, Level level, Marker marker, String message, Object p0, Object p1, Object p2, Object p3, Object p4, Object p5) { - return checkMessageResult(message); + return checkMessageResult(message, new Object[]{p0, p1, p2, p3, p4, p5}); } @Override public Result filter(Logger logger, Level level, Marker marker, String message, Object p0, Object p1, Object p2, Object p3, Object p4, Object p5, Object p6) { - return checkMessageResult(message); + return checkMessageResult(message, new Object[]{p0, p1, p2, p3, p4, p5, p6}); } @Override public Result filter(Logger logger, Level level, Marker marker, String message, Object p0, Object p1, Object p2, Object p3, Object p4, Object p5, Object p6, Object p7) { - return checkMessageResult(message); + return checkMessageResult(message, new Object[]{p0, p1, p2, p3, p4, p5, p6, p7}); } @Override public Result filter(Logger logger, Level level, Marker marker, String message, Object p0, Object p1, Object p2, Object p3, Object p4, Object p5, Object p6, Object p7, Object p8) { - return checkMessageResult(message); + return checkMessageResult(message, new Object[]{p0, p1, p2, p3, p4, p5, p6, p7, p8}); } @Override public Result filter(Logger logger, Level level, Marker marker, String message, Object p0, Object p1, Object p2, Object p3, Object p4, Object p5, Object p6, Object p7, Object p8, Object p9) { - return checkMessageResult(message); + return checkMessageResult(message, new Object[]{p0, p1, p2, p3, p4, p5, p6, p7, p8, p9}); } @Override public Result filter(Logger logger, Level level, Marker marker, Object msg, Throwable t) { - return checkMessageResult(msg.toString()); + return checkMessageResult(msg.toString(), null); } @Override public Result filter(Logger logger, Level level, Marker marker, Message msg, Throwable t) { - return checkMessageResult(msg.getFormattedMessage()); + return checkMessageResult(msg.getFormat(), msg.getParameters()); } @Override public Result filter(LogEvent event) { - return checkMessageResult(event.getMessage().getFormattedMessage()); + var message = event.getMessage(); + return checkMessageResult(message.getFormat(), message.getParameters()); } @Override @@ -126,4 +144,4 @@ public void start() { public void stop() { } -} \ No newline at end of file +} diff --git a/Plugin/src/main/java/xyz/kyngs/librelogin/common/log/LogFilter.java b/Plugin/src/main/java/xyz/kyngs/librelogin/common/log/LogFilter.java index 91016012..6397f5be 100644 --- a/Plugin/src/main/java/xyz/kyngs/librelogin/common/log/LogFilter.java +++ b/Plugin/src/main/java/xyz/kyngs/librelogin/common/log/LogFilter.java @@ -6,47 +6,67 @@ package xyz.kyngs.librelogin.common.log; -import java.util.HashSet; import java.util.Set; +/** + * A filter that prevents sensitive authentication commands from being logged. + *
+ * This abstract class provides functionality to filter out commands that might contain sensitive information such as passwords or authentication tokens.
+ */
public abstract class LogFilter {
- private static final Set
+ * These commands typically contain sensitive information like passwords.
+ */
+ private static final Set
+ * This class extends {@link LogFilter} and implements {@link Filter} interface to provide filtering capabilities for the standard Java logging framework.
+ *
+ * This implementation preserves any existing filter that was already set on the logger by chaining it with this filter's functionality.
+ * This is preserved to maintain the existing filtering chain.
+ */
private final Filter filter;
+ /**
+ * The logger instance that this filter is attached to.
+ *
+ * Used for filter injection and management.
+ */
private final Logger logger;
public SimpleLogFilter(Logger logger) {
@@ -24,7 +41,7 @@ public SimpleLogFilter(Logger logger) {
public boolean isLoggable(LogRecord record) {
if (filter != null && !filter.isLoggable(record)) return false;
- return checkMessage(record.getMessage());
+ return checkMessage(record.getMessage(), record.getParameters());
}
@Override