CRITICAL: switch from log4j to logback because turns out CVE is not patched

This commit is contained in:
mykola2312 2024-04-25 02:01:43 +03:00
parent b03f34ffeb
commit af7033d1e4
10 changed files with 119 additions and 85 deletions

14
pom.xml
View file

@ -68,9 +68,9 @@
<!-- Logging --> <!-- Logging -->
<dependency> <dependency>
<groupId>log4j</groupId> <groupId>ch.qos.logback</groupId>
<artifactId>log4j</artifactId> <artifactId>logback-classic</artifactId>
<version>1.2.17</version> <version>1.5.6</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.slf4j</groupId> <groupId>org.slf4j</groupId>
@ -106,6 +106,14 @@
<artifactId>httpcore</artifactId> <artifactId>httpcore</artifactId>
<version>4.4.16</version> <version>4.4.16</version>
</dependency> </dependency>
<!-- MPV -->
<dependency>
<groupId>com.kohlschutter.junixsocket</groupId>
<artifactId>junixsocket-core</artifactId>
<version>2.9.1</version>
<type>pom</type>
</dependency>
</dependencies> </dependencies>
<build> <build>

View file

@ -6,13 +6,14 @@ import com.mykola2312.mptv.db.DB;
import com.mykola2312.mptv.task.TaskDispatcher; import com.mykola2312.mptv.task.TaskDispatcher;
import com.mykola2312.mptv.ui.MainFrame; import com.mykola2312.mptv.ui.MainFrame;
import org.apache.commons.cli.*; import org.apache.commons.cli.*;
import org.apache.log4j.Logger;
import org.flywaydb.core.Flyway; import org.flywaydb.core.Flyway;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.IOException; import java.io.IOException;
public class Main { 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) { public static void main(String[] args) {
// parse command line // parse command line
@ -27,7 +28,7 @@ public class Main {
try { try {
cmd = new DefaultParser().parse(options, args); cmd = new DefaultParser().parse(options, args);
} catch (ParseException e) { } catch (ParseException e) {
logger.fatal(e.toString()); logger.error(e.toString());
System.exit(1); System.exit(1);
return; return;
} }
@ -38,13 +39,13 @@ public class Main {
try { try {
config = Config.loadConfig(configPath); config = Config.loadConfig(configPath);
} catch (IOException e) { } 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); System.exit(1);
return; return;
} }
if (config.db == null) { if (config.db == null) {
logger.fatal("no database configuration. shutting down."); logger.error("no database configuration. shutting down.");
System.exit(1); System.exit(1);
return; return;
} }
@ -53,8 +54,8 @@ public class Main {
try { try {
DB.setupFromConfig(config.db); DB.setupFromConfig(config.db);
} catch (RuntimeException e) { } catch (RuntimeException e) {
logger.fatal("setupFromConfig", e); logger.error("setupFromConfig", e);
logger.fatal("failed to initialize database. shutting down"); logger.error("failed to initialize database. shutting down");
System.exit(1); System.exit(1);
return; return;
} }

View file

@ -2,7 +2,8 @@ package com.mykola2312.mptv.crawler;
import java.util.List; 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.charset.StandardCharsets;
import java.nio.file.Files; import java.nio.file.Files;
@ -31,7 +32,7 @@ import com.mykola2312.mptv.tables.records.SourceRecord;
import com.mykola2312.mptv.task.Task; import com.mykola2312.mptv.task.Task;
public class Crawler implements 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; private Integer crawlId;
@ -157,10 +158,10 @@ public class Crawler implements Task {
updateAllChannels(m3u, source.rootName); updateAllChannels(m3u, source.rootName);
} catch (IOException e) { } catch (IOException e) {
logger.error(e); logger.error(e.toString());
logger.error(String.format("failed to read local m3u file: %s", e.getMessage())); logger.error(String.format("failed to read local m3u file: %s", e.getMessage()));
} catch (M3UException e) { } catch (M3UException e) {
logger.error(e); logger.error(e.toString());
logger.error(String.format("failed to parse m3u: %s", e.getMessage())); logger.error(String.format("failed to parse m3u: %s", e.getMessage()));
} }
} }

View file

@ -3,13 +3,14 @@ package com.mykola2312.mptv.crawler;
import org.apache.http.HttpEntity; import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse; import org.apache.http.HttpResponse;
import org.apache.http.util.EntityUtils; import org.apache.http.util.EntityUtils;
import org.apache.log4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class WebContent { public class WebContent {
public int status; public int status;
public String body = null; 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) { public WebContent(HttpResponse response) {
this.status = response.getStatusLine().getStatusCode(); this.status = response.getStatusLine().getStatusCode();
@ -19,7 +20,7 @@ public class WebContent {
this.body = EntityUtils.toString(entity, "UTF-8"); this.body = EntityUtils.toString(entity, "UTF-8");
} catch (Exception e) { } catch (Exception e) {
logger.warn(String.format("failed to get content for %s: %s", response.toString())); logger.warn(String.format("failed to get content for %s: %s", response.toString()));
logger.warn(e); logger.warn(e.toString());
} }
} }
} }

View file

@ -5,7 +5,8 @@ import java.security.KeyManagementException;
import java.security.NoSuchAlgorithmException; import java.security.NoSuchAlgorithmException;
import org.apache.http.client.ClientProtocolException; 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 // TODO: make more useful this stub exception
public class WebException extends RuntimeException { public class WebException extends RuntimeException {
@ -17,7 +18,7 @@ public class WebException extends RuntimeException {
public final Type type; 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() { protected void log() {
logger.warn(String.format("%s: %s", type.name(), this.getCause().getMessage())); logger.warn(String.format("%s: %s", type.name(), this.getCause().getMessage()));
} }

View file

@ -1,6 +1,7 @@
package com.mykola2312.mptv.db; 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 org.checkerframework.checker.nullness.qual.*;
import java.sql.Connection; import java.sql.Connection;
import java.sql.DriverManager; import java.sql.DriverManager;
@ -15,7 +16,7 @@ import org.jooq.exception.DataAccessException;
public class DBPool implements ConnectionProvider { public class DBPool implements ConnectionProvider {
private String url; private String url;
private static final Logger logger = Logger.getLogger(DBPool.class); private static final Logger logger = LoggerFactory.getLogger(DBPool.class);
private class DBConnection { private class DBConnection {
public final Connection connection; public final Connection connection;

View file

@ -5,7 +5,8 @@ import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import org.apache.log4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.jooq.*; import org.jooq.*;
import org.jooq.exception.NoDataFoundException; import org.jooq.exception.NoDataFoundException;
import org.jooq.impl.*; import org.jooq.impl.*;
@ -16,7 +17,7 @@ import com.mykola2312.mptv.db.DB;
import com.mykola2312.mptv.tables.records.TaskRecord; import com.mykola2312.mptv.tables.records.TaskRecord;
public class TaskDispatcher implements Runnable { 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<String, Task> taskHandles = new HashMap<>(); private final HashMap<String, Task> taskHandles = new HashMap<>();
private boolean isRunning = false; private boolean isRunning = false;
@ -57,7 +58,7 @@ public class TaskDispatcher implements Runnable {
try { try {
task.dispatch(); task.dispatch();
} catch (Exception e) { } catch (Exception e) {
logger.error(e); logger.error(e.toString());
} }
DSL.using(DB.CONFIG) DSL.using(DB.CONFIG)

View file

@ -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.JPanel;
import javax.swing.JScrollPane; // import javax.swing.JScrollPane;
import javax.swing.JTextArea; // import javax.swing.JTextArea;
import javax.swing.text.DefaultCaret; // import javax.swing.text.DefaultCaret;
import org.apache.log4j.AppenderSkeleton; // import org.apache.log4j.AppenderSkeleton;
import org.apache.log4j.Level; // import org.apache.log4j.Level;
import org.apache.log4j.Logger; // import org.apache.log4j.Logger;
import org.apache.log4j.spi.LoggingEvent; // import org.apache.log4j.spi.LoggingEvent;
import org.apache.log4j.spi.Filter;; // import org.apache.log4j.spi.Filter;
public class LogPanel extends JPanel { // public class LogPanel extends JPanel {
private class LogAppender extends AppenderSkeleton { // private class LogAppender extends AppenderSkeleton {
private final LogPanel area; // private final LogPanel area;
public LogAppender(LogPanel area) { // public LogAppender(LogPanel area) {
super(); // super();
this.area = area; // this.area = area;
this.addFilter(new Filter() { // this.addFilter(new Filter() {
@Override() // @Override()
public int decide(LoggingEvent event) { // public int decide(LoggingEvent event) {
if (event.getLevel().equals(Level.DEBUG)) { // if (event.getLevel().equals(Level.DEBUG)) {
return DENY; // return DENY;
} else { // } else {
return ACCEPT; // return ACCEPT;
} // }
} // }
}); // });
} // }
@Override // @Override
public void close() {} // public void close() {}
@Override // @Override
public boolean requiresLayout() { // public boolean requiresLayout() {
return false; // return false;
} // }
@Override // @Override
protected void append(LoggingEvent event) { // protected void append(LoggingEvent event) {
area.appendEvent(event); // area.appendEvent(event);
} // }
} // }
private final JTextArea logArea; // private final JTextArea logArea;
private final JScrollPane scrollLog; // private final JScrollPane scrollLog;
public void appendEvent(LoggingEvent event) { // public void appendEvent(LoggingEvent event) {
String content = event.getRenderedMessage(); // String content = event.getRenderedMessage();
logArea.append(content + "\n"); // logArea.append(content + "\n");
logArea.setCaretPosition(logArea.getDocument().getLength()); // logArea.setCaretPosition(logArea.getDocument().getLength());
} // }
public LogPanel(Logger target) { // public LogPanel(Logger target) {
super(new BorderLayout()); // super(new BorderLayout());
logArea = new JTextArea(); // logArea = new JTextArea();
logArea.setEditable(false); // logArea.setEditable(false);
DefaultCaret caret = (DefaultCaret) logArea.getCaret(); // DefaultCaret caret = (DefaultCaret) logArea.getCaret();
caret.setUpdatePolicy(DefaultCaret.OUT_BOTTOM); // caret.setUpdatePolicy(DefaultCaret.OUT_BOTTOM);
scrollLog = new JScrollPane(logArea); // scrollLog = new JScrollPane(logArea);
scrollLog.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_NEVER); // scrollLog.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_NEVER);
scrollLog.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER); // scrollLog.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
add(scrollLog, BorderLayout.CENTER); // add(scrollLog, BorderLayout.CENTER);
target.addAppender(new LogAppender(this)); // target.addAppender(new LogAppender(this));
} // }
} // }

View file

@ -3,7 +3,8 @@ package com.mykola2312.mptv.ui;
import javax.swing.*; import javax.swing.*;
import java.util.List; import java.util.List;
import org.apache.log4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.jooq.impl.DSL; import org.jooq.impl.DSL;
import com.mykola2312.mptv.db.DB; import com.mykola2312.mptv.db.DB;
@ -121,7 +122,8 @@ public class MenuPanel extends JPanel {
super(new BorderLayout()); super(new BorderLayout());
setFont(font); 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 categoryPanel = new JPanel(new BorderLayout());
final JPanel channelPanel = new JPanel(new BorderLayout()); final JPanel channelPanel = new JPanel(new BorderLayout());

View file

@ -0,0 +1,18 @@
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<layout class="ch.qos.logback.classic.PatternLayout">
<Pattern>
%d{HH:mm:ss.SSS} %-5level %logger{36} - %msg%n
</Pattern>
</layout>
</appender>
<logger name="com.mykola2312" level="debug" additivity="false">
<appender-ref ref="CONSOLE"/>
</logger>
<root level="error">
<appender-ref ref="CONSOLE"/>
</root>
</configuration>