From af7033d1e49e09a07a035eca2c3c009a395f3ade Mon Sep 17 00:00:00 2001 From: mykola2312 <49044616+mykola2312@users.noreply.github.com> Date: Thu, 25 Apr 2024 02:01:43 +0300 Subject: [PATCH] CRITICAL: switch from log4j to logback because turns out CVE is not patched --- pom.xml | 14 ++- src/main/java/com/mykola2312/mptv/Main.java | 15 +-- .../com/mykola2312/mptv/crawler/Crawler.java | 9 +- .../mykola2312/mptv/crawler/WebContent.java | 7 +- .../mykola2312/mptv/crawler/WebException.java | 5 +- .../java/com/mykola2312/mptv/db/DBPool.java | 5 +- .../mykola2312/mptv/task/TaskDispatcher.java | 7 +- .../java/com/mykola2312/mptv/ui/LogPanel.java | 118 +++++++++--------- .../com/mykola2312/mptv/ui/MenuPanel.java | 6 +- src/main/resources/logback.xml | 18 +++ 10 files changed, 119 insertions(+), 85 deletions(-) create mode 100644 src/main/resources/logback.xml diff --git a/pom.xml b/pom.xml index b56131e..19cb58b 100644 --- a/pom.xml +++ b/pom.xml @@ -68,9 +68,9 @@ - log4j - log4j - 1.2.17 + ch.qos.logback + logback-classic + 1.5.6 org.slf4j @@ -106,6 +106,14 @@ httpcore 4.4.16 + + + + com.kohlschutter.junixsocket + junixsocket-core + 2.9.1 + pom + diff --git a/src/main/java/com/mykola2312/mptv/Main.java b/src/main/java/com/mykola2312/mptv/Main.java index 56cf352..6dccdd4 100644 --- a/src/main/java/com/mykola2312/mptv/Main.java +++ b/src/main/java/com/mykola2312/mptv/Main.java @@ -6,13 +6,14 @@ import com.mykola2312.mptv.db.DB; import com.mykola2312.mptv.task.TaskDispatcher; import com.mykola2312.mptv.ui.MainFrame; import org.apache.commons.cli.*; -import org.apache.log4j.Logger; import org.flywaydb.core.Flyway; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import java.io.IOException; public class Main { - private static final Logger logger = Logger.getLogger(Main.class); + private static final Logger logger = LoggerFactory.getLogger(Main.class); public static void main(String[] args) { // parse command line @@ -27,7 +28,7 @@ public class Main { try { cmd = new DefaultParser().parse(options, args); } catch (ParseException e) { - logger.fatal(e.toString()); + logger.error(e.toString()); System.exit(1); return; } @@ -38,13 +39,13 @@ public class Main { try { config = Config.loadConfig(configPath); } catch (IOException e) { - logger.fatal(String.format("failed to read config: %s\n", e.toString())); + logger.error(String.format("failed to read config: %s\n", e.toString())); System.exit(1); return; } if (config.db == null) { - logger.fatal("no database configuration. shutting down."); + logger.error("no database configuration. shutting down."); System.exit(1); return; } @@ -53,8 +54,8 @@ public class Main { try { DB.setupFromConfig(config.db); } catch (RuntimeException e) { - logger.fatal("setupFromConfig", e); - logger.fatal("failed to initialize database. shutting down"); + logger.error("setupFromConfig", e); + logger.error("failed to initialize database. shutting down"); System.exit(1); return; } diff --git a/src/main/java/com/mykola2312/mptv/crawler/Crawler.java b/src/main/java/com/mykola2312/mptv/crawler/Crawler.java index 65e028a..6d9dff8 100644 --- a/src/main/java/com/mykola2312/mptv/crawler/Crawler.java +++ b/src/main/java/com/mykola2312/mptv/crawler/Crawler.java @@ -2,7 +2,8 @@ package com.mykola2312.mptv.crawler; import java.util.List; -import org.apache.log4j.Logger; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import java.nio.charset.StandardCharsets; import java.nio.file.Files; @@ -31,7 +32,7 @@ import com.mykola2312.mptv.tables.records.SourceRecord; import com.mykola2312.mptv.task.Task; public class Crawler implements Task { - private static final Logger logger = Logger.getLogger(Crawler.class); + private static final Logger logger = LoggerFactory.getLogger(Crawler.class); private Integer crawlId; @@ -157,10 +158,10 @@ public class Crawler implements Task { updateAllChannels(m3u, source.rootName); } catch (IOException e) { - logger.error(e); + logger.error(e.toString()); logger.error(String.format("failed to read local m3u file: %s", e.getMessage())); } catch (M3UException e) { - logger.error(e); + logger.error(e.toString()); logger.error(String.format("failed to parse m3u: %s", e.getMessage())); } } diff --git a/src/main/java/com/mykola2312/mptv/crawler/WebContent.java b/src/main/java/com/mykola2312/mptv/crawler/WebContent.java index c2d8f05..6d800a1 100644 --- a/src/main/java/com/mykola2312/mptv/crawler/WebContent.java +++ b/src/main/java/com/mykola2312/mptv/crawler/WebContent.java @@ -3,13 +3,14 @@ package com.mykola2312.mptv.crawler; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.util.EntityUtils; -import org.apache.log4j.Logger; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; public class WebContent { public int status; public String body = null; - private static final Logger logger = Logger.getLogger(WebContent.class); + private static final Logger logger = LoggerFactory.getLogger(WebContent.class); public WebContent(HttpResponse response) { this.status = response.getStatusLine().getStatusCode(); @@ -19,7 +20,7 @@ public class WebContent { this.body = EntityUtils.toString(entity, "UTF-8"); } catch (Exception e) { logger.warn(String.format("failed to get content for %s: %s", response.toString())); - logger.warn(e); + logger.warn(e.toString()); } } } diff --git a/src/main/java/com/mykola2312/mptv/crawler/WebException.java b/src/main/java/com/mykola2312/mptv/crawler/WebException.java index 63201f4..fa4fc86 100644 --- a/src/main/java/com/mykola2312/mptv/crawler/WebException.java +++ b/src/main/java/com/mykola2312/mptv/crawler/WebException.java @@ -5,7 +5,8 @@ import java.security.KeyManagementException; import java.security.NoSuchAlgorithmException; import org.apache.http.client.ClientProtocolException; -import org.apache.log4j.Logger; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; // TODO: make more useful this stub exception public class WebException extends RuntimeException { @@ -17,7 +18,7 @@ public class WebException extends RuntimeException { public final Type type; - protected static final Logger logger = Logger.getLogger(WebException.class); + protected static final Logger logger = LoggerFactory.getLogger(WebException.class); protected void log() { logger.warn(String.format("%s: %s", type.name(), this.getCause().getMessage())); } diff --git a/src/main/java/com/mykola2312/mptv/db/DBPool.java b/src/main/java/com/mykola2312/mptv/db/DBPool.java index 712f97a..7434766 100644 --- a/src/main/java/com/mykola2312/mptv/db/DBPool.java +++ b/src/main/java/com/mykola2312/mptv/db/DBPool.java @@ -1,6 +1,7 @@ package com.mykola2312.mptv.db; -import org.apache.log4j.Logger; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.checkerframework.checker.nullness.qual.*; import java.sql.Connection; import java.sql.DriverManager; @@ -15,7 +16,7 @@ import org.jooq.exception.DataAccessException; public class DBPool implements ConnectionProvider { private String url; - private static final Logger logger = Logger.getLogger(DBPool.class); + private static final Logger logger = LoggerFactory.getLogger(DBPool.class); private class DBConnection { public final Connection connection; diff --git a/src/main/java/com/mykola2312/mptv/task/TaskDispatcher.java b/src/main/java/com/mykola2312/mptv/task/TaskDispatcher.java index f2a12e2..75472b1 100644 --- a/src/main/java/com/mykola2312/mptv/task/TaskDispatcher.java +++ b/src/main/java/com/mykola2312/mptv/task/TaskDispatcher.java @@ -5,7 +5,8 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.List; -import org.apache.log4j.Logger; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.jooq.*; import org.jooq.exception.NoDataFoundException; import org.jooq.impl.*; @@ -16,7 +17,7 @@ import com.mykola2312.mptv.db.DB; import com.mykola2312.mptv.tables.records.TaskRecord; public class TaskDispatcher implements Runnable { - private static final Logger logger = Logger.getLogger(TaskDispatcher.class); + private static final Logger logger = LoggerFactory.getLogger(TaskDispatcher.class); private final HashMap taskHandles = new HashMap<>(); private boolean isRunning = false; @@ -57,7 +58,7 @@ public class TaskDispatcher implements Runnable { try { task.dispatch(); } catch (Exception e) { - logger.error(e); + logger.error(e.toString()); } DSL.using(DB.CONFIG) diff --git a/src/main/java/com/mykola2312/mptv/ui/LogPanel.java b/src/main/java/com/mykola2312/mptv/ui/LogPanel.java index 083d70e..86b29cd 100644 --- a/src/main/java/com/mykola2312/mptv/ui/LogPanel.java +++ b/src/main/java/com/mykola2312/mptv/ui/LogPanel.java @@ -1,74 +1,74 @@ -package com.mykola2312.mptv.ui; +// package com.mykola2312.mptv.ui; -import java.awt.BorderLayout; +// import java.awt.BorderLayout; -import javax.swing.JPanel; -import javax.swing.JScrollPane; -import javax.swing.JTextArea; -import javax.swing.text.DefaultCaret; +// import javax.swing.JPanel; +// import javax.swing.JScrollPane; +// import javax.swing.JTextArea; +// import javax.swing.text.DefaultCaret; -import org.apache.log4j.AppenderSkeleton; -import org.apache.log4j.Level; -import org.apache.log4j.Logger; -import org.apache.log4j.spi.LoggingEvent; -import org.apache.log4j.spi.Filter;; +// import org.apache.log4j.AppenderSkeleton; +// import org.apache.log4j.Level; +// import org.apache.log4j.Logger; +// import org.apache.log4j.spi.LoggingEvent; +// import org.apache.log4j.spi.Filter; -public class LogPanel extends JPanel { - private class LogAppender extends AppenderSkeleton { - private final LogPanel area; +// public class LogPanel extends JPanel { +// private class LogAppender extends AppenderSkeleton { +// private final LogPanel area; - public LogAppender(LogPanel area) { - super(); - this.area = area; +// public LogAppender(LogPanel area) { +// super(); +// this.area = area; - this.addFilter(new Filter() { - @Override() - public int decide(LoggingEvent event) { - if (event.getLevel().equals(Level.DEBUG)) { - return DENY; - } else { - return ACCEPT; - } - } - }); - } +// this.addFilter(new Filter() { +// @Override() +// public int decide(LoggingEvent event) { +// if (event.getLevel().equals(Level.DEBUG)) { +// return DENY; +// } else { +// return ACCEPT; +// } +// } +// }); +// } - @Override - public void close() {} +// @Override +// public void close() {} - @Override - public boolean requiresLayout() { - return false; - } +// @Override +// public boolean requiresLayout() { +// return false; +// } - @Override - protected void append(LoggingEvent event) { - area.appendEvent(event); - } - } +// @Override +// protected void append(LoggingEvent event) { +// area.appendEvent(event); +// } +// } - private final JTextArea logArea; - private final JScrollPane scrollLog; +// private final JTextArea logArea; +// private final JScrollPane scrollLog; - public void appendEvent(LoggingEvent event) { - String content = event.getRenderedMessage(); - logArea.append(content + "\n"); - logArea.setCaretPosition(logArea.getDocument().getLength()); - } +// public void appendEvent(LoggingEvent event) { +// String content = event.getRenderedMessage(); +// logArea.append(content + "\n"); +// logArea.setCaretPosition(logArea.getDocument().getLength()); +// } - public LogPanel(Logger target) { - super(new BorderLayout()); +// public LogPanel(Logger target) { +// super(new BorderLayout()); - logArea = new JTextArea(); - logArea.setEditable(false); - DefaultCaret caret = (DefaultCaret) logArea.getCaret(); - caret.setUpdatePolicy(DefaultCaret.OUT_BOTTOM); +// logArea = new JTextArea(); +// logArea.setEditable(false); +// DefaultCaret caret = (DefaultCaret) logArea.getCaret(); +// caret.setUpdatePolicy(DefaultCaret.OUT_BOTTOM); - scrollLog = new JScrollPane(logArea); - scrollLog.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_NEVER); - scrollLog.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER); - add(scrollLog, BorderLayout.CENTER); +// scrollLog = new JScrollPane(logArea); +// scrollLog.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_NEVER); +// scrollLog.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER); +// add(scrollLog, BorderLayout.CENTER); - target.addAppender(new LogAppender(this)); - } -} +// target.addAppender(new LogAppender(this)); +// } +// } diff --git a/src/main/java/com/mykola2312/mptv/ui/MenuPanel.java b/src/main/java/com/mykola2312/mptv/ui/MenuPanel.java index 721f011..40e8b53 100644 --- a/src/main/java/com/mykola2312/mptv/ui/MenuPanel.java +++ b/src/main/java/com/mykola2312/mptv/ui/MenuPanel.java @@ -3,7 +3,8 @@ package com.mykola2312.mptv.ui; import javax.swing.*; import java.util.List; -import org.apache.log4j.Logger; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.jooq.impl.DSL; import com.mykola2312.mptv.db.DB; @@ -121,7 +122,8 @@ public class MenuPanel extends JPanel { super(new BorderLayout()); setFont(font); - final LogPanel logPanel = new LogPanel(Logger.getRootLogger()); + //final LogPanel logPanel = new LogPanel(LoggerFactory.getRootLogger()); + final JPanel logPanel = new JPanel(); final JPanel categoryPanel = new JPanel(new BorderLayout()); final JPanel channelPanel = new JPanel(new BorderLayout()); diff --git a/src/main/resources/logback.xml b/src/main/resources/logback.xml new file mode 100644 index 0000000..4e21681 --- /dev/null +++ b/src/main/resources/logback.xml @@ -0,0 +1,18 @@ + + + + + + %d{HH:mm:ss.SSS} %-5level %logger{36} - %msg%n + + + + + + + + + + + + \ No newline at end of file