From ee58307c495f3aa03658e6a14b344d7f4b44f83b Mon Sep 17 00:00:00 2001 From: jpdahlke Date: Wed, 20 Sep 2023 10:01:21 -0400 Subject: [PATCH] Revert "remove deprecated datetimeformatparserlegacy (#569)" (#592) This reverts commit 0f11c9e11328c38db0701ab33cee7637ab3af431. --- .../util/DateTimeFormatParserLegacy.java | 86 +++++++++++++++++++ .../util/DateTimeFormatParserLegacy.cfg | 42 +++++++++ 2 files changed, 128 insertions(+) create mode 100644 src/main/java/emissary/util/DateTimeFormatParserLegacy.java create mode 100644 src/main/resources/emissary/util/DateTimeFormatParserLegacy.cfg diff --git a/src/main/java/emissary/util/DateTimeFormatParserLegacy.java b/src/main/java/emissary/util/DateTimeFormatParserLegacy.java new file mode 100644 index 0000000000..8a35f37612 --- /dev/null +++ b/src/main/java/emissary/util/DateTimeFormatParserLegacy.java @@ -0,0 +1,86 @@ +package emissary.util; + +import emissary.config.Configurator; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.IOException; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +public class DateTimeFormatParserLegacy { + + protected static final Logger logger = LoggerFactory.getLogger(DateTimeFormatParserLegacy.class); + + /** Date formats we can use to parse event date strings */ + @Deprecated + protected static final List dateFormats = new ArrayList<>(); + + static { + configure(); + } + + protected static void configure() { + try { + Configurator configG = emissary.config.ConfigUtil.getConfigInfo(DateTimeFormatParserLegacy.class); + for (final String dfentry : configG.findEntries("DATE_FORMAT")) { + try { + final SimpleDateFormat sdf = new SimpleDateFormat(dfentry); + sdf.setLenient(true); + dateFormats.add(sdf); + } catch (Exception ex) { + logger.debug("DATE_FORMAT entry '{}' cannot be parsed", dfentry, ex); + } + } + logger.debug("Loaded {} DATE_FORMAT entries", dateFormats.size()); + } catch (IOException e) { + logger.error("Cannot open default config file", e); + } + } + + + /** + * Parse an RFC-822 Date or one of the thousands of variants make a quick attempt to normalize the timezone information + * and get the timestamp in GMT. Should change to pass in a default from the U124 header + * + * @param dateString the string date from the RFC 822 Date header + * @param supplyDefaultOnBad when true use current date if sentDate is unparseable + * @return the GMT time of the event or NOW if unparseable, or null if supplyDefaultOnBad is false + */ + @Deprecated + public static Date parseEventDate(final String dateString, final boolean supplyDefaultOnBad) { + Date date = null; + if (dateString != null && dateString.length() > 0) { + // Take it apart and stick it back together to get + // get rid of multiple contiguous spaces + String instr = dateString.replaceAll("\t+", " "); // tabs + instr = instr.replaceAll("[ ]+", " "); // multiple spaces + instr = instr.replaceAll("=0D$", ""); // common qp'ified ending + + // try each date format in turn until one works + synchronized (dateFormats) { + for (final SimpleDateFormat sdf : dateFormats) { + try { + date = sdf.parse(instr); + break; + } catch (Exception e) { + // Ignore. + logger.debug("Error parsing date", e); + } + } + } + } + + // Use the default if required + if (date == null && supplyDefaultOnBad) { + date = new Date(); + } + + // Let them have it. + return date; + } + +} diff --git a/src/main/resources/emissary/util/DateTimeFormatParserLegacy.cfg b/src/main/resources/emissary/util/DateTimeFormatParserLegacy.cfg new file mode 100644 index 0000000000..01c340b2ab --- /dev/null +++ b/src/main/resources/emissary/util/DateTimeFormatParserLegacy.cfg @@ -0,0 +1,42 @@ + +# see SimpleDateFormat javadocs to understand these +DATE_FORMAT = "E, d MMM yyyy HH:mm:ss Z" +DATE_FORMAT = "E, d MMM yyyy HH:mm:ss z" +DATE_FORMAT = "E, d MMM yyyy HH:mm:ss" +DATE_FORMAT = "d MMM yyyy HH:mm:ss Z" +DATE_FORMAT = "E, d MMM yy HH:mm:ss Z" +DATE_FORMAT = "E, d MMM yyyy H:mm:ss Z" +DATE_FORMAT = "E, d MMM yyyy HH:mm Z" +DATE_FORMAT = "E, d MMM yyyy KK:mm:ss a Z" +DATE_FORMAT = "E d MMM. yyyy HH:mm:ss Z" +DATE_FORMAT = "E, d MMM. yyyy HH:mm:ss Z" +DATE_FORMAT = "E, d MMM yyyy HH:mm:ss Z (z)" +DATE_FORMAT = "E, MMM d, yyyy HH:mm:ss z" +DATE_FORMAT = "E, MMM d, yyyy HH:mm:ss" +DATE_FORMAT = "E, MMM d, yyyy KK:mm a" +DATE_FORMAT = "dd-MMM-yyyy HH:mm:ss Z" +DATE_FORMAT = "E dd-MMM-yyyy HH:mm:ss" +DATE_FORMAT = "E dd-MMM-yyyy HH:mm:ss Z" +DATE_FORMAT = "MM/dd/yy KK:mm a" +DATE_FORMAT = "MM/dd/yy KK:mm:ss a" +DATE_FORMAT = "MM/dd/yy KK:mm" +DATE_FORMAT = "MM/dd/yy KK:mm:ss" +DATE_FORMAT = "MM/dd/yy HH:mm" +DATE_FORMAT = "MM/dd/yy HH:mm:ss" +DATE_FORMAT = "MM/dd/yy kk:mm" +DATE_FORMAT = "MM/dd/yy kk:mm:ss" +DATE_FORMAT = "MMM d yyyy HH:mm:ss" +DATE_FORMAT = "E MMM d HH:mm:ss yyyy" +DATE_FORMAT = "E MMM d yyyy HH:mm:ss" +DATE_FORMAT = "d MMM yyyy HH:mm z" +DATE_FORMAT = "d MMM yyyy HH:mm" +DATE_FORMAT = "E MMM d yyyy HH:mm:ss z" +DATE_FORMAT = "E,d MMM yyyy KK:mm:ss a" +DATE_FORMAT = "E, MMM d, yyyy, HH:mm:ss" +DATE_FORMAT = "E, MMM d, yyyy, HH:mm:ss a" +DATE_FORMAT = "E, MMM d, yyyy, HH:mm:ss a z" +DATE_FORMAT = "E, MMM d, yyyy, HH:mm:ss a Z" +DATE_FORMAT = "E, d MMM, yyyy HH:mm:ss a" +DATE_FORMAT = "dd-MM-yyyy" +DATE_FORMAT = "dd.MM.yyyy" +DATE_FORMAT = "dd/MM/yyyy"